При отправке запроса в PayPal Payouts REST API возвращается HTTP-код 204, а содержимое отсутствует - PullRequest
0 голосов
/ 10 октября 2019

Я хочу позвонить на мой сервер, который затем вызовет API REST PayPal Payouts для выполнения определенного платежа. Я настроил необходимые учетные записи, и когда я пытаюсь это сделать с Почтальоном, все работает отлично! Я вызываю URL: https://api.sandbox.paypal.com/v1/payments/payouts с токеном и Content-Type, установленным на application/json и тело

{
  "sender_batch_header": {
    "sender_batch_id": "Payouts_2018_100013",
    "email_subject": "You have a payout!",
    "email_message": "You have received a payout from ****! Thanks for using our service!"
  },
  "items": [
    {
      "recipient_type": "EMAIL",
      "amount": {
        "value": "9.87",
        "currency": "EUR"
      },
      "receiver": "****@*****.com"
    }]
}

. Это вернет что-то вроде

{
    "batch_header": {
        "payout_batch_id": "F5YLETFEWFLUS",
        "batch_status": "PENDING",
        "sender_batch_header": {
            "sender_batch_id": "Payouts_2018_100012",
            "email_subject": "You have a payout!",
            "email_message": "You have received a payout from realnote! Thanks for using our service!"
        }
    },
    "links": [
        {
            "href": "https://api.sandbox.paypal.com/v1/payments/payouts/F5YLETFEWFLUS",
            "rel": "self",
            "method": "GET",
            "encType": "application/json"
        }
    ]
}

с кодом HHTP201 (создано). Это абсолютно правильно, и я могу видеть состояние моего платежа при вызове соответствующего URL с payout_batch_id из ответа.

Однако, если я пытаюсь сделать тот же звонок с моего сервера NodeJS, возникают проблемы. Я получаю токен, и все работает, но затем я создаю свой запрос следующим образом:

const options = {
    url: "https://api.sandbox.paypal.com/v1/payments/payouts",
    headers: {
      'Content-Type': 'application/json'
    },
    auth: {
      'bearer': token
    },
    form: {
      "sender_batch_header": {
        "sender_batch_id": "***_payment_***",
        "email_subject": "You have a payout!",
        "email_message": "You have received a payout from ****! Thanks for using our service!"
      },
      "items": [
        {
          "recipient_type": "EMAIL",
          "amount": {
            "value": "10.0",
            "currency": "EUR"
          },
          "receiver": "*****@*****.com"
        }]
    }
  };

Затем я отправляю запрос, используя модуль request с таким кодом:

request.post(options, function(err,httpResponse,body){
    if (err) {
      console.error('Sending money failed:', err);
    } else {
      console.log('Response from PayPal successful!  Server responded with:', body);

      //var payPalAnswer = JSON.parse(body);
    }
  })

Ноэто приведет к получению ответа с кодом состояния 204 (без содержимого), и, что неудивительно, без содержания, поэтому нет возможности получить статус моего платежа, как с помощью ответа сервера, который я получил с помощью Postman. Где моя ошибка?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Правильный ответ состоял в том, чтобы связать тело запроса следующим образом:

var dataObject =  {"sender_batch_header": {
      "sender_batch_id": "payment_",
      "email_subject": "You have a payout!",
      "email_message": "You have received a payout from *****! Thanks for using our service!"
    },
    "items": [
      {
        "recipient_type": "EMAIL",
        "amount": {
          "value": '10.0',
          "currency": "EUR"
        },
        "receiver": "*******@personal.example.com"
      }]
  };

const options = {
    url: "https://api.sandbox.paypal.com/v1/payments/payouts",
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': dataObject.length
    },
    auth: {
      'bearer': token
    },
    body: dataObject,
    json: true
  };

Теперь PayPal возвращает правильный ответ сервера 201.

0 голосов
/ 10 октября 2019
request.post(options, {data: "..."},function(err,httpResponse,body){
    if (err) {
      console.error('Sending money failed:', err);
    } else {
      console.log('Response from PayPal successful!  Server responded with:', body);

      //var payPalAnswer = JSON.parse(body);
    }
  })

Вы должны использовать свои данные в качестве второго параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...