如何验证服务器上的PayPal Express Checkout详细信息?

时间:2017-10-12 22:06:13

标签: php paypal

我现在正在尝试使用描述here的客户端REST集成来加快PayPal Express Checkout(即checkout.js)的速度。我看到付款完成后,我的onAuthorize函数会被“付款”对象调用。

我找不到关于这个对象的任何文档,但有些人在讨论它时会发现以下属性(至少在今天):

  • paymentToken
  • payerID
  • paymentID
  • 意图
  • RETURNURL

现在我需要将用户重定向到我网站上的下一步,我会在其中显示确认已付款的收据等。我想我将上述数据发送到服务器,但由于该步骤可能很容易被欺骗恶意用户,我需要在服务器端的PHP代码中验证这些细节。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以通过GET/v1/payments/payment/PAY-XXXXXX在服务器端与paymentID拨打payerID来获取付款详细信息,并在那里验证这些详细信息。

https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/

有关从服务器调用REST api的一些基础知识,请参阅https://developer.paypal.com/docs/api/overview/#make-your-first-call

答案 1 :(得分:1)

假设您使用的是 PayPal Encrypted Buttons ,则实际上 不需要验证通过服务器端发送的金额。虽然用户确实可以操纵$_POST数据,但PayPal会让您受到保护,并且不会允许该交易通过。这是因为PayPal加密按钮是使用您的变量生成的,例如内置于ID的价格。如果变量与用于创建按钮的变量不对齐,则交易被拒绝。

或者,如果您只是使用自己的代码发出请求,则可以使用PayPal Instant Payment Notification 确保付款。同样,这允许任何 $_POST数据通过付款发送。之后,PayPal会调用您的IPN页面,以验证参数是否正确。这在以下工作流程中进行了演示:

IPN Flow

与您的IPN通信时,如果PayPal发现值不匹配,则订单将被取消。假设值匹配,您可以安全地将它们重定向到确认页面。

希望这有帮助! :)