PayPal IPN 未按预期工作

PayPal IPN works not as expected

我正在使用自己编写的下载软件通过 paypal 进行付费下载。这在过去几年中没有任何问题,但最近几天 PayPal 的 IPN 出现了一些问题。每个下载都有自己的表格,for 看起来像这样

<form action="https://www.paypal.com/cgi-bin/webscr" target="_top" method="post" target="_top" style="text-align: right">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="seller@example.com">
<input type="hidden" name="item_name" value="SOME PRODUCT Single License">
<input type="hidden" name="item_number" value="20001"> <input type="hidden" name="amount" value="69">
<input type="hidden" name="currency_code" value="EUR"><input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="notify_url" value="https://www.example.com/path1/path2/path3/?no_cache=1&tx_ppdownload_pi1%5Baction%5D=notify&tx_ppdownload_pi1%5Bcontroller%5D=Transaction">
<input type="hidden" name="image_url" value="http://www.example.com/files/logo.png">
<input type="hidden" name="return" value="https://www.example.com/path1/path2/path3/?no_cache=1&tx_ppdownload_pi1%5Baction%5D=return&tx_ppdownload_pi1%5Bcontroller%5D=Transaction">
<input type="hidden" name="cancel_return" value="https://www.example.com/path1/path2/path3/?no_cache=1&tx_ppdownload_pi1%5Baction%5D=cancel&tx_ppdownload_pi1%5Bcontroller%5D=Transaction">
<button class="btn btn-lg btn-success btn-block" style="border-radius: 0;">Purchase now <br /><small>secure via PayPal</small></button>

页面上有多个表格,其中包含不同的产品。几天以来,我遇到了这个问题:

沙盒和直播:购买后有新的布局和新的link到return到商店。几天前,那个 link 给我的 return url 打电话,带着一些 get/post 数据。该数据中包含 txn_id。在通知 url 总是向 PayPal 发送交易,并且通过 return url 和 txnid 我能够检查交易并显示一些信息。

取消url也被忽略。我可以点击按钮,然后我来到了贝宝。几天前我可以点击那里取消,然后回到 cancel_return 显示一些信息。 cancel_return 现在在大多数情况下是:

https://www.example.com/path1/path2/path3/?no_cache=1

没有其他参数。 10个中的7个,附加参数没有在paypal页面取消link

并且在 10 个案例中的 7 个中,notify_url 从未被调用,也许也遗漏了参数。

在 10 个案例中有 10 个 return_url 不包含 txn_id,在 10 个案例中有 7 个 return url 缺少我表单中的参数。

第一次付款失败(收到钱,没有正确 return_url 并且几天前 notify_url 上没有电话)。上个月,我从不同页面收到了大约 60 笔不同产品的交易,全部没有错误。

我现在不知道怎么了。

自 2017 年 3 月 8 日起,PayPal 的 IPN 处理开始出现问题。当交易通过包含“&”(例如分隔多个值时)的 url(return、cancel_return 和 notify_url)时,PayPal 会剥离 url 第一个'&'之后的所有内容。

这个 post 是最先报告问题的人之一,并建议使用 urlencode:QueryString values removed from the IPN endpoint by PayPal

我对自己的 PayPal 表单进行了一些修改,仅将“&”替换为 '&amp;'(编码版本),这似乎也有效。

此问题已报告给 PayPal(现在可能已经有很多人报告了);希望他们能修好它。另请注意,该问题似乎是间歇性的,正如上面链接 post 提到的,它可能取决于您连接到的 PayPal 服务器。