按照https://www.paypal.com/buttons中的代码,我点击“智能按钮”链接,生成并复制代码,因此我将以下内容添加到我们的付款页面(使用我们的实际 clientID 而不是 XXXXXX. ...):
<div id="smart-button-container">
<div style="text-align: center;">
<div id="paypal-button-container"></div>
</div>
</div>
<script src="https://www.paypal.com/sdk/js?client-id=XXXXXXXXXXXXXXXXX¤cy=USD" data-sdk-integration-source="button-factory"></script>
<script>
function initPayPalButton() {
paypal.Buttons({
style: {
shape: 'rect',
color: 'gold',
layout: 'vertical',
label: 'paypal',
},
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{"description":"Subscription to our service","amount":{"currency_code":"USD","value":10}}]
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
},
onError: function(err) {
console.log(err);
}
}).render('#paypal-button-container');
}
initPayPalButton();
</script>
问题:我如何实际记录(在服务器端)付款已完成?我似乎遗漏了一些难题——根据上述代码,我看到的唯一选择是从代码中调用服务器端脚本onApprove
;但我不明白如何安全地做到这一点:用户可以简单地不进行任何付款并调用相同的脚本并传递相同的参数。
我在相关问题上看到 webhook 似乎是答案;但是,我在这里找到的都是服务器端,这对我来说没有任何意义(我希望作为 JavaScript 的一部分,我会在我的服务器上向 Paypal 提供我希望他们在付款完成时调用的 URL )。任何提示或指针将不胜感激。