可以依靠Paypal IPN单独记录购买吗?

时间:2011-06-06 19:44:23

标签: php paypal paypal-ipn

我正在通过以下主要步骤在网站上设置一个简单的“立即购买”交易:

  1. 从价目表中选择产品
  2. 审核选择(金额,税金等)
  3. Paypal处理付款
  4. 收据/谢谢
  5. 目前,我正在步骤2中存储数据库记录 - 这可能意味着会有许多记录没有收到任何付款,因为人们决定不继续购买。这些记录没有实际用途,因为我将使用Google Analytics跟踪结帐流程的成功程度。

    我正在使用Paypal IPN来验证付款的真实性并将其记录在步骤2中插入的记录中 - 但是,我是否可以单独依靠IPN事务中的数据来填充数据库,从而无需在步骤2中存储它们并且必须进行数据库清理以删除从未完成的事务?

    我个人认为没有理由不这样做 - IPN包含我需要的有关付款的所有数据,可能还有更多,如果他们没有第一次通过,Paypal将重新发送IPN数天服务器glitchery,但我错过了其他重要的事情吗?

    显然,最重要的考虑因素是没有交易丢失或没有记录,以免发生客户不满!

5 个答案:

答案 0 :(得分:3)

像你一样进行双向验证非常重要。

您可以在用户离开系统之前保存订单信息(总数,数量)。当ipn回来你验证请求(它必须来自paypal ip或其他),你验证它是一个成功的交易然后你的第2步进入场景。您验证从paypal ipn返回的总数是否与用户离开之前保存的总数相同(Paypal有时可能会返回部分付款,用户可能会抓取帖子数据并使用较低的修改后的html执行自己的帖子{ {1套)。第2步还应该存储买方的user_id,因此您也必须对其进行比较。

这是一个示例层(没有编程语言只是一个虚拟代码):

total

答案 1 :(得分:3)

作为过去三年处理过600,000 PayPal付款的系统的设计者和管理员 - 完全依赖IPN将允许一些错误漏掉。

真实数据:

        Total transactions   No IPN    Invalid IPN  Duplicate IPN
year 1      170,000 +          2           101           0
year 2      205,000 +         54            15           3
year 3      230,000 +         20            24          13

幸运的是,我们的系统采用PDT(支付数据传输)作为“备份”,因此我们不会丢失任何交易数据或不满意客户。注意:PDT不能完全依赖 - 事实上,在今年年初,PDT回报的可靠性存在一个主要问题。

最常见的“无效”IPN返回是HTML错误页面或截断结果......如果需要,我可以提供样本。

最佳选择是IPN和PDT的组合(您的'购物车'数据存储在您的数据库中)。 IPN进程或PDT进程可以创建事务(并删除数据库中的'cart'数据记录)。然后,到达的第二个进程将没有用于记录交易的“购物车”条目。

注意: - 正如您在最终解决方案中指出的那样使用自定义字段 - 请注意自定义字段存在长度限制,并且在返回给您时可能会被截断。

答案 2 :(得分:1)

我没有完全依靠IPN来做这件事,但PayPal会记录失败,如果它失败并且应该稍后重试,请联系你的服务器,尽管我在开发过程中只遇到过失败而且从未验证过重试。我只相信他们。

答案 3 :(得分:1)

对于典型的电子商务网站,是的,你可以 - 它相当可靠。如果核反应堆熔化,人们会死亡,那么你不能 - 我已经看到它的问题,但很少见。

答案 4 :(得分:1)

我开发了许多电子商务网站,在实践中,您总是希望记录任何“事故”的情况。您拥有的数据可能更具信息性。

就像你说的那样,是的,你可以做到这一点,但我认为这不是一个好主意。