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

标签 php paypal paypal-ipn paypal-sandbox

我目前正在 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 秒到(很少)最多 2 分钟的延迟时间代码接收 IPN 消息。出于这个原因,如果您确实需要即时通知,您还应该使用 PDT 来增强您的 IPN 处理程序。 PDT 是 PayPal 的网络结账流程将您的客户重定向回查询字符串中带有不透明交易 ID 的自定义 URL,您可以在处理来自返回客户的传入请求时使用您自己的代码检索实际交易详细信息。

IPN 系统已有数十年历史,可追溯到 20 世纪 90 年代后期 - 因此它的设计有点奇怪,事实上,您会收到同一笔交易的多个通知 - 但这取决于交易的类型交易。这记录在 PayPal 的 IPN 文档中,但同样,它们不会为您提供所有详细信息,并且在许多情况下,您必须通过反复试验来学习。

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

我个人不建议将 PayPal 沙盒用于简单的练习,因为它无法模拟现实生活中的所有可能场景,而且设置起来很麻烦。您对测试的重视程度取决于此代码对您的业务的重要性。

简而言之,尤其是对于 PayPal,不要害怕在生产环境中进行测试,并确保您的代码能够妥善处理异常消息,我强烈建议记录并保存每条传入的 IPN 消息,以便您获得更好的体验“感受”您可以处理的数据 - 同样,因为 PayPal 在许多方面都缺乏文档。

关于php - 我是否会收到来自 Paypal 立即购买按钮的所有事件的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033064/

相关文章:

php - 在 HTTP 和 HTTPS 之间传递 session 变量

javascript - 不断刷新/接收输出 <div>

paypal - SetExpressCheckout 和 DoExpressCheckout 支付一步到位 : best practices?

php - TCPDF:如何将图像放入 HTML block 中?

paypal - Braintree API 更新订阅

Paypal使用存储卡-安全码(cvv2)

PayPal Rest API - Webhooks/IPN - 是否可以接收 eBay 付款通知?

Paypal PDT 和 IPN 问题 - 我们可以假设返回网站时付款已完成吗?

Paypal IPN 消息

php - 从 MySQL 数据库中删除一条记录