处理应用程序和paypal之间的交易的最佳做法是什么。
考虑:
现在根据PayPal API,我可以发送付款并获得成功。但是会发生什么 如果我发送Pay它成功但由于网络问题我没有收到响应。所以我认为错误发生了并再次尝试,从技术上讲,我会向Bob发送300美元而不是150美元?
如何在保留帐户的本地数据库和远程PayPal API之间处理此类交易?
答案 0 :(得分:6)
我最近对我为客户完成的ASP.NET MVC项目提出了这个问题。
我学到了两件事:
Paypal和您的数据库之间的通信是不可信任的(好吧,没有真正了解这一点,但它完全得到了加强)
我现在明白为什么有这么多以Paypal作为交易类型的网站,提到交易完成和产品发货/交付完成之间的处理时间。
< / LI>您处理这种情况的方式类似于企业处理个人支票的方式:
对于今天许多企业运营的方式来说,这听起来效率低下,但它确实出现了问题。事实上,这就是许多企业偏离接受个人支票的原因,与其他支付方式相比,它们不可靠。
现在,这与处理Paypal付款有何关联?
NOTVALID
的IPN回复,或者您永远无法从Paypal获得回复)。该公司决定:
这可能听起来不像是经营您业务的最佳方式,但这是我们处理不完美互联网的方式。
VALID
,请按预期处理交易。VALID
,请向客户提及处理可能有延迟,请让您的应用程序向您发送可能发生Paypal交易问题的通知(您可能希望包含参考id,以便您可以快速找到此通知引用的交易),并将交易标记为pending
,而不是complete
或类似的内容。complete
或failed
。令人讨厌的是,我们必须采取额外措施来确保转移资金,但是,如前所述,我们正在使用一个不完善的系统,我们希望非常确定金融交易的成功/失败。
此过程的额外好处是,当有人篡改Paypal支付系统时,可能会收到通知 - 让您在未来更好地应对恶意行为。
答案 1 :(得分:1)
请参阅此链接,希望PayPal授权&amp;捕获方法将适合您,因为您不希望丢失响应以及错误计算的金额转移,PayPal提供相关ID,可以参考PayPal以确认您的订单状态,最好将订单ID传递给PayPal API。
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_admin_authcapture
http://www.scribd.com/doc/6303345/40/CorrelationID-for-Reporting-Problems-to-PayPal
祝你好运!
答案 2 :(得分:0)
这称为两阶段提交。只要paypal不参与同一笔交易,您就会遇到问题。
答案 3 :(得分:0)
我会向Alice支付150美元并反映交易是 “待确认” ,然后定期轮询PayPal以同步您的数据库,因为您无法控制何时网络或PayPal可用,发布,撤消或调整交易。 PayPal处理完交易后,您可以将数据库中的状态从“待处理”更改为“已完成”。顺便说一句,这是如何处理银行账户和信用卡的。您可以将双重记帐方法应用于数据库。 (见Q&A)
答案 4 :(得分:-1)
从我看到你需要确保交易完成,否则什么都不应该做。
如果您将钱存入PayPal API并且您没有收到PAYPAL API的回复,那么您需要在DB中回滚该事务。