服务器如何知道付款是真正通过 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 付款? [关闭]

PayPal是否支持直接付款?

带有服务器集成的 PayPal 客户端 JavaScript SDK - 设置付款金额

Paypal 定期发票用于定期付款

如何整合paypal

来自 PayPal 的回调。如何立即知道用户支付成功?