Вы захотите спроектировать свой код таким образом, чтобы ваши данные находились в действительном состоянии.
Большая ответственность, с которой вы сталкиваетесь, заключается в том, что вы отправляете данные для аутентификации / захвата, а затем, по какой-либо причине, что-то с вашей стороны терпит неудачу.Вы списали средства с вашего клиента, но по какой-то причине вы не знаете этого факта!В конце концов, какой-нибудь разгневанный клиент начнет кричать на тебя по телефону.Это плохое время.
Общая идея состоит в том, чтобы установить некоторые меры предосторожности, чтобы вы могли идентифицировать подобные проблемы.Проблема должна быть очень редкой, если она вообще когда-либо случается, поэтому исправление ошибок, вероятно, будет ручным процессом.
Вот что я бы сделал:
- Разработка таблицы базы данных, котораяотслеживает платежи (назовем это «оплата») и связываю их с вашей таблицей «заказ» (поэтому payment.order_id ссылается на order.id).
- Когда пришло время взаимодействовать с вашим шлюзом, настройте новыйзапись о платеже, содержащая любые нечувствительные данные, которые вы собираетесь передать в платежный шлюз.Добавьте в таблицу платежей столбец «status» и установите для него значение «pending»
- Попытайтесь выполнить транзакцию авторизации / захвата с вашим шлюзом.Получив ответ, измените статус записи платежа на «одобренный», «отклоненный» или «ошибка» и сохраните все соответствующие метаданные (причины отклонения, идентификатор транзакции и т. Д.).Если время ожидания шлюза истекло, возможно, это просто «ошибка», хотя вы можете повторить попытку один или два раза.и старше, скажем, 30 секунд.Если вы найдете что-либо, запаникуйте и сообщите об этом разработчику / операционному персоналу.
Есть, конечно, и другие вещи, которые могут пойти не так, но это одна из самых важных, которая приходит на ум, и стратегия, которую я описал, я использовал несколько раз, чтобы уменьшить риск.