贝宝 IPN 和 AutoReturn

PayPal IPN and AutoReturn

我有一个 ipn 侦听器可以更新我的交易(从待处理到已完成)和我的合同付款从已完成到已付款。太棒了!我还有一个 return 页面...从 PayPal 到我的网站...此页面显示 "thanks" 和 "button to allow download their last paid online contract"(使用 PayPal 支付)。我的问题是.... Ipn 侦听器有时会在我的 return 页面显示给用户 3 秒后出现....

在这种情况下,在我的 return 页面中。交易和合同是否未支付...当 ipn 侦听器捕获结果时...然后此交易和合同变为已支付状态。但是 ipn 监听器是在后端执行的。在我的服务器中。我的 return 页面在 3 o 2 秒前显示给我的用户。我能做什么?

我是否应该在 return 页面中添加一个计时器(延迟),等待 ipn 更新我的交易和合同状态?然后,向用户显示一个按钮 "you can download your last paid contract!"。或者更好的是我应该忘记这一步。在我的 return 页面中,总是不等待地显示给用户 "thanks for your payment"。 "you can download your last paid contract!"

在您实际收到款项之前,您不应认为或显示交易已完成,或允许进行任何进一步的业务操作,只有 IPN 会告诉您这一点。

您需要相应地调整 return 页面上显示的内容。

在这里您真正应该做的就是感谢客户的业务,并告诉他下载或交付或任何其他内容将立即可用,PayPal 已通知您实际转移。

请注意,这可能需要三秒钟以上的时间。如果他们选择从他们的银行账户中支付资金,则可能需要 3-5 天:,而且由于资金不足,该过程总是有可能完全失败。

所以在设计您的 return 页面时不要过于乐观。直到钱存入银行,交易才算完成。

This page show "thanks"

很好。

and "button to allow download their last paid online contract"

不好。那应该在 'My Account'.

的某个地方

我也有我的 return 页面等待 IPN 通知进入我的服务器,如果你做对了,你绝对可以做到这一点。

最初,return 页面轮询我的后端数据库中 IPN 处理程序更新的字段。然后,当 return 页面看到该字段更新时,客户将获得他的 'here are the items you paid for' 按钮。

我在这个过程中也有一分钟的超时时间。当它过期时(虽然我不记得最后一次实际发生的时间),我会显示一条包罗万象的错误消息 ('There was a problem processing your transaction') 并邀请客户联系我寻求帮助。

我还告诉他们,他们的许可证密钥(在我的情况下是他们购买的)可能正在通过电子邮件发送,因为通常情况下是这样。由于某种原因,IPN 通知有时可能需要一些时间才能到达,但我的 IPN 处理程序会发送一封确认电子邮件作为备份,以便他们在适当的时候收到。这通常会解决问题,我很少需要直接参与。

如果 PayPal 暂停交易,它似乎永远不会将客户转到 return 页面(我当然从未见过这种情况)。相反,我假设它让客户知道他必须等待资金清算并留在那里。

IPN 通知 会在交易最终结清时发送,然后您可以让您的处理程序发送该电子邮件。

为了避免这听起来工作量很大,无论如何您都应该从 IPN 处理程序发送一封电子邮件,因为客户希望有他们的购买记录。一旦你建立了这个机制,剩下的就很简单了。

注意: 注意标记为 'echeque' 的 IPN 交易。 资金尚未结清,结清后您会收到另一条通知。 然后您可以通过电子邮件将合同发送给他们。如果没记错,确实 将他们转发到您的 return 页面,因此您必须通过让他们知道他们必须等待来处理这个问题。实际上,这似乎并不经常发生。

建议:让您的脚本在发生意外情况时向发送一封电子邮件。当 PayPal 无缘无故地更改传递给 IPN 处理程序的字段名称时,这不止一次救了我的命。

总结: 这是一篇实用的、基于经验的关于我的网站工作方式的文章,而且效果很好。我希望这个 post 的读者觉得它有帮助,尽管神秘的反对票。