Каковы передовые методы работы с вызовами PayPal API и записями в базе данных?

Я пишу веб-сайт, который позволяет пользователям отправлять информацию о кредитной карте и подписываться на мой веб-сервис. Я имею дело с записью в базе данных и 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

Таким образом, если операция с базой данных завершится неудачно, по крайней мере, у нас будет запись о подписке. Это может быть возможным решением, но мне интересно, какие хорошие методы работы с базой данных нельзя откатить таким образом? Особенно, когда мы имеем дело с деньгами.

Спасибо.

5
задан Fang-Pen Lin 23 July 2012 в 04:32
поделиться