问题描述
|
我正在通过以下主要步骤从网站设置一个简单的“立即购买”交易:
从价格表中选择产品
评论选择(金额,税金等)
在Paypal上处理付款
收据/谢谢
目前,我正在第2步中存储数据库记录-这可能意味着将有很多记录,因为人们决定不继续购买,因此没有收到付款。这些记录没有实际用途,因为我将使用Google Analytics(分析)来跟踪结帐流程的成功程度。
我正在使用Paypal IPN来验证付款的真实性并将它们记录在步骤2插入的记录中;但是,我可以仅依靠IPN事务中的数据来首先填充数据库,从而删除是否需要在步骤2中存储它们,并且必须进行数据库清理以删除从未完成的事务?
我个人看不出为什么我不会-IPN包含我需要的有关付款的所有数据,并且可能还有更多信息,并且如果由于服务器第一次不通过,Paypal将重新发送IPN几天小故障,但是我还有其他重要的事情吗?
显然,第一要考虑的是没有交易丢失或未记录,因此不会引起客户不满!
解决方法
像您一样进行双向验证很重要。
在用户离开系统前往贝宝之前,您要保存订单信息(总计,数量)。当ipn回来时,您验证请求(该请求必须来自paypal ip或其他),然后验证该交易是否成功,然后您的步骤2进入现场。您可以验证从Paypal ipn返回的总数是否与用户离开前保存的总数相同(Paypal有时可能会返回部分付款,用户可以获取帖子数据并从带有较低的“ 0”的经过修改的html中撰写自己的帖子组)。步骤2还应该存储买方的user_id,因此您也必须进行比较。
这是一个示例层(没有编程语言,只是一个伪代码):
if request comes from paypal:
# query the order
if order.total == request.total && order.user_id == request.custom:
payment may come in...
, 作为过去三年来已处理超过60万笔PayPal付款的系统的设计者和管理员-完全依赖IPN将允许一些错误从裂缝中溜走。
真实数据:
交易总数没有IPN无效IPN重复IPN
年1 170,000 + 2 101 0
2年级205,000 + 54 15 3
3年230,000 + 20 24 13
幸运的是,我们的系统采用PDT(付款数据传输)作为“备份”结构,因此我们不会丢失任何交易数据或拥有不满意的客户。注意:PDT也不能完全依赖-实际上,今年年初,PDT退货的可靠性存在一个主要问题。
最常见的“无效” IPN返回是HTML错误页面或截断的结果……如果需要,我可以提供示例。
最好的选择是IPN和PDT结合使用(将“购物车”数据原样存储在数据库中)。 IPN流程或PDT流程都可以创建事务(并删除数据库中的'cart \'数据记录)。然后,到达的第二个过程将没有用于记录交易的“购物车”条目。
注意:-正如您在使用自定义字段的最终解决方案中所指出的那样-注意自定义字段有长度限制,返回给您时可以将其截短。
, 我并不是仅依靠IPN来执行此操作,但是PayPal将记录失败以与您的服务器联系,如果该服务器发生故障并且应该稍后重试,尽管我只在开发中遇到过故障并且从未验证过重试。我只是相信他们。
, 是的,对于典型的电子商务网站,您可以-相当可靠。如果核反应堆融化并导致人们死亡,那你就不能-我见过它的问题,但很少见。
, 我已经开发了许多电子商务站点,并且在实践中,您始终希望记录发生“意外”时可以采取的措施。您自己的数据可能会提供更多信息。
如您所说,是的,您可以这样做,但是我建议这不是一个好主意。