Paypal中的IPN与PDT有什么区别?

101

我在选择PayPal的即时付款通知(IPN)和付款数据传输(PDT)之间有些困惑。

基本上,用户在我的网站上购买一次性产品,在PayPal上支付,然后返回我的网站。我了解IPN的工作原理,但我现在发现使用PDT可能更容易触发成功购买后发生的各种操作,因为数据会立即返回(而不需要单独的侦听器)。

然而,PayPal的PDT文档中包含这样一句神秘的话:“PDT不能与信用卡或快速结帐交易一起使用。” ,但我找不到任何有关此主题的进一步信息。

  1. 信用卡真的不能和PDT一起使用吗?我想要超过一个句子的信息。

  2. 这是否意味着用户必须拥有/创建PayPal账户才能支付?

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

有没有经历过这个的人可以给予一些线索?


我找到了一个网页,它真的更好地解释了这个问题。PayPal PDT和IPN:它是如何工作的? - Ananize Scott
关于问题2,您可以在“我的销售偏好设置>网站偏好设置”下找到“PayPal账户可选”设置,您可以打开此设置,以便不强制您的客户创建/拥有PayPal账户,即可以通过信用卡/借记卡进行支付。 - user2233219
3个回答

115

PDT和IPN的API非常相似。主要区别在于接收通知的时间。因此,我建议同时实现两者。

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

同时实现两个功能,兼顾两种方式的优点。但是,如果只实现一个,IPN是可靠的。

一个注意点:如果同时实现两者,则有可能重复处理您的付款。请注意确保不会发生这种情况。我编写的应用程序几乎相同地处理了PDT和IPN(后端部分相同),并且该代码在数据库中获取了每个Web用户锁定,因此,如果同一用户尝试多次提交完全相同的付款,它只能被处理一次。一旦处理完成,该处理结果将用于任何随后的处理尝试。

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


PayPal的PDT系统向使用PayPal支付标准的商家网站发送订单确认并让它们验证此信息。这样的网站可以在“订单确认”页面上本地显示这些数据。
何时使用PDT?
IPN提供了上述相同的功能。那么,什么时候应该选择PDT而不是IPN呢?
使用PDT,当客户完成付款时,您的网站会立即收到通知。然而,使用IPN时,客户完成付款和您的网站接收到此事件的通知之间存在实质性的延迟。
因此,如果您的网站包含需要立即付款通知的功能,请使用PDT。
例如,考虑一个数字音乐店。使用PDT,该店可以让客户立即下载他们的购买,因为PDT会立即发送订单确认。使用IPN,这样的即时订单履行是不可能的。
IPN的优点
PDT有一个主要的弱点:它只发送一次订单确认。因此,当PDT发送确认时,您的网站必须运行;否则,它将永远无法接收消息。
相比之下,使用IPN,订单确认的交付几乎是保证的,因为IPN会重新发送确认,直到您的网站确认收到。因此,PayPal建议您实施IPN而不是PDT。
另一个IPN的优点是它可以发送多种类型的通知,而PDT只能发送订单确认。因此,使用IPN,您的站点可以接收到例如退款通知以及订单确认等内容。 注意:如果您的站点必须立即收到付款通知,则可以同时实现IPN和PDT。但是,这样做会导致您的站点每次销售都会收到两个订单确认。因此,您必须小心处理(例如,发货)给定确认消息的一个副本就可以了。

这里有文档


2
谢谢,我明白了。基本上,将数据库更新与IPN链接(因为它总是会被处理),并仅将用户确认链接到PDT(例如,在待处理页面上检查是否已通过IPN处理付款)...? - Tom
3
我的翻译如下:@Tom: 我的实现方式是:当PDT或IPN到达时,读取参数并尝试处理付款。处理器会A)阻止其他同时进行的处理(针对该用户),以及B)检查是否已经处理过。处理完成后,使用IPN即可完成,使用PDT则向用户显示确认页面或收据页面等。如果另一方面无法正常工作,则PDT和IPN两个方面都可以正常工作,但使用两者可以获得更高的可靠性。相当高比例的用户在IPN到达之前不会点击继续。 - Mr. Shiny and New 安宇
1
我找到了一份与此问题相关的官方文档 https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNPDTAnAlternativetoIPN/ - HungYuHei
3
IPN需要最多4天才能回复……这太糟糕了。 - Toskan
感谢您的回答。有时候IPN通知需要很长时间。 - Chinmay235
显示剩余2条评论

2
1. PDT是用于与网站支付自动返回功能一起使用的。自动返回在支付给卖家后重定向到PDT网站。不幸的是,它无法与PayPal账户可选功能一起使用-用于启用信用卡付款。以下是来自PayPal的注释:“如果您已打开Auto Return并选择为新用户打开PayPal账户可选功能,则新用户不会自动返回您的网站,但将有返回的选项。”用户将有一个选项回到您的站点(PDT步骤)或留在PayPal站点上。总之,在使用信用卡付款时,如果用户不点击“返回商店链接”,则用户可以跳过PDT步骤。
2. 允许哪些支付选项取决于您。如果您想允许没有PayPal账户的付款,可以启用Account Optional。如果您只想允许拥有PayPal账户的用户,则禁用该功能。可能还有更多选项。
第三点:在您的情况下,您需要在成功购买后触发操作。建议的方法是实现IPN。PDT并不适用于所有情况,并不能保证消息的传递。这里有一个涵盖该主题的文档链接PDT vs IPN

0

这是一个老问题,但我的简单答案是 - 为什么不同时使用PDT和IPN呢?它们对于卡交易都可以很好地工作。

PDT可以向您的网站提供即时交易状态,您可以快速检查付款成功或失败状态,并向用户提供适当的消息。

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

您可以按照这个逐步指南,我发现它非常清晰和有帮助 - 而且它在2018年仍然有效。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接