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