#javascript #paypal #paypal-sandbox #checkout #paypal-rest-sdk
Вопрос:
В настоящее время я тестирую изолированную среду для интеграции PayPal checkout с использованием Javascript.
Я вижу, как использовать режим «песочницы» по сравнению с использованием режима «Live» при тестировании наших кнопок на Javascript.
Я спрашиваю, как мне установить название продукта, чтобы покупатель мог точно видеть, что он собирается купить, прежде чем нажать кнопку «Оплатить сейчас», чтобы завершить транзакцию?
Вот код, с которым я сейчас работаю, как показано ниже:
//HTML GOES HERE TO CONTAIN THE PAYPAL BUTTON
<div id="paypal-button-container"></div>
<script src="https://www.paypal.com/sdk/js?amp;client-id=[MY-CLIENT-ID-GOES-HERE]amp;merchant-id=[MY-MERCHANT-EMAIL-ADDRESS-GOES-HERE]amp;currency=USD"></script>
paypal.Buttons({
style: {
layout: 'vertical',
color: 'gold',
shape: 'pill',
label: 'buynow'
},
// Sets up the transaction when a payment button is clicked
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: 50, // Can reference variables or functions. Example: `value: document.getElementById('...').value`
currency: 'USD'
},
}]
});
},
// Finalize the transaction after payer approval
onApprove: function(data, actions) {
return actions.order.capture().then(function(orderData) {
// Successful capture! For dev/demo purposes:
console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
var transaction = orderData.purchase_units[0].payments.captures[0];
alert('Transaction ' transaction.status ': ' transaction.id 'nnSee console for all available details');
// When ready to go live, remove the alert and show a success message within this page. For example:
// var element = document.getElementById('paypal-button-container');
// element.innerHTML = '';
// element.innerHTML = '<h3>Thank you for your payment!</h3>';
actions.redirect('https://SomeWebsiteURLiWillForwardThemTo.com');
});
}
}).render('#paypal-button-container');
Ответ №1:
В документах paypals вы можете увидеть объект единицы покупки. https://developer.paypal.com/docs/api/orders/v2/#definition-purchase_unit внутри этого объекта вы можете видеть, что вы можете передать массив элементов. Это массив объектов, которые вы можете просмотреть здесь https://developer.paypal.com/docs/api/orders/v2/#definition-item . Вы можете определить параметры каждого продукта, включая название. Итак, в вашем случае, я думаю, вы можете попробовать что-то вроде следующего:
purchase_units: [{
amount: {
value: 50,
currency: 'USD',
breakdown: {
item_total: {
currency_code: 'USD',
value: 50
},
}
},
items: [
{
name: 'Product Name',
unit_amount: {
currency_code: 'USD',
value: 50
},
quantity: '1'
}
]
}]
Вот рабочая скрипка, просто введите свой идентификатор клиента для тестирования. Демонстрация скрипки
ПРИМЕЧАНИЕ: посмотрите документы и посмотрите, какие обязательные поля. Я также думаю, что вам нужно применить разбивку к сумме, чтобы это сработало.
Комментарии:
1. Да, я пробовал это раньше, но когда я пытаюсь протестировать опцию «элементы:» в песочнице (еще не пробовал «жить»), новое окно PayPal пытается открыться и загрузиться, но затем оно быстро просто вылетает и сразу же закрывается. Вот что я только что попробовал пару минут назад, затем он продолжает сбой:
2. // Настраивает транзакцию при нажатии кнопки оплаты CreateOrder: функция(данные, действия) { возврат actions.order.create({ purchase_units: [{ сумма: { значение: paypal_price, // Может ссылаться на переменные или функции. Пример:
value: document.getElementById('...').value
валюта: ‘USD’ }, элементы: [ { имя: ‘Название продукта’ }, ] }] }); },3. Да, я пробовал это раньше, но когда я пытаюсь протестировать опцию «элементы:» в песочнице (еще не пробовал «жить»), новое окно PayPal пытается открыться и загрузиться, но затем оно быстро просто вылетает и сразу же закрывается. @Steve K Вот что я только что попробовал пару минут назад, затем он продолжает сбой:
4.
// Sets up the transaction when a payment button is clicked createOrder: function(data, actions) { return actions.order.create({ purchase_units: [{ amount: { value: paypal_price, // Can reference variables or functions. Example: value: document.getElementById('...').value currency: "USD" }, items: [ { name: "Product Name" }, ] }] }); },
5. Вам нужно добавить разбивку на сумму, я думаю, чтобы это сработало. Как я уже говорил в примечании, прежде чем вам нужно посмотреть и посмотреть, какие поля являются обязательными. К сожалению, документы Paypals представляют собой беспорядок, и это похоже на панировку, и действительно легко что-то пропустить. Я обновил ответ рабочим кодом и демонстрацией скрипки. Вы можете увидеть продукт и общую разбивку, если сейчас нажмете стрелку вниз по цене при оформлении заказа.