paypal API v2 как перезагрузить после завершения транзакции

#javascript #php #paypal

#javascript #php #paypal

Вопрос:

Этот вопрос касается API paypal v2 о том, как перезапустить страницу после завершения транзакции.

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

единственная часть — как перезагрузить после полного выполнения?

вот мой код

 paypal.Buttons({
            createOrder: function(data, actions) {
              return actions.order.create({
                purchase_units: [{
                  amount: {
                    value:''.$amount.'',
                  }
                }]
              });
            },
            onApprove: function(data, actions) {
              return actions.order.capture().then(function(details) {
                
                return fetch("/__path_to_save_db.php", {
                  method: "post",
                  headers: {
                    "content-type": "application/json"
                  },
                  body: JSON.stringify({
                    orderID: data.orderID,
                    paymentID: data.paymentID,
                    payerID: data.payerID,
                  })
                });
              });
            }
          }).render("#paypal-button-container");
 

Я попытался добавить перезагрузку javascript, но она перезагружается до окончания выполнения: (

здесь

  return actions.order.capture().then(function(details) {
                    location.reload();
                    return fetch("/__path_to_save_db.php", {
 

кажется, что location.reload() запускается слишком быстро…. как заставить его выполняться только после полной загрузки ответа paypal?

Ответ №1:

Вы не должны фиксировать платежи на стороне клиента, а затем в зависимости от клиента отправлять эту информацию на сервер.

Измените это на правильную интеграцию платежей с клиент-сервером. Создайте два маршрута, один для «Настройки транзакции» и один для «Захвата транзакции», описанный здесь .

Соедините два ваших маршрута со следующим потоком утверждения: https://developer.paypal.com/demo/checkout/#/pattern/server

Ваш код для отображения сообщения об успешном завершении — или для «перезагрузки» страницы или перенаправления, если вы чувствуете себя старомодным дизайнером web 2.0 — должен использоваться в случае, который обрабатывается, когда сервер возвращает успешный захват.

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

1. Но с помощью этого кода: на стороне PHP я повторяю «что-то», и это нигде не отображается в html страницы: ( как я могу добавить taget div, чтобы вернуть «эхо» PHP?

2. Приведенный выше код на стороне сервера не выводится на веб-страницу, поэтому говорить о целевом div не имеет смысла. Он предназначен для асинхронного запроса и выводит JSON.

Ответ №2:

Я нашел решение, которое работает для меня

  return actions.order.capture().then(function(details) {
                    if(confirm("transaction completed")){ setTimeout(function(){ location.reload(); }, 1000);}
                    return fetch("/__path_to_save_db.php", {
 

«подтвердить» после задержки в 1 секунду, чтобы иметь диалоговое окно, которое при нажатии перезагружается