У меня проблема, когда скрипт вызывает создание заказа на странице 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');



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что вы следуете руководству 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>