Основное сопоставление выполняется по ID заказа с дополнительной проверкой суммы, валюты и статуса платежа. Одинаковой суммы недостаточно: без надёжного ключа запись остаётся неразобранной.
Как сопоставлять платежи с заказами по явным правилам
Основное сопоставление выполняется по ID заказа с дополнительной проверкой суммы, валюты и статуса платежа. Одинаковой суммы недостаточно: без надёжного ключа запись остаётся неразобранной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В системе есть заказы с ID, суммой в копейках и валютой и входящие записи провайдера с payment_id и order_id. Предложите правило сопоставления. Что делать, если совпала сумма, но нет надёжного ID заказа?
Ответ
Основное сопоставление выполняется по ID заказа с дополнительной проверкой суммы, валюты и статуса платежа. Одинаковой суммы недостаточно: без надёжного ключа запись остаётся неразобранной.
Алгоритм:
- Проверить подлинность источника и уникальность payment_id.
- Найти заказ по переданному order_id и убедиться, что он относится к нужному магазину.
- Сопоставить валюту и точную целочисленную сумму с сохранёнными условиями заказа.
- Применить допустимый переход состояния только по подтверждённому статусу провайдера.
Если заказ не найден, значения расходятся или несколько записей претендуют на одно соответствие, нужна сверка, а не угадывание. Имя клиента и близкое время могут помогать оператору, но не являются достаточным доказательством. Повторный webhook с тем же payment_id должен давать тот же результат без повторного начисления. Возвраты и частичные платежи требуют отдельных правил.