我是否会收到来自 Paypal 立即购买按钮的所有事件的回调?

Do I receive callback from Paypal buy now button for all events?

我目前正在 PHP 网站上测试“立即购买”按钮。这是我的代码(或多或少):

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="........"
<input type="image" src="https://www.paypalobjects.com/fr_CA/i/btn/btn_buynowCC_LG.gif"   border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et  la plus sécurisée !">
<img alt="" border="0" src="https://www.sandbox.paypalobjects.com/fr_CA/i/scr/pixel.gif" width="1" height="1">
<input name="notify_url" value="https://www.example.com/paypal_notifications.php" type="hidden">
</form>

沙盒事务正在运行(发送完成),但我不知道我是否只会收到一次性消息或更新。

如果付款被撤销——比如——一周后,我会收到一个事件吗? (有没有办法立即从沙盒帐户中撤销付款?)

我只使用 notify_url 而不是帐户中的 IPN 设置,因为该帐户用于多个网站(我找不到它...:P)。

Web Checkout 表单中的 notify_url 设置 覆盖 配置文件 IPN URI,因此如果表单未指定 notify_url,则配置文件值将被使用,但如果表单确实指定了地址,则不会使用配置文件值。我明白这令人困惑,因为 PayPal 配置文件页面(您在其中指定默认 IPN 地址)没有提到这一点,PayPal 自己的文档也没有。

(更令人沮丧的是,PayPal 的文档仍然有描述旧的 (2005-2015) 帐户管理页面的屏幕截图和文本,他们仍然没有更新它们)。

请注意,尽管名称为“Instant Payment Notifications”,但这些消息实际上并不是即时的——根据我的经验,延迟时间在 15 秒到(很少)之间到我的代码收到 IPN 消息前 2 分钟。出于这个原因,如果您确实需要即时通知,您还应该使用 PDT 来增强您的 IPN 处理程序。 PDT 是 PayPal 的网络结账流程将您的客户重定向回自定义 URL 的地方,在查询字符串中有一个不透明的交易 ID,当您处理来自回头客。

IPN 系统现在 decades-old,可以追溯到 20 世纪 90 年代后期 - 因此它的设计有点奇怪,事实上,您会收到同一笔交易的多个通知 - 但这取决于关于交易类型。这记录在 PayPal 的 IPN 文档中,但同样,它们不会为您提供所有详细信息,并且在许多情况下,您必须通过 trial-and-error.

来学习

例如,如果它是使用 PayPal 自己的结帐页面的 straight-forward 网络结帐,并且客户使用信用卡或 PayPal 帐户余额付款,那么您将收到一条通知,通知您交易成功就是这样。但是,如果客户通过美国 ACH(又名 eCheck)付款,那么您将收到多个通知,因为清算过程需要一段时间:您将首先收到付款已付款的初始通知,但尚未付款尚未清算,那么您将在 2-3 天后收到另一条通知,通知您付款是成功清算(并且您的 PayPal 帐户确实有资金)还是失败。

我个人不建议使用 PayPal 沙盒进行一些简单的练习,因为它无法模拟 real-life 中的所有可能场景,而且 set-up 很痛苦。您对测试的重视程度取决于此代码对您的业务的重要性。

简而言之,尤其是对于 PayPal,不要害怕 test-in-production,并确保您的代码能够优雅地处理异常消息,我强烈建议记录并保存每条传入的 IPN 消息,以便您可以更好的 "feel" 您可以处理的数据 - 同样,因为 PayPal 在许多方面都缺乏文档。