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\Api\Payment - getState()
PayPal Express Checkout Instant Update 不更新运费