Database 处理Paypal和本地Datasase之间的事务
处理应用程序和paypal之间的交易的最佳实践是什么 考虑:Database 处理Paypal和本地Datasase之间的事务,database,transactions,paypal,distributed-transactions,Database,Transactions,Paypal,Distributed Transactions,处理应用程序和paypal之间的交易的最佳实践是什么 考虑: 我是爱丽丝,我想把钱寄给鲍勃 在我的数据库中,我看到鲍勃有200美元,我想寄给他150美元 一旦交易被发送,我想更新鲍勃的帐户,使其包含50美元 现在根据贝宝API,我可以发送支付和接收成功。但是会发生什么 例如,如果我发送支付成功,但由于网络问题,我无法收到响应。所以我假设发生了错误,然后再试一次,从技术上讲,我会给Bob寄300美元而不是150美元 我如何处理这样的交易?在保留帐户的本地数据库和远程PayPal API之间?据
- 我是爱丽丝,我想把钱寄给鲍勃
- 在我的数据库中,我看到鲍勃有200美元,我想寄给他150美元
- 一旦交易被发送,我想更新鲍勃的帐户,使其包含50美元
我如何处理这样的交易?在保留帐户的本地数据库和远程PayPal API之间?据我所知,您需要确保交易完成,否则什么都不应该做。
如果您将钱存入PayPal API,但未收到PayPal API的响应,则需要在数据库中回滚事务。
这称为两阶段提交。只要paypal不参与同一笔交易,您就会遇到问题。最近,我为一个客户完成了一个ASP.NET MVC项目,这正是我关心的问题。 我学到了两件事:
- Paypal和您的数据库之间的通信是不可信的(好吧,我并没有真正了解这一点,但它得到了完全加强)
- 我现在明白了为什么这么多以Paypal作为交易类型的网站提到,从交易完成到产品发货/交付完成之间可能有一段处理时间
您处理这种情况的方式与企业处理个人支票的方式类似:
- 个人支票看起来像是货币(通常是货币),但许多企业希望在接受付款之前从银行得到资金可用的某种验证——因此他们使用一台机器询问银行资金是否确实可用李>
- 如果机器说资金可用,企业信任它,你完成交易但是,机器可能会发出错误消息,通常表示“资金不可用或出现问题”,企业需要做出以下决定:
- 我们可以信任客户,接受支票,交付产品,并希望在以后将支票存入银行时做到最好
- 或者我们可以告诉客户,支票结算、存入支票、等待资金实际到达我们的账户以及(如果成功)在业务收到资金后交付产品都需要时间
- Paypal支付看起来像是货币(通常是货币),但许多企业希望在接受支付之前从Paypal那里得到某种验证,即资金可用——因此他们使用Paypal PDT、IPN或其他方法来检查交易是否得到了适当处理
- 如果Paypal正确响应其中一个验证请求,则企业可以信任它并完成交易但是,您的网站可能会抛出某种错误(即Paypal可能会以
无效的IPN响应进行回复,或者您永远无法从Paypal获得回复)。企业有权做出以下决定:
- 企业可以信任客户并接受他们已经支付了Paypal,一切都应该正常(在Paypal交易的情况下,这是一个非常糟糕的决定)
- 或者,企业可以在结账时告诉客户,贝宝支付可能有72小时的处理时间
有效
,则按预期处理事务挂起
,而不是完成
或类似的内容完成
或失败