如何在 PayPal 智能按钮交易中发送自定义数据字段
Posted
技术标签:
【中文标题】如何在 PayPal 智能按钮交易中发送自定义数据字段【英文标题】:How to Send Custom data fields in PayPal Smart Button transaction 【发布时间】:2020-09-08 17:45:46 【问题描述】:我是 PayPal 集成的新手,但我设法使用客户端 javascript SDK 创建按钮并完成交易。我还添加了一个 webhook,用于侦听 PAYMENT.CAPTURE.* 事件并将返回数据记录到我自己数据库中的事务表中。缺点是我无法跟踪交易是针对哪个服务或客户。所以我想知道如何在按钮中添加至少一个自定义字段,以便它在 webhook POST 中返回给我,以便我可以为该特定客户执行一些业务逻辑。
我最初的选择是 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!');
【问题讨论】:
【参考方案1】:切换到适当的客户端-服务器集成。
这里是要使用的前端:https://developer.paypal.com/demo/checkout/#/pattern/server
您的服务器上需要两条对应的路由,“设置事务”和“捕获事务”,记录在此:https://developer.paypal.com/docs/checkout/reference/server-integration/
(如果您想成为一点科学怪人,您可以尝试保持 createOrder
函数原样(客户端代码)并仅在 onApprove
部分中集成单个服务器端路由。我不'不是真的推荐这个,但你可以尝试一下,也许作为一个迭代开发步骤。最好也从你的服务器“设置事务”。)
使用上述解决方案,您可以在支付捕获时获得即时、同步的 API 响应。不需要来自 webhook 的额外异步通知,因此这些对您来说基本上是多余的。
【讨论】:
【参考方案2】:您可以切换到客户端-服务器集成(根据@Preston PHK 的回答),但对于某些应用程序(而不是 OP 所要求的),这可能是矫枉过正。
对于只需要传递一些特定信息的简单购买,您可以尝试利用 purchase_units.invoice_id
字段(假设您不需要该字段用于其他事情)。
需要注意的是,invoice_id 每次使用时都必须是唯一的。这意味着您不能只使用客户的内部 ID。你需要添加一些额外的东西来确保唯一性。
您的 createOrder 调用可能如下所示:
createOrder: function(data, actions)
return actions.order.create(
purchase_units: [
invoice_id: customerId + "-" + randString,
amount:
value: charge.amount,
currency_code:'USD'
]
);
,
由字母数字(大写和小写)组成的 6 个字符的随机字符串提供了超过 560 亿种可能性,对于大多数用途而言,这应该提供足够的唯一性。如果你想更安全,那就让它更长。我不确定invoice_id
的确切限制,但我认为它至少是 40 个字符。
当您在服务器上处理事务(来自 webhook)时,您只需丢弃多余的字符。
$custId = substr($invoice_id, 0, -7);
【讨论】:
以上是关于如何在 PayPal 智能按钮交易中发送自定义数据字段的主要内容,如果未能解决你的问题,请参考以下文章
通过 PayPal Buy Now 按钮的自定义字段发送一个 json 编码的 var