Cli*_*der 6 javascript paypal paypal-rest-sdk
我是 PayPal 集成的新手,但我已成功使用客户端 JavaScript SDK 创建按钮并完成交易。我还添加了一个 webhook,用于侦听 PAYMENT.CAPTURE.* 事件并将返回数据记录到我自己的数据库中的交易表中。缺点是我无法跟踪交易针对的是哪个服务或客户。因此,我想知道如何在按钮中添加至少一个自定义字段,以便它在 webhook POST 中返回给我,以便我可以为该特定客户执行一些业务逻辑。
我最初的选择是发布数据返回onApprove:(data, actions)=>{}
,但如果在此之前发生灾难性事件(例如断电或一般客户端-服务器连接故障),我将没有恢复选项。
现在我的 JS 基本代码如下:
try{
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: charge.amount,
currency_code:'USD'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
console.log(details);
if(details.status == "COMPLETED"){
localStorage.clear();
window.location.href = "thank-you";
}
//alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
}
}).render('#paypal-button-container');
}catch(e){
console.error('PayPal not loaded!');
}
Run Code Online (Sandbox Code Playgroud)
切换到适当的客户端-服务器集成。
按照PayPal Checkout 集成指南,在您的服务器上创建 2 条路线,一条用于“创建订单”,一条用于“捕获订单”(请参阅“添加和修改代码”中的可选步骤 5)。这两个路由都应仅返回 JSON 数据(无 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在数据库中(特别purchase_units[0].payments.captures[0].id
是 PayPal 交易 ID)并执行任何必要的业务逻辑,例如保存来自表单输入的附加数据。
(该数据可以作为捕获调用的一部分进行传输,方法是向其选项参数fetch
添加一个body
键,该参数可以为您序列化一个 JSON 对象。然后,您的第二个服务器路由可以将该输入解析为 JSON 并在继续之前验证它是否正常。捕获。)
-- 将这 2 条路由与前端审批流程配对: https: //developer.paypal.com/demo/checkout/#/pattern/server
通过上述方法,您可以在付款捕获时获得即时、同步的 API 响应。不需要来自 webhooks 的额外异步通知,因此这些对您来说基本上是多余的。