Состояние работы и состояние платежа различаются
Заказ может быть согласован, находиться в работе, ожидать проверки или иметь спорный результат. Платёж при этом проходит собственные этапы. Нельзя считать, что изменение надписи о готовности работы автоматически подтверждает движение денег. Отдельно различайте авторизацию суммы, фактическое списание и перечисление исполнителю. Условия и доступность таких операций зависят от платёжного решения. Авторизация обычно означает временное резервирование доступной суммы, а не завершённый расчёт. Сроки и возможные действия необходимо проверять по условиям конкретного провайдера. Поэтому для каждого состояния полезно записать, что достоверно известно и какое подтверждение требуется дальше. Общее название безопасная сделка не позволяет заранее считать, что деньги хранятся определённым способом или защищены от любого риска.
Внешнее событие нужно проверять
Сообщение в браузере о завершении оплаты не должно быть единственным основанием для изменения финансового состояния. Серверная часть должна получать и проверять предусмотренное провайдером подтверждение. В интеграциях для этого часто используют уведомления о событиях. Такие уведомления могут приходить повторно или не в ожидаемой последовательности. Поэтому обработка должна узнавать уже принятые события и не превращать повторную доставку в повторное действие. Для запросов на изменение платёжных объектов также важен предусмотренный провайдером механизм защиты от повторного выполнения. Если соединение оборвалось после запроса, неизвестный исход нельзя автоматически считать неуспехом. Сначала проверяют фактическое состояние операции. Иначе повторная попытка с новой идентичностью может создать отдельное действие вместо восстановления прежнего. Нужен журнал переходов: какое событие произошло, когда, кем инициировано и на каком подтверждении основано. При этом секретные ключи, полные платёжные реквизиты и другие чувствительные сведения не должны попадать в обычные рабочие записи.
Спор и отмена являются частью основного процесса
До начала работы участникам важно одинаково понимать результат, порядок проверки и допустимые изменения задания. Если критерии появляются только после сдачи, технический модуль не устранит содержательный конфликт. Опишите, кто может отменить заказ, запросить исправление или начать спор. Для каждого действия нужны понятные условия и соответствующие полномочия. Исполнитель не должен самостоятельно подтверждать приёмку от имени заказчика, а изменение интерфейса не должно обходить серверную проверку роли. Отдельно рассматривают частичное выполнение, повторное уведомление, недоступность провайдера и разногласие по результату. Решение спора не следует смешивать с обычным нажатием кнопки завершения. Конкретные финансовые и правовые условия зависят от сервиса и требуют проверки до запуска. Для учебной модели достаточно вымышленных событий. Реальные деньги, чужие аккаунты и платёжные данные не нужны, чтобы увидеть невозможный переход или повторное списание. Чем яснее модель, тем проще сформулировать содержательные проверки для разработчиков.
Попробуйте на практике
Составьте бумажную модель одного вымышленного заказа без подключения платёжных средств.
- Опишите ожидаемый результат работы и отдельно перечислите состояния заказа и платежа. Не используйте одно слово готово для обеих цепочек.
- Для каждого перехода укажите инициатора, нужное подтверждение и условие отказа. Отметьте, какие действия зависят от внешнего провайдера.
- Добавьте два одинаковых уведомления об одной операции и задержку ответа. Проверьте, что модель не создаёт повторного финансового действия.
- Разберите отмену до начала работы и спор после передачи результата. Запишите сведения, которых не хватает для решения.
Как проверить результат. Работа и платёж имеют отдельные состояния. Повторное событие не дублирует действие, а спор не исчезает из модели из-за удобной надписи.
Частые вопросы
Готовый модуль гарантирует отсутствие потерь?
Нет. Важны его реализация, интеграция, правила сервиса и фактические условия платёжного провайдера. Название функции не заменяет проверку.
Можно ли проверять только успешную оплату?
Недостаточно. Нужны также повторные события, неопределённый исход, отмена и спор. Именно на переходах между такими состояниями часто обнаруживаются противоречия.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.