Как получить переменные, которые были отправлены с транзакцией PayPal (NODEJS) - PullRequest
1 голос
/ 16 марта 2020

Я создаю приложение, которое объединяет Angular 8 и NodeJS как заказчик для PayPal. Мне интересно, как получить все предметы, которые я отправляю на транзакцию. Например, это мой объект createOrder:

 request.requestBody({
    intent: 'CAPTURE',
    purchase_units: [{
      amount: {
        value: '7',
        currency_code: 'USD',
        breakdown: {
          item_total: {value: '7', currency_code: 'USD'}
        }
      },
      invoice_id: 'muesli_invoice_id',
      items: [{
        name: 'Hafer',
        unit_amount: {value: '3', currency_code: 'USD'},
        quantity: '1',
        sku: 'haf001'
      }, {
        name: 'Discount',
        unit_amount: {value: '4', currency_code: 'USD'},
        quantity: '1',
        sku: 'dsc002'
      }]
    }]
  });

Но когда я пытаюсь перехватить эту транзакцию на моем сервере:

  const paymentId = req.body['paymentID'];
    const request = new paypal.orders.OrdersCaptureRequest(paymentId);
    request.requestBody({});
    // Call API with your client and get a response for your call
    let response = await payPalClient.execute(request);
    res.send(response);

Я не получаю список элементов, только это basi c информация от PayPal (адрес доставки и c.)

В чем здесь проблема? Что мне нужно изменить, когда я хочу вернуть этот список предметов?

РЕДАКТИРОВАТЬ:

statusCode: 201
headers:
cache-control: "max-age=0, no-cache, no-store, must-revalidate"
content-length: "1500"
content-type: "application/json"
date: "Mon, 16 Mar 2020 12:10:51 GMT"
paypal-debug-id: "c82e286689b67"
connection: "close"
__proto__: Object
result:
id: "64L22722PN8615907"
purchase_units: Array(1)
0:
reference_id: "default"
shipping:
name:
full_name: "John Doe"
__proto__: Object
address:
address_line_1: "Bajkowa 2 / 5"
address_line_2: "Case postale 12"
admin_area_2: "Warszawa"
admin_area_1: "PL_zip = 00800"
postal_code: "00800"
country_code: "PL"
__proto__: Object
__proto__: Object
payments:
captures: Array(1)
0:
id: "1XE85118J8824304V"
status: "COMPLETED"
amount:
currency_code: "USD"
value: "7.00"
__proto__: Object
final_capture: true
seller_protection:
status: "ELIGIBLE"
dispute_categories: (2) ["ITEM_NOT_RECEIVED", "UNAUTHORIZED_TRANSACTION"]
__proto__: Object
seller_receivable_breakdown:
gross_amount: {currency_code: "USD", value: "7.00"}
paypal_fee: {currency_code: "USD", value: "0.50"}
net_amount: {currency_code: "USD", value: "6.50"}
__proto__: Object
invoice_id: "muesli_invoice_id"
links: (3) [{…}, {…}, {…}]
create_time: "2020-03-16T12:10:50Z"
update_time: "2020-03-16T12:10:50Z"
__proto__: Object
length: 1
__proto__: Array(0)
__proto__: Object
__proto__: Object
length: 1
__proto__: Array(0)
payer:
name:
given_name: "John"
surname: "Doe"
__proto__: Object
email_address: "sb-o0n47b1188456@personal.example.com"
payer_id: "Z95Z7FJLRFVBS"
address: {country_code: "PL"}
__proto__: Object
links: Array(1)
0:
href: "https://api.sandbox.paypal.com/v2/checkout/orders/64L22722PN8615907"
rel: "self"
method: "GET"
__proto__: Object
length: 1
__proto__: Array(0)
status: "COMPLETED"

Вот весь мой ответ в json формате

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Хорошо, решение простое. Маршрут захвата сервера должен выглядеть следующим образом:

app.route('/success').post(async (req,res) => {
    const paymentId = req.body['paymentID'];
    let requestDetails = new paypal.orders.OrdersGetRequest(paymentId);
    let responseDetails = await payPalClient.execute(requestDetails);
    res.send(responseDetails);
});

Мы должны использовать let requestDetails = new paypal.orders.OrdersGetRequest(paymentId); вместо const request = new paypal.orders.OrdersCaptureRequest(paymentId);


Не забудьте захватить запрос после просмотра всех его деталей. Весь запрос должен выглядеть так:

let requestDetails = new paypal.orders.OrdersGetRequest(paymentId);
let responseDetails = await payPalClient.execute(requestDetails);
const request = new paypal.orders.OrdersCaptureRequest(paymentId);           
await payPalClient.execute(request); 
res.send(responseDetails);   
1 голос
/ 16 марта 2020

Нет пути. Ответ захвата не включает в себя детали позиции.

Из того, что я могу сказать, с помощью API v2 / payment to можно получить подробную информацию о захваченном платеже (1XE85118J8824304V в вашем примере) может также не возвращать детали позиции - хотя вы можете проверить и подтвердить.

Если, возможно, вы не отправите детали позиции в вызове API захвата близко к тому месту, где вы на самом деле пытаетесь вернуть их в свой вопрос. То есть, добавьте и отправьте их снова здесь во время захвата:

const request = new paypal.orders.OrdersCaptureRequest(paymentId);
request.requestBody({});

Тогда, возможно, будет возможно получить их обратно в более позднем звонке с деталями платежа.

Но в основном вам нужно отслеживать эту информацию самостоятельно.


На несвязанной ноте

  invoice_id: 'muesli_invoice_id',

Значение invoice_id всегда должно быть уникальным образом сгенерированным значением, никогда ранее не использованным на этот счет для успешно снятого платежа. Здесь, кажется, вы снова используете ту же строку, которая является нет-нет.

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