服务器如何知道付款是真正通过 PayPal 客户端 REST API 完成的?
How can a server know a payment was truly made via PayPal client side REST API?
我在看 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 请求的结果?
你的想法是正确的,服务器无法知道是否真的付款了。此客户端 API 用于捐赠之类的事情,不需要向任何服务器发出请求。然后可以使用客户端回调向用户显示 "thank you" 注释或类似内容。
对于大多数情况(如在线商店等),您会希望使用 server API。这样,PayPal 服务器 将向您的服务器发送一个请求,这样您就可以验证它是否真的是一个真正的付款确认。
在 actions.payment.execute()
之后,您可以调用您的服务器并让它进行 GET
调用以验证付款已完成:https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/
1) 在您的数据库中生成一个包含付款详细信息的唯一参考服务器端。例如:
我的贝宝参考资料table
| Amount: .00 | Reference: ECHI5786786 |
2) 在执行支付之前在您的交易对象中传递支付参考。
"transactions": [
{
"amount": {
"total": "1.99",
"currency": "USD"
},
"soft_descriptor": "ECHI5786786" //this is your unique reference
]
3) 在您的 PayPal 应用配置中,在开发者网站上,为 "payment sale completed" 设置一个到您的服务器的 webhook。 PayPal 将致电您的 url 并提供交易详情,包括唯一参考。将详细信息记录在您的数据库中。例如
我的 paypal 已确认完成付款 table
| Amount paid: .00 | Reference: 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
});
服务器端确认
确认引用在两个 table 中并且金额匹配
我在看 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 请求的结果?
你的想法是正确的,服务器无法知道是否真的付款了。此客户端 API 用于捐赠之类的事情,不需要向任何服务器发出请求。然后可以使用客户端回调向用户显示 "thank you" 注释或类似内容。
对于大多数情况(如在线商店等),您会希望使用 server API。这样,PayPal 服务器 将向您的服务器发送一个请求,这样您就可以验证它是否真的是一个真正的付款确认。
在 actions.payment.execute()
之后,您可以调用您的服务器并让它进行 GET
调用以验证付款已完成:https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/
1) 在您的数据库中生成一个包含付款详细信息的唯一参考服务器端。例如:
我的贝宝参考资料table
| Amount: .00 | Reference: ECHI5786786 |
2) 在执行支付之前在您的交易对象中传递支付参考。
"transactions": [
{
"amount": {
"total": "1.99",
"currency": "USD"
},
"soft_descriptor": "ECHI5786786" //this is your unique reference
]
3) 在您的 PayPal 应用配置中,在开发者网站上,为 "payment sale completed" 设置一个到您的服务器的 webhook。 PayPal 将致电您的 url 并提供交易详情,包括唯一参考。将详细信息记录在您的数据库中。例如
我的 paypal 已确认完成付款 table
| Amount paid: .00 | Reference: 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
});
服务器端确认
确认引用在两个 table 中并且金额匹配