Логика заказов знает про провайдера
Названия статусов, поля и исключения конкретного эквайринга прорастают в оформление заказа, админку и учёт. Заменить шлюз становится отдельным проектом.
Выберите тему — соберём контекст
Провайдер — сменная деталь, а не фундамент заказа
Обычно первый эквайринг встраивают напрямую в оформление заказа, и дальше он определяет структуру кода. Мы делаем наоборот: заказ работает с внутренним платёжным слоем, а провайдер подключается адаптером — поэтому второго можно добавить, а первого заменить без переписывания логики заказов.
Проблема проявляется не на запуске, а через год: когда меняются тарифы, отказывает шлюз или бизнес хочет принимать оплату иначе.
Названия статусов, поля и исключения конкретного эквайринга прорастают в оформление заказа, админку и учёт. Заменить шлюз становится отдельным проектом.
Добавить резервный шлюз можно только копированием ветки оплаты со своими особенностями. Копии постепенно расходятся.
Повторное уведомление создаёт второй платёж или перезаписывает статус заказа. Находится это обычно при сверке, когда деньги уже разошлись.
История возврата не видна в заказе: непонятно, сколько уже вернули и по какой операции. Бухгалтерия выясняет это отдельно.
Платёжный слой стоит между ними и определяет, какая сторона за что отвечает. Это позволяет менять шлюз, не переписывая работу с заказами и учётом.
Договорённость простая: заказ ничего не знает о формате конкретного провайдера, а провайдер ничего не знает о структуре заказа. Всё, что между ними, описано один раз — во внутреннем контракте.
Четыре части, которые делают оплату предсказуемой и снимают привязку к одному шлюзу.
Один интерфейс: создать платёж, вернуть статус, оформить возврат, отдать реестр операций. Особенности конкретного шлюза остаются внутри его адаптера.
Внутренняя таблица всех операций: сумма, валюта, способ оплаты, провайдер, внешний идентификатор, возвраты и связанный заказ.
Статусы разных провайдеров сводятся к небольшому набору внутренних состояний. Именно по ним живёт заказ, а не по формулировкам шлюза.
Правила выбирают провайдера по способу оплаты, сумме, типу клиента или доступности шлюза. Резервный маршрут задаётся заранее, а не в момент сбоя.
Подключение второго шлюза — это работа над адаптером и правилом маршрутизации, а не над логикой оформления заказа.
Фиксируем, что должен уметь любой провайдер: создание платежа, возврат, статус, реестр операций. Новые шлюзы подключаются к этому контракту, а не к логике заказа.
Пишется только адаптер под API конкретного провайдера: подпись, форматы, коды ошибок. Оформление заказа, админка и учёт остаются нетронутыми.
Отдельный способ оплаты или долю платежей переключаем правилом маршрутизации. Переключение обратимо: вернуться к прежнему провайдеру можно без правок в коде заказа.
После включения сверяем реестры обоих провайдеров в одном формате. Расхождение видно сразу, потому что структура данных уже общая.
Уведомления от провайдеров приходят повторно — при повторной доставке, при опросе и при ручном перезапуске. Обработка проектируется сразу с расчётом на это.
Возвраты, комиссии и расхождения — та часть оплаты, которую обычно находят в конце периода. В платёжном слое они собираются в одном реестре.
Полный и частичный возврат оформляются по платежу. Слой сам определяет провайдера операции, а результат попадает в журнал с суммой и статусом.
Операции всех провайдеров сводятся в один отчёт: по заказу видны все попытки оплаты, возвраты и удержанные комиссии, независимо от шлюза.
Формат выгрузки не зависит от того, сколько провайдеров подключено и кто из них основной. Это снимает пересборку отчёта при каждой смене шлюза.
Начинаем с инвентаризации: какие способы оплаты нужны, кто провайдеры, какие требования у учёта и бухгалтерии. Контракт и правила маршрутизации согласуются до разработки — потом это дешевле не менять.
Разбираем системы, сущности и потоки. Фиксируем, что считается источником правды и где сейчас расходятся данные.
Описываем поля, форматы, частоту и правила сопоставления справочников. Согласуем до начала разработки.
Проверяем обмен на реальных данных в ограниченном объёме: несколько десятков записей в обе стороны.
Включаем полный обмен с очередью, повторными попытками, журналом и защитой от дублей.
Мониторинг, сверка расхождений, обновление коннекторов при изменениях API на стороне сервиса.
Оплата — критичный участок: сбой здесь означает потерянные заказы и разошедшийся учёт. Поэтому обязательны журнал, идемпотентность и резервный маршрут.
Повторная доставка одного и того же события не создаёт вторую сделку, второй заказ или второй платёж.
Если внешняя система недоступна, операция ждёт и повторяется по расписанию, а не теряется.
Видно, что и когда ушло, что вернулось и что не прошло. Неудачную операцию можно повторить вручную.
Учитываем ограничения по частоте запросов, чтобы не получить блокировку со стороны сервиса.
Регулярная сверка ключевых сущностей между системами: расхождение видно в отчёте, а не в конце квартала.
При остановке обмена приходит уведомление ответственным, а не выясняется из жалобы клиента.
Часто эти интеграции внедряются вместе — например, CRM и телефония, или магазин и маркетплейсы.
Оплата, возвраты и сверка без ручной работы
Интеграция с ЮKassa: приём платежей, возвраты, рекуррентные списания и автоматическая сверка с учётом.
ПодробнееПлатежи и подписки на одном шлюзе
Интеграция с CloudPayments: эквайринг, подписки, рекуррент и платёжные виджеты.
ПодробнееЭквайринг с рассрочкой и выплатами
Интеграция с Тинькофф: интернет-эквайринг, рассрочка, выплаты партнёрам и сверка операций.
ПодробнееОбмен редко ограничивается одной категорией: магазин обычно связан и со складом, и с платежами, и с маркетплейсами.
Если вашего вопроса здесь нет — задайте его в форме ниже.
Расскажите, какие провайдеры используются сейчас, что мешает добавить второй и как оплаты попадают в учёт. Предложим архитектуру платёжного слоя и назовём стоимость.
За 3 рабочих дня разберём: где вы теряете заявки, какие каналы недооценены, и что даст рост в первые 30 дней.
Без обязательств. С конкретными цифрами.
Cookie и аналитика
Мы используем необходимые cookie для работы сайта и форм. Аналитические cookie (Яндекс.Метрика, включая запись сессий) подключаем только с вашего согласия — от него можно отказаться. Подробнее: Политика использования cookie и обработка персональных данных.