我们正在为我们的Web应用程序使用Paypal结帐。我们的客户库位于我们要设置付款的地方。在后端,我们试图通过webhook捕获处理后的详细信息。我们在沙盒帐户上对此进行了测试。 Webhook将按预期发送除自定义字段以外的所有详细信息。我们需要自定义字段,以便将付款与特定服务相关联。
在我们的网络应用中,我们具有以下内容:
paypalConfig = {
env: 'sandbox',
style: {
size: 'responsive',
color: 'white',
shape: 'rect',
label: 'pay',
layout: 'horizontal',
tagline: 'false'
},
client: {
sandbox: 'SANDBOX_ID',
},
commit: false,
payment: (data, actions) => {
console.log("data is", data, actions);
return actions.order.create({
payment: {
transactions: [
{ amount: { total: this.finalAmount * 100, currency: 'USD' }, job_id: this.jobId }
]
}
});
},
onApprove: (data, actions) => {
return actions.order.capture().then((details) => {
// This function shows a transaction success message to your buyer.
// alert('Transaction completed by ' + details.payer.name.given_name);
this.openModel('modal1');
}).catch(err => {console.log("Error in authorize in paypal", err); this.openModel('modal2');})
}
}
您可以看到,付款处理程序正在为交易对象添加一个job_id属性。在后端,我们正在侦听以下事件:
结帐订单已完成,付款捕获已完成,付款销售已完成
我们只需要监听一个事件(例如收到的付款),它告诉我们交易何时完成。我不确定,所以我添加了所有似乎相关的事件,因为没有任何名为“已收到付款”的事件。
我们可以在这里尝试吗?我们在网络挂钩中没有获得自定义的job_id字段。
首先,您似乎正在使用旧的PayPal checkout.js,请切换到最新的sdk.js
您正在使用仅客户端集成的第二部分中,切换到适当的客户端-服务器模式。这是前端:https://developer.paypal.com/demo/checkout/#/pattern/server
您将在服务器上需要两条相应的路由,“设置交易”和“捕获交易”,在此处记录:https://developer.paypal.com/docs/checkout/reference/server-integration/
使用上述解决方案,您将在付款捕获后立即收到同步的API响应。不需要来自Webhooks的其他异步通知,因此这些消息实际上对您来说是多余的。
一旦上述所有方法都能为您工作并创建成功的交易,则还需要考虑另一件事:传播失败。就是说,如果买方的资金来源无法获得,例如,在道路不畅的情况下会发生什么。他们的卡被拒绝了吗?有how to send that error back to the UI的指南,因此他们可以添加或选择其他卡。无论如何,这只是最后一个需要担心的细节。