服务器如何知道付款确实是通过PayPal客户端REST API进行的?

How can a server know a payment was truly made via PayPal client side REST API?

提问人:amit 提问时间:9/4/2017 更新时间:6/4/2018 访问量:1669

问:

我正在寻找PayPal交互式集成演示链接

在用户完成支付流程后的某个时间点,客户端会到达代码:

 // 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 发布请求的结果?

PayPal -服务器 支付网关 支付 客户端

评论


答:

1赞 user3151902 9/4/2017 #1

你的想法是正确的,服务器无法知道是否真的进行了付款。此客户端 API 用于捐赠等,无需向任何服务器发出请求。然后,可以使用客户端回调来显示“谢谢”便条或与用户类似的便条。

对于大多数情况(如在线商店等),您将需要使用服务器 API。这样,PayPal服务器将向您的服务器发送请求,因此您可以验证它确实是真实的付款确认。

3赞 bluepnume 9/4/2017 #2

在您可以调用服务器并让它拨打电话以验证付款是否已完成之后: https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/actions.payment.execute()GET

1赞 Kareem 6/4/2018 #3

1) 在您的数据库中生成一个唯一的参考服务器端,其中包含付款详细信息。例如:

我的 PayPal 参考表

|金额: $1.00 |参考资料: ECHI5786786 |

2) 在执行付款之前,在交易对象中传递付款引用。

"transactions": [
 {
  "amount": {
    "total": "1.99",
    "currency": "USD"
  },
  "soft_descriptor": "ECHI5786786" //this is your unique reference
]

3)在您的PayPal应用程序配置中,在开发人员网站上,为您的服务器设置一个Webhook,以“付款销售完成”。PayPal 将调用您的网址,并提供交易详细信息,包括唯一参考。将详细信息记录在数据库中。例如

我的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
});

服务器端确认

确认引用在两个表中,并且金额匹配