Как создать платёжный модуль на PHP, который будет работать с любой системой

Как создать платёжный модуль на PHP, который будет работать с любой системой

Ты разработчик. У тебя есть сайт, магазин, сервис — и тебе нужно принять оплату. Но платёжные шлюзы вроде Stripe, PayPal или Сбербанка не подходят: они не интегрируются с твоей CMS, не работают с твоей логикой скидок, не поддерживают нужные способы оплаты, или ты просто хочешь контролировать весь процесс. Ты не хочешь зависеть от чужих API, которые ломаются без предупреждения. Ты хочешь свой модуль — гибкий, надёжный, и чтобы его можно было подключить к любой системе. Это возможно. И я покажу, как сделать это без лишней сложности.

Почему не использовать готовые решения?

Готовые плагины — это удобно, пока они работают. Но когда у тебя:

  • Своя система учёта заказов с кастомными статусами;
  • Нужно обрабатывать оплату по SMS-коду или через криптовалюту;
  • Ты работаешь в стране, где нет поддержки Stripe;
  • Или тебе нужно логировать каждое действие в своей базе, а не в логах платёжной системы;

— тогда готовые решения начинают мешать. Они требуют костылей, переопределений, хаков. А ты хочешь, чтобы всё работало как часы — без зависимостей.

Создать свой модуль — значит получить полный контроль. Ты сам решаешь, как обрабатывать ошибки, как хранить данные, как уведомлять пользователя. И главное — ты не привязан к одному провайдеру. Модуль можно подключить к любому шлюзу: Сбер, Тинькофф, Qiwi, ЮKassa, даже к локальному терминалу.

Как устроен платёжный модуль: простая схема

Платёжный модуль — это не монолит. Это интерфейс между твоей системой и внешним платёжным сервисом. Он должен выполнять три задачи:

  1. Принять данные заказа от твоей системы (сумма, ID, email, описание).
  2. Перенаправить пользователя на платёжный шлюз (или открыть форму оплаты).
  3. Принять и обработать ответ от шлюза (успешно/ошибка), обновить статус заказа и уведомить пользователя.

Всё. Больше ничего не нужно. Ни базы данных для платежей, ни сложной логики — только чистый обмен данными.

Вот как это выглядит на практике:

  1. Пользователь нажимает «Оплатить» на сайте → твой модуль создаёт заказ в твоей БД (статус: ожидает оплаты).
  2. Модуль генерирует ссылку на платёжный шлюз с нужными параметрами (сумма, ID заказа, URL-возврата).
  3. Пользователь переходит на сайт шлюза, оплачивает.
  4. Шлюз отправляет POST-запрос на твой сервер с результатом (например, /payment/webhook).
  5. Твой модуль проверяет подпись, сверяет сумму, обновляет статус заказа → отправляет письмо пользователю.

Ты не пишешь код для каждого шлюза отдельно. Ты пишешь один модуль, который умеет работать с разными шлюзами через единый интерфейс.

Архитектура: интерфейс + адаптеры

Вот как это реализуется на PHP. Создаём два ключевых элемента:

1. Интерфейс PaymentGateway

Он описывает, что должен уметь делать любой платёжный модуль:

Platejigid.ru