Как автоматизировать сверку платежей в e-commerce
Продвинутое3 минРедакция Innovialabs
Коротко
Автоматическая сверка связывает три источника — заказы, отчеты шлюза и банковские выписки — по общим идентификаторам, учитывает комиссии и возвраты и выводит в отдельную очередь только реальные расхождения.
Что такое сверка и зачем ее автоматизировать
Сверка платежей — проверка того, что каждый оплаченный заказ действительно оплачен, деньги пришли на счет в ожидаемой сумме, а все комиссии и возвраты учтены.
Вручную это делают в таблицах: выгружают заказы, отчет шлюза, банковскую выписку и сравнивают строки. Пока заказов мало, это терпимо. С ростом объема ручная сверка начинает отставать, ошибки копятся, а расхождения находятся через недели.
Автоматизация решает три задачи: сопоставляет записи, считает ожидаемые суммы и показывает только исключения.
Три источника данных
| Источник | Что содержит | Ключевые поля |
|---|---|---|
| Ваша система (заказы) | Что клиент должен был оплатить | ID заказа, сумма, статус, дата |
| Отчет платежного шлюза | Какие транзакции прошли | ID транзакции, ID заказа, сумма, комиссия, статус |
| Банковская выписка | Что реально зачислено | Сумма зачисления, дата, назначение, ID выплаты |
Сложность в том, что связи между ними неодинаковые. Заказ и транзакция часто связаны один к одному, а банк зачисляет одной суммой сразу пачку транзакций за период за вычетом комиссий.
Как построить процесс
- Собирайте данные автоматически. Заказы — из вашей базы, транзакции — через API или регулярную выгрузку отчета шлюза, выписки — через API банка или импорт файла.
- Нормализуйте. Единые форматы дат и часовых поясов, суммы в минимальных единицах валюты (целые числа), единые статусы.
- Сопоставьте заказы и транзакции. По ID заказа, который вы передаете в шлюз при создании платежа. Это главный ключ — без него сверка превращается в угадывание по сумме и времени.
- Сгруппируйте транзакции в выплаты. Если шлюз указывает ID выплаты (settlement), группируйте по нему. Если нет — по дате расчета согласно условиям договора.
- Посчитайте ожидаемое зачисление. Сумма транзакций − комиссии − возвраты ± корректировки.
- Сравните с выпиской. Совпало — выплата закрыта. Не совпало — исключение.
Комиссии, возвраты и частичные оплаты
- Комиссии. Берите их из отчета шлюза, а не рассчитывайте по своему тарифу: фактическая комиссия может зависеть от типа карты, способа оплаты или условий договора. Свой расчет полезен как контроль.
- Возвраты. Это отдельные операции со своими ID и датами. Возврат может уменьшить выплату другого периода — связывайте его с исходной транзакцией, а не с датой.
- Частичные оплаты. Один заказ — несколько транзакций. Сверяйте сумму всех успешных транзакций по заказу с его суммой.
- Частичные возвраты. Храните сумму возврата, а не просто флаг «возвращено».
- Валюта и округление. Работайте с целыми числами в минимальных единицах, чтобы не получать расхождения в копейках из-за чисел с плавающей точкой.
Какие расхождения ловить автоматически
- Заказ оплачен в системе, но транзакции нет.
- Транзакция есть, а заказа нет или он отменен.
- Сумма транзакции не равна сумме заказа.
- Транзакция успешна, но в ожидаемую выплату не попала.
- Зачисление в банке не совпадает с ожидаемой суммой выплаты.
- Возврат в шлюзе есть, а в системе заказ все еще «оплачен».
Для каждого типа задайте правило и допуск. Например, расхождение из-за округления закрывается автоматически, а разница в сумме заказа уходит бухгалтеру.
Как устроить работу с исключениями
- Отдельная очередь или раздел в CRM/админке со списком расхождений.
- У каждого исключения: тип, связанные записи, сумма разницы, ответственный, статус.
- Ежедневная сводка: сколько сверено, сколько открытых исключений, самые старые из них.
- История решений, чтобы повторяющиеся случаи превращать в новые правила.
Частые ошибки
- Не передавать ID заказа в шлюз — и потом сопоставлять по сумме.
- Хранить суммы в float.
- Сверять только заказы со шлюзом и не проверять банк.
- Игнорировать часовые пояса: транзакция около полуночи попадает в «чужой» день.
- Строить сверку разовой выгрузкой, а не регулярным процессом.