Тайм-аут — неизвестность, а не отказ
Клиент может потерять ответ после принятия платежа провайдером. Повтор без устойчивого идентификатора способен дублировать операцию. Явно моделируйте ожидающие и неизвестные состояния, определяйте восстановление статуса из авторитетного источника. Обновление браузера не должно определять финансовый результат.
Идемпотентность — бизнес-правило
У ключа идемпотентности должны быть область, срок жизни и связь с операцией. Определите поведение при том же ключе с другими данными. Храните информацию для согласованного ответа. Проверяйте повторные уведомления и нарушенный порядок событий: очереди и сеть могут доставлять событие неоднократно.
Сверка — часть продукта
Внутренние записи и расчёты провайдера не всегда совпадают сразу. Нужны сопоставление, объяснимые расхождения и очередь для оператора. Сохраняйте доказательства без избыточных чувствительных данных. Полезнее процесс разрешения конкретного расхождения, чем панель с общим зелёным статусом.
Отделяйте архитектуру от разрешений
Хорошая архитектура не даёт доступа к банку, платёжной сети или регулируемой деятельности. Нужны договоры, тестовая среда и документация. Вопросы соответствия решают квалифицированные специалисты. Инженерия помогает собирать доказательства и готовиться, а сертификация и лицензирование имеют отдельный порядок.