Песочница PayPal при выполнении вызова возвращает ошибку 400 Неверный запрос - PullRequest
0 голосов
/ 29 октября 2018

При реализации интеграции с сервером Paypal вызов POST Create работает правильно для https://api.sandbox.paypal.com/v1/payments/payment с объектом ответа, совпадающим с найденным в API. Сервер успешно возвращает результат клиенту, а res.id для функции .then (res) в paypal.request.post: PAY-76T970067E989851JLPLCMKA

После того, как пользователь авторизует платеж, клиент отправляет запрос на конечную точку выполнения моего сервера с полезной нагрузкой:

{
    "paymentID" : "PAY-76T970067E989851JLPLCMKA",
    "payerID" : "3LSD3Q8J7T3ZL"
}

Затем сервер перемоделирует полезную нагрузку для запроса к конечной точке POST Execute PayPal следующим образом:

заголовки:

Content-Type = "application/json"
Authorization = "Bearer " + accessToken // checked not expired

и грузоподъемность кузова:

{"payer_id" : "3LSD3Q8J7T3ZL"}

Затем создается сообщение:

https://api.sandbox.paypal.com/v1/payments/payment/PAY-76T970067E989851JLPLCMKA/execute

В этот момент сервер PayPal отвечает: Удаленный сервер возвратил ошибку: (400) Неверный запрос.

Форма, которую я вижу, соответствует требованиям API, изложенным здесь: https://developer.paypal.com/docs/api/payments/v1/#payment_execute

В качестве примечания я настроил конечную точку на своем собственном сервере, чтобы проверить правильность заголовков и полезной нагрузки JSON, передаваемых конечной точке выполнения Paypal.

Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 04 ноября 2018

Решено: Несмотря на то, что ошибка возвращается при вызове конечной точки исполнения Paypal, проблема фактически заключается в создании полезной нагрузки. Свойство soft_descriptor, переданное конечной точке Create, должно быть уникальным , так же как свойство invoice_number. Оба эти значения находятся в объекте транзакции, как показано здесь:

https://developer.paypal.com/docs/api/payments/v1/#definition-transaction.

Действительно, ошибка должна быть обнаружена при создании платежа, а не при его выполнении, но, надеюсь, это поможет кому-то другому.

Примечание для Paypal: немного больше информации в API избавило бы от многих головных болей.

...