PayPal API возвращает RESOURCE_NOT_FOUND / INVALID_RESOURCE_ID, но транзакция указана в учетной записи Sandbox Business - PullRequest
2 голосов
/ 05 апреля 2020

У меня похожая проблема.

Настройка

  • Среда PayPal Sandbox
  • Два тестовых аккаунта (личный и бизнес-аккаунт). Во время тестов личный кабинет покупает продукт. Транзакция переходит к учетной записи Business.
  • Я создал приложение REST API, которое подключено к учетной записи Sandbox Business выше.
  • Я вошел в систему по адресу: https://www.sandbox.paypal.com/ с учетными данными учетной записи Business, чтобы сгенерировать кнопку PayPal. Код HTML кнопки добавлен на мой сайт.

Шаги

  • Я открываю веб-сайт и нажимаю кнопку PayPal.
  • Я захожу в PayPal Sandbox с учетными данными Личного кабинета.
  • Я завершаю процесс оплаты.
  • Я захожу в Бизнес-аккаунт и вижу, что транзакция (заказ ) указан там. Я вижу идентификатор транзакции.

Проблема

Во всех запросах к API я использую идентификатор клиента и секретный ключ приложения REST API, которое я уже создан для целей тестов.

После этого я открыл Postman и отправил следующий запрос в API PayPal для генерации токена доступа (Do c: https://developer.paypal.com/docs/api/get-an-access-token-curl/) .

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
   -H "Accept: application/json" \
   -H "Accept-Language: en_US" \
   -u "client_id:secret" \
   -d "grant_type=client_credentials"

Пока все хорошо. Затем я отправляю запрос API в PayPal APIv1, чтобы получить более подробную информацию о заказе. Я использую идентификатор транзакции, который в соответствии с тем, что я прочитал, идентичен идентификатору заказа.

curl -v -X GET https://api.sandbox.paypal.com/v1/checkout/orders/TRANSACTION_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token"

, и я получаю это:

{
    "http_code": 404,
    "body": {
        "name": "INVALID_RESOURCE_ID",
        "message": "INVALID_RESOURCE_ID",
        "information_link": "https://developer.paypal.com/docs/api/orders/v1/#error-INVALID_RESOURCE_ID",
        "debug_id": "c02871817abba"
    }
}

Я пытался APIv2:

curl -v -X GET https://api.sandbox.paypal.com/v1/checkout/orders/ORDER_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token"

и я получаю это:

{
    "http_code": 404,
    "body": {
        "name": "RESOURCE_NOT_FOUND",
        "details": [
            {
                "issue": "INVALID_RESOURCE_ID",
                "description": "Specified resource ID does not exist. Please check the resource ID and try again."
            }
        ],
        "message": "The specified resource does not exist.",
        "debug_id": "c2c24f91a44fd",
        "links": [
            {
                "href": "https://developer.paypal.com/docs/api/orders/v2/#error-INVALID_RESOURCE_ID",
                "rel": "information_link",
                "method": "GET"
            }
        ]
    }
}

Путаница

Транзакция четко указана в учетной записи Business, но API сообщает, что такой транзакции нет.

Предложения / Решения?


Решение

Поведение по умолчанию для платежей, инициируемых с помощью кнопки PayPal (созданной с помощью учетной записи Business), равно Продажа но не Заказ . Подробнее о различиях между ними читайте здесь - https://www.paypal.com/us/smarthelp/article/what-are-the-differences-between-the-express-checkout-payment-actions-ts1501

Решение состоит в том, чтобы сделать запрос к другому методу API PayPal (проверьте: https://developer.paypal.com/docs/paypal-plus/germany/how-to/show-sale/?fbclid=IwAR30yROZMjKT2LlRgSRuVBMGrjdmN1MGbuJ50rUiUBWwW11FSpGdxk5JNpY#show - Детали продажи )

Вот запрос, возвращающий правильные данные.

curl -v -X GET https://api.sandbox.paypal.com/v1/payments/sale/TRANSACTION_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token"

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Решение

Поведение по умолчанию для платежей, инициируемых с помощью кнопки PayPal (сгенерированной с помощью учетной записи Business), - Продажа, но не Заказ. Для получения более подробной информации о различиях между ними, прочитайте здесь .

Решение состоит в том, чтобы сделать запрос к другому методу API PayPal, проверьте this

Вот запрос, возвращающий правильные данные.

curl -v -X GET https://api.sandbox.paypal.com/v1/payments/sale/TRANSACTION_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token"
0 голосов
/ 05 апреля 2020

v2 / orders объекты предназначены только для подтверждения оплаты, они не являются транзакциями. Их идентификаторы должны сохраняться только около месяца для целей отладки, так как они не предназначены для целей бухгалтерского учета и не могут использоваться в PayPal.com

Транзакция PayPal, с другой стороны, представлена ​​объектом v2 / payment, возвращенным когда вы захватываете v2 / заказ. Вы можете получить детали захвата снова с помощью соответствующего вызова GET: https://developer.paypal.com/docs/api/payments/v2/#captures_get

...