Paypal Instant Payment Notification 需要将付款人订单与付款匹配

Posted

技术标签:

【中文标题】Paypal Instant Payment Notification 需要将付款人订单与付款匹配【英文标题】:Paypal Instant Payment Notification need to match payer order with payment 【发布时间】:2020-08-26 01:33:54 【问题描述】:

尝试实现Paypal即时支付通知https://developer.paypal.com/docs/ipn/#use-ipn-in-your-checkout-flow

情况如下:

1) 访问者想要访问数据库(访问者输入一些东西来检查输入的数据是否存在于数据库中)

2)我收集访问者输入的数据,记录在mysql中,创建一些token,也记录在mysql中

3) 将令牌添加到数据中,我发送到贝宝。

4) 付款成功后,我允许访问者访问数据库并显示访问者输入数据的结果。所以需要知道访问者输入/订购了什么。

我向 Paypal 发送这样的数据:

$data['return'] = 'https://www.my-website.info/payment-successful.php?response='. $token_to_send_to_paypal;//here we can put URL when payment is Successful.
$data['cancel_return'] = 'https://www.my-website.info/payment-cancelled.php';//here we can put cancel URL when payment is not completed.
$data['notify_url'] = 'https://www.my-website.info/payment-notify.php';//PayPal call this file for ipn
$data['item_number'] = $token_to_send_to_paypal;

然后

$query_string = http_build_query($data);//http_build_query — Generate URL-encoded query string

然后重定向到paypal IPN

header( 'location:'. $paypal_url. '?'. $query_string );

从 Paypal 成功付款后,我会返回一些数据。我看到我回来了item_number=the same as token i created sent to paypal

以上是目前我可以将访客的订单与付款相匹配的唯一方法。但可能的(?)问题是访问者也知道令牌。

任何想法/更好的方法如何将访客的订单与付款相匹配?我的意思是如何将我的令牌发送到 Paypal 并在 Paypal 响应中取回令牌?

【问题讨论】:

【参考方案1】:

但可能的(?)问题是访问者也知道令牌。

为什么会出现这个问题?这不是问题。访问者无法创建可验证的 IPN。

真正的答案是,对于任何重要的事情,您应该切换到更好的结帐方式,并且根本不使用 IPN,因为那样您就不需要它了。这是一个更好的结帐方式:https://developer.paypal.com/demo/checkout/#/pattern/server

有了更好的结帐,这里是您将从服务器调用的捕获 API:https://developer.paypal.com/docs/checkout/reference/server-integration/capture-transaction/

这样就不需要 IPN。

【讨论】:

以上是关于Paypal Instant Payment Notification 需要将付款人订单与付款匹配的主要内容,如果未能解决你的问题,请参考以下文章

PayPal成功付款

Paypal IPN 货币和响应

PayPal\Api\Payment - getState()

PayPal Express Checkout Instant Update 不更新运费

Woocommerce + Payment (PayPal) - 安全更新订单状态 + 获取交易 ID

贝宝 IPN 测试