Проблема при создании заказа на Paypal Javascript

У меня проблема, когда скрипт вызывает создание заказа на странице HTML/javascript.

В консоли у меня ошибка "Ожидается обещание для передачи идентификатора строкового заказа в createOrder".

Я даю свой код HTML/javascript

<html >
<body>
<div id = "bouton-paypal"></div>
<script src = "https://www.paypal.com/sdk/js?client-id=monid"></script>
<script>
paypal.Buttons({
  // Set up the transaction
  createOrder: function() {
      var SETEC_URL = 'http://localhost/paypalphp/paypalcreatepayment.php';

      return fetch(SETEC_URL, {
        method: 'post',
        headers: {
          'content-type': 'application/json'
        }
      }).then(function(res) {
        return res.json();
      }).then(function(data) {
        return data.token;
      });
    }
}).render('#bouton-paypal');
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 442
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что вы следуете руководству PayPal для Настройка транзакции на сервере и проверили, что ваш сервер возвращает действительную транзакцию.

Ошибка, которую вы получаете, указывает на то, что строка return data.token; не возвращает допустимую строку идентификатора заказа (скорее всего, возвращает неопределенное значение).

Я добавил console.info(data) к вашему коду. Запустите это, чтобы мы могли проверить JSON, возвращенный с вашего сервера.

<html>
<body>
<div id = "bouton-paypal"></div>
<script src = "https://www.paypal.com/sdk/js?client-id=monid"></script>
<script>
  paypal.Buttons({
    // Set up the transaction
    createOrder: function() {
      var SETEC_URL = 'http://localhost/paypalphp/paypalcreatepayment.php';

      return fetch(SETEC_URL, {
        method: 'post',
        headers: {
          'content-type': 'application/json'
        }
      }).then(function(res) {
        return res.json();
      }).then(function(data) {
        console.info(data)
        return data.token;
      });
    }
  }).render('#bouton-paypal');
</script>

Спасибо за ответ. Я нахожу решение этой проблемы

  <script>
    paypal.Buttons({

      style: {
   layout:  'vertical',
   color:   'blue',
   shape:   'rect',
   label:   'paypal'
 },
      // Set up the transaction
      createOrder: function() {
          var SETEC_URL = 'http://localhost/paypalphp/paypalcreatepayment.php';

          return fetch(SETEC_URL, {
            method: 'post',
            headers: {
              'content-type': 'application/json'
            }
          }).then(function(res) {
            return res.json();
          }).then(function(data) {
            let token;
            token = data.paypal_response.links[1].href.match(/EC-\w+/)[0];
            console.info(token);
            return token;
          });
        },

  // Finalize the transaction
  onApprove: function(data) {     // On indique le chemin vers notre script PHP qui se chargera d'exécuter le paiement (appelé après approbation de l'utilisateur côté client).
          var EXECUTE_URL = 'http://localhost/paypalphp/paypalexecutepayment2.php?payerID='+data.payerID+'&paymentID='+data.paymentID;
          /*var data = {
            paymentID: data.paymentID,
            payerID: data.payerID
          };*/
          console.info(data);
          return fetch(EXECUTE_URL, {
    method: 'post',
    headers: {
      'content-type': 'application/json'
    },
    body: JSON.stringify({
      token:   data.orderID,
      payerID: data.payerID,
      paymentID: data.paymentID
    })
  });
},
onCancel: function(data, actions) {
  alert("Paiement annulé : vous avez fermé la fenêtre de paiement.");
},
onError: function(err) {
  alert("Paiement annulé : une erreur est survenue. Merci de bien vouloir réessayer ultérieurement.");
}
    }).render('#bouton-paypal');
  </script>

Другие вопросы по теме