我正在写一个网站,让用户提交信用卡信息并订阅我的网络服务。我正在处理数据库记录和 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
这样,如果数据库操作失败,至少我们还有订阅记录。这可能是一个可能的解决方案,但我想知道处理数据库操作的良好做法不能像这样回滚?尤其是在我们处理金钱的时候。
谢谢。