我是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!');
}
切换到适当的客户端-服务器集成。
这里是要使用的前端:https://developer.paypal.com/demo/checkout/#/pattern/server
您将在服务器上需要两条相应的路由,“设置交易”和“捕获交易”,在此处记录:https://developer.paypal.com/docs/checkout/reference/server-integration/
(((如果您想作些科学怪人,可以尝试保持createOrder
功能不变(客户端代码),并仅在onApprove
部分中集成单个服务器端路由。我不确实不建议这样做,但是您可以尝试一下,也许可以作为迭代开发步骤。最好也从服务器上“设置事务”。]
使用上述解决方案,您将在付款捕获后立即收到同步的API响应。不需要来自Webhooks的其他异步通知,因此这些基本上对您来说是多余的。
但是,一旦一切都为幸福的道路而努力,则还需要考虑另一件事。如果路径不愉快,例如客户卡被拒,该怎么办?然后,您应该handle funding failures in a way that propagates the error back to the UI,以便他们可以选择其他卡。一旦其他所有工作都结束,这是最后要担心的事情。