执行付款后调用的 PayPal REST API 取消 URL
Posted
技术标签:
【中文标题】执行付款后调用的 PayPal REST API 取消 URL【英文标题】:PayPal REST API cancel URL called after payment executed 【发布时间】:2016-09-02 02:20:42 【问题描述】:我有一个奇怪的问题,我正在努力解决。
我正在使用 php 和 REST API。
这是场景:
1) 用户按下结帐按钮
2) 付款已获批准
3) 付款已执行
4) 用户被重定向到完成的购买页面
5) 几秒钟后,交易的取消 URL 被调用(例如当用户点击取消并返回商户按钮,而不是批准付款时)。
在大约 100 笔交易中,我有 3 笔以这种方式显示在所有 3 笔交易中,实际付款以及可用的资金。我检查了服务器访问日志文件,其中两个使用的是 ios 9.3.1,一个是 ios 9.2.1。这怎么可能?
我的猜测是他们以某种方式点击了返回按钮,然后又点击了取消按钮,是这样吗?
我的取消 URL 包含一个将订单状态设置为已取消的脚本,我是否应该将脚本调整为仅在之前未执行订单时才将状态设置为已取消。
在我执行付款后,还有人可以取消付款吗?
【问题讨论】:
【参考方案1】:我认为您应该“信任”PayPal 发送的 IPN 消息,而不是 ok/cancel 返回 url。
https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNIntro/
ok/cancel url 应该只用于向用户显示信息
让 PayPal 知道您的 IPN 端点(将接收 IPN GET/POST 消息的脚本)。一旦你的脚本被调用,相应地更新数据库
这样做用户将无法搞砸交易,您保证会收到 1 条 IPN 消息,要么是“交易正常”,要么是“交易错误”消息
【讨论】:
唯一的问题是IPN将包含销售(txn_id),如果用户在第一步点击取消,则根本不会生成,因此IPN永远不会被调用。我确实有 IPN 监听器,但我使用服务器为所有呼叫提供通信服务,唯一的例外是点击取消按钮时,因为 PayPal 使用的是重定向,而不是服务器到服务器的调用。【参考方案2】:您的问题似乎与here 发布的问题相似。
来自 user2090027 被标记为答案的响应
“我们可以通过检查/维护在贝宝上付款后收到的回复数来克服这个问题。
我们可以在客户端使用 cookie 或使用会话或其他类似的东西在服务器上维护这一点。”
希望这会有所帮助。
【讨论】:
嗨。是的,我想出了一个类似的解决方案(不确定它是最终的还是临时的),但我正在跟踪数据库并且只接受收到的第一个信息。【参考方案3】:这是一个老问题,但我自己构建了一个 PayPal 集成,我想我会添加一些关于为什么会发生的信息。
如果用户在完成付款后进入您的“返回”页面并点击返回按钮,他们将获得如下所示的 PayPal 页面:
如果他们点击“返回商家”,他们将被发送到您的 /cancel 网址。因此,如果您获得其中之一并且付款已经完成,您可以向他们展示付款确认页面。
【讨论】:
以上是关于执行付款后调用的 PayPal REST API 取消 URL的主要内容,如果未能解决你的问题,请参考以下文章
在 PayPal 的 REST API 中执行付款后,有时我没有收到电子邮件
PayPal Rest API - 使用更新的交易信息执行付款
通过 Classic 或 Rest API 的 Paypal 付款