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