【问题标题】:What are good practices to deal with PayPal API call and records in database?处理数据库中的 PayPal API 调用和记录的良好做法是什么?
【发布时间】:2012-09-04 01:29:18
【问题描述】:

我正在编写一个网站,让用户可以提交信用卡信息并订阅我的网络服务。我正在处理数据库记录和 PayPal API,我注意到会有一些潜在的问题。也就是说,如果以下数据库操作失败,我将无法回滚 PayPal API 调用。例如,假设我们在 RMDB 交易中创建一个定期付款配置文件并将记录写入数据库,就像这样

Transaction begin
CreateRecurringPaymentsProfile (PayPal)
Insert a record to table 'subscription'
Transaction end

如果没有问题,这可以正常工作,但如果我们将订阅记录插入数据库失败怎么办?

Transaction begin
CreateRecurringPaymentsProfile (PayPal)
Insert a record to table 'subscription' failed
Transaction rolled back

当然我们可以回滚数据库的事务,但是我们不能回滚 PayPal API 调用。然后我们在 PayPal 有一个孤立的定期付款资料。我有个想法,我可以先创建订阅记录,然后再更新。

Transaction begin
Insert a record to table 'subscription'
Transaction end

Transaction begin
CreateRecurringPaymentsProfile (PayPal)
Update subscription record
Transaction end

这样,如果数据库操作失败,至少我们还有订阅记录。这可能是一个可能的解决方案,但我想知道处理数据库操作的良好做法不能像这样回滚?尤其是在我们处理金钱的时候。

谢谢。

【问题讨论】:

    标签: database transactions paypal atomic


    【解决方案1】:

    我建议您像您考虑的那样分两步执行此操作。事务首先创建,状态为“已初始化”或类似。然后在 PayPal 付款成功返回后,您将状态更改为“已付款”。

    即使 PayPal 交易失败,保存交易也有好处,因此您会知道有多少失败/放弃的付款。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2021-11-13
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多