服务器如何知道付款是真正通过 PayPal 客户端 REST API 进行的?
Posted
技术标签:
【中文标题】服务器如何知道付款是真正通过 PayPal 客户端 REST API 进行的?【英文标题】:How can a server know a payment was truly made via PayPal client side REST API? 【发布时间】:2018-02-12 00:29:26 【问题描述】:我正在查看 PayPal 交互式集成演示 link。
在用户完成支付流程后的某个时刻,客户端到达代码:
// onAuthorize() is called when the buyer approves the payment
onAuthorize: function(data, actions)
// Make a call to the REST api to execute the payment
return actions.payment.execute().then(function()
window.alert('Payment Complete!');
);
在实际场景中,我可能希望向服务器发送发送产品或更新用户计划的指令,而不是警报。它可能会通过 HTTP POST 请求来完成。
服务器如何知道确实付款并且不是黑客手动发送 http post 请求的结果?
【问题讨论】:
【参考方案1】:在actions.payment.execute()
之后,您可以调用您的服务器并让它进行GET
调用以验证付款是否已完成:https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/
【讨论】:
【参考方案2】:您的想法是正确的,服务器无法知道是否真的付款。此客户端 API 用于捐赠之类的事情,不需要向任何服务器请求。然后可以使用客户端回调向用户显示“谢谢”注释或类似内容。
对于大多数情况(如在线商店等),您需要使用server API。这样,PayPal 服务器 将向您的服务器发送请求,因此您可以验证它确实是真正的付款确认。
【讨论】:
【参考方案3】:1) 在您的数据库中生成一个包含付款详细信息的唯一参考服务器端。例如:
我的贝宝参考表
|金额:$1.00 |参考:ECHI5786786 |
2) 在执行付款之前,在您的交易对象中传递付款参考。
"transactions": [
"amount":
"total": "1.99",
"currency": "USD"
,
"soft_descriptor": "ECHI5786786" //this is your unique reference
]
3) 在您的 PayPal 应用配置中,在开发者网站上,为您的服务器设置一个 webhook 以“付款销售已完成”。 PayPal 将使用包括唯一参考在内的交易详细信息调用您的网址。在您的数据库中记录详细信息。例如
我的贝宝确认完成付款表
|支付金额:$1.00 |参考:ECHI5786786 |
4) 当 PayPal 客户端确认付款完成后,向您的服务器发送请求以确认付款详情
// Make a call to the REST api to execute the payment
return actions.payment.execute().then(function()
//ajax to your server here with "soft_descriptor"
//if ajax success, then all good
);
服务器端确认
确认参考在两个表中并且金额匹配
【讨论】:
以上是关于服务器如何知道付款是真正通过 PayPal 客户端 REST API 进行的?的主要内容,如果未能解决你的问题,请参考以下文章
Etsy 如何知道某人何时使用 PayPal 付款? [关闭]