Paypal 中的 IPN 与 PDT

Posted

技术标签:

【中文标题】Paypal 中的 IPN 与 PDT【英文标题】:IPN vs PDT in Paypal 【发布时间】:2011-02-19 16:13:01 【问题描述】:

我在 PayPal 的即时付款通知 (IPN) 和付款数据传输 (PDT) 之间进行选择时遇到了一些问题。

基本上,用户在我的网站上购买一次性产品,通过 PayPal 付款,然后返回我的网站。我了解 IPN 的工作原理,但我现在看到我可能能够使用 PDT 更轻松地触发成功购买后发生的各种操作,因为数据会在那里返回(而不是需要单独的侦听器) .

但是,PayPal 的 PDT 文档中包含这样一段神秘的文字:“PDT 不适用于信用卡或 Express Checkout 交易。” ...但我找不到关于该主题的任何进一步内容。

    信用卡真的不能与 PDT 一起使用吗?我想要的不止一句话。

    这是否意味着用户必须拥有/创建一个 PayPal 帐户才能付款?

    这是否意味着如果我想允许用户使用他们的 PayPal 帐户和/或直接使用信用卡支付,我必须实施 IPN?

有没有经历过这件事的人能解释一下吗?

【问题讨论】:

我找到了一个可以更好地解释这一点的网页。 [PayPal PDT 和 IPN:它是如何工作的?][1] [1]:webmasters.stackexchange.com/questions/21634/… 关于问题 2,My selling preferences > Website preferences 下有一个 PayPal Account Optional 设置,您可以打开它以不强迫您的客户创建/拥有 PayPal 帐户,即。通过信用卡/借记卡付款。 【参考方案1】:

这是一个老问题,但我的简单回答是 - 为什么不同时使用 PDT 和 IPN?它们适用于卡交易。

PDT 可以将即时的交易状态提供给您的网站,您可以在网站上快速查看支付成功或失败的状态,并为用户提供相应的信息。

同时,您可以在后台等待来自 IPN 的完整验证。收到后,您可以使用它来进一步更新您的数据库并处理订单。

您可以按照我认为非常清晰和有用的分步指南进行操作 - 它在 2018 年仍然有效。

https://www.codexworld.com/paypal-standard-payment-gateway-integration-php/

【讨论】:

【参考方案2】:

关于 1. PDT 旨在与网站付款自动退货功能一起使用。向卖家付款后,自动退货会重定向到 PDT 网站。不幸的是,该功能无法与 PayPal Account Optional 一起使用 - 用于启用信用卡支付。以下是 PayPal 的说明:“如果您已打开 Auto Return 并选择为新用户打开 PayPal Account Optional,则不会自动将新用户引导回您的网站,但可以选择返回。 '。用户可以选择返回您的站点(PDT 步骤)或留在 PayPal 站点。总结一下,信用卡支付时,如果用户不点击“返回商店链接”,可以跳过PDT步骤。

关于 2。您要允许哪些支付选项取决于您。如果您想在没有 PayPal 帐户的情况下允许付款,您可以启用 Account Optional。如果您只想允许拥有 PayPal 帐户的用户禁用该功能。可能还有更多选择。

Re 3. 在您的情况下,您需要在成功购买后触发操作。推荐的方法是实施 IPN。 PDT 不适用于所有情况,也不保证消息传递。这是涵盖该主题的文档的链接PDT vs IPN。

【讨论】:

【参考方案3】:

PDT 和 IPN 的 API 相似。主要区别在于您收到通知的时间。出于这个原因,我建议同时实施。

使用 PDT,您可以立即收到通知,并且可以进行任何需要的额外处理并向用户显示确认页面。 使用 IPN,即使用户的计算机在向您发送 PDT 之前发生爆炸,您也可以保证收到付款已收到的通知。

实现两者并获得两全其美。但如果你只做一个,IPN 是可靠的。

一个问题:如果您同时实施这两种方法,那么您的付款有可能会被处理两次。注意确保不会发生这种情况。我编写的应用程序几乎相同地处理 PDT 和 IPN(后端部分相同),并且该代码在数据库中获取每个网络用户的锁定,因此如果同一用户尝试多次提交完全相同的付款只能处理一次。处理后,该过程的结果将重新用于任何后续尝试处理它。

编辑 还有一件事:IPN 比 PDT 携带更多信息。您可以从 IPN 收到许多不同的消息,例如退款通知等,因此您确实应该实施它。


PayPal 的 PDT 系统向使用 PayPal Payments Standard 的商家网站发送订单确认,并让他们验证此信息。然后,此类网站可以在本地的“订单确认”页面中显示此数据。

何时使用 PDT?

IPN 提供与上述相同的功能。那么,什么时候应该选择 PDT 而不是 IPN?

使用 PDT,当客户完成付款时,您的网站会立即收到通知。但是,使用 IPN,在客户完成付款与您的网站收到此事件通知的时间之间存在重大滞后。

因此,如果您的网站包含需要立即付款通知的功能,请使用 PDT。

例如,考虑一家数字音乐商店。有了 PDT,这家商店可以让客户立即下载他们的购买,因为 PDT 会立即发送订单确认。使用 IPN,无法立即完成订单。

IPN 的优势

PDT 有一个主要弱点:它只发送一次订单确认。因此,当 PDT 发送确认时,您的站点必须正在运行;否则,它永远不会收到消息。

相比之下,通过 IPN,订单确认的交付几乎得到保证,因为 IPN 会重新发送确认,直到您的站点确认收到为止。因此,PayPal 建议您实施 IPN 而不是 PDT。

IPN 的另一个优点是它发送多种类型的通知,而 PDT 只发送订单确认。因此,使用 IPN,您的网站可以接收,例如,拒付通知和订单确认。 注意:如果您的网站必须立即收到付款通知,您可以同时实施 IPN 和 PDT。但是,如果您这样做,您的网站将收到每次销售的两个订单确认。因此,您必须小心地仅针对给定确认消息的一份副本采取行动(例如,运送产品)。

Documentation Here

【讨论】:

谢谢,我明白了。所以基本上,将数据库更新链接到 IPN(因为它总是会得到处理)并将用户确认链接到 PDT(例如检查 IPN 是否已在待处理页面上处理了付款)....? @Tom:我的实现是:当 PDT 或 IPN 进来时,读取参数并尝试处理付款。处理器 A) 阻止其他同时处理(针对该用户)和 B) 检查它是否已被处理。处理完成后,使用 IPN 就完成了,使用 PDT 向用户显示确认页面或收据页面或其他任何内容。如果另一端出现故障,PDT 端和 IPN 端都可以正常工作,但同时拥有两者可以获得良好的可靠性。相当高百分比的用户在 IPN 到达之前没有点击。 @Tom:另外,由于 PDT 的后端实现与 IPN 非常相似,因此您不妨两者都做,它实际上是免费的。 我找到了一个与这个问题相关的官方文档developer.paypal.com/docs/classic/ipn/integration-guide/… IPN 最多需要 4 天的时间才能回答……太糟糕了

以上是关于Paypal 中的 IPN 与 PDT的主要内容,如果未能解决你的问题,请参考以下文章

Paypal Smart Buttons V2 和 IPN - 如何将智能按钮中的字段与 IPN 匹配

您如何将 Paypal IPN 确认连接到用户?

将 PayPal IPN 与 WooCommerce 一起使用

PayPal IPN 与预期不符

Paypal 在 Wicket 应用程序中的 IPN

缺少 PayPal 沙盒 IPN 历史记录