Транзакция смарт-кнопки PayPal не взимается после «утверждения»

#paypal #paypal-sandbox #paypal-rest-sdk

#paypal #paypal-песочница #paypal-rest-sdk

Вопрос:

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

Итак, код длинный, но в основном на стороне сервера мы сначала создаем транзакцию:

                   const request = new paypal.orders.OrdersCreateRequest();
                        request.prefer("return=representation");
                        request.requestBody({
                          intent: 'CAPTURE', //CAPTURE
                          purchase_units: [{
                            amount: {
                              currency_code: currency,
                              value: finalPrice
                            },
                            payee: {
                              email_address: payee
                            },
                            shipping: shipObj
                          }]
                        });
  

и позже мы одобряем заказ с помощью PayPal :

   let request = new paypal.orders.OrdersGetRequest(orderID);
                        let order;
                        try {
                          order = await client.execute(request);
                        }
                        catch (err) {
                          console.error("error",err);
                          return res.sendStatus(500);
                        }
  

На данный момент я получаю order.result.status = ОДОБРЕНО .

Это живая среда (клиент и секретные ключи). Как вы можете отправить одобрение разработчику и указать идентификатор заказа, но не взимать плату?Это такая опасная вещь, и она может буквально разрушить бизнес.

Итак, я узнал, что есть ссылка на ваш идентификатор заказа :

 https://api.paypal.com/v2/checkout/orders/4PE63643WC652674S
  

Если вы посмотрите на эту страницу, вы получите это :

 "message":"Authentication failed due to invalid authentication credentials or a missing Authorization header."
  

Теперь только бог знает, что это значит, и это сообщение об ошибке на странице идентификатора заказа, что означает, что идентификатор заказа ничего не значит??

Итак, я также проверяю ссылку paypal с моим идентификатором клиента (должно быть идентично моему идентификатору клиента в sdk, верно?) :

 https://www.paypal.com/sdk/js?client-id=xxxxxxxxxamp;merchant-id=xxx@yyyy.comamp;disable-funding=credit,cardamp;currency=USD
  

Который кажется нормальным и содержит правильное электронное письмо.

Комментарии:

1. Вам нужно создать заказ, попросить клиента одобрить заказ через окно PayPal, затем вы можете зафиксировать заказ — не похоже, что вы фиксируете его где угодно (новый paypal.orders. Запрос OrdersCaptureRequest(OrderID))

2. конечно, я это делаю, появляется окно с адресом и ценой, пользователь входит в систему, одобряет продажу, затем это происходит. У меня есть ordersscreaterequest и OrdersGetRequest, поэтому, когда приходит запрос OrdersCaptureRequest?

3. Я не вижу, где вы фиксируете заказ?

4. насколько глупым я мог быть. Извините. По какой-то причине я удалил этот блок. Вау. Большое спасибо.

Ответ №1:

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

Просто чтобы рассмотреть наилучшие способы интеграции, если вы делаете это с помощью вызовов API с сервера, вам нужно настроить make два маршрута на вашем сервере, один для «Настройки транзакции» и один для «Захвата транзакции», описанный здесь: https://developer.paypal.com/docs/checkout/reference/server-integration /

Тогда лучший поток одобрения клиентов JS для сопряжения с этими серверными маршрутами таков: https://developer.paypal.com/demo/checkout/#/pattern/server