For the complete documentation index, see llms.txt. This page is also available as Markdown.

Добавление способов оплаты

Введение

Этот гайд описывает как интегрировать новый способ оплаты в личный кабинет. Процесс включает настройку Application Token, создание обработчика вебхуков, регистрацию в конфигурации и настройку платежной системы.

Архитектура платежей

Платежная система (вебхук)

PaymentController::webhook($paymentSystem)

PaymentHandler (ваш класс обработчика)
    ├─ Проверка IP адреса
    ├─ Проверка статуса платежной системы
    └─ Обработка вебхука (webhook())

API: POST /v2/payment/order/complete
    ├─ payment_system: "cstm:your_system"
    ├─ order_id: "Order:XXXXXXXX"
    └─ payment_id: "внешний_id"

Пополнение баланса пользователя

Требования

Обязательно:

  • Понимание REST API и PHP (версия 7.4+)

  • Учетные данные платежной системы (merchant ID, API ключи и т.д.)

  • Документация платежной системы (формат вебхуков, способ подписи)

Рекомендуется:

  • Знакомство с примером FreeKassa в Modules/Globals/Donations/Integrations/Handlers/FreeKassa.php


Шаг 1: Выпуск Application Token

Это критичный шаг — без токена платежи не будут обрабатываться!

Application Token требуется для аутентификации при вызове API endpoint'а /v2/payment/order/complete.

Создание токена

  1. Перейдите в панель администратора: https://mmoweb.biz/panel/settings/Globals.ApiKeyApp/add

  2. Укажите название

  3. В разделе "Доступы ключа" включите разрешение: Финализация платежного ордера

  4. Скопируйте токен — он больше не будет отображён

  5. Нажмите "Создать"

Установка токена

Откройте файл Modules/Globals/Donations/Integrations/PaymentHandler.php и найдите строку:

Вставьте ваш токен:

ВАЖНО: Храните токен в безопасности. Не коммитьте в публичные репозитории. Если токен скомпрометирован — создайте новый и отключите старый.


Шаг 2: Создание класса обработчика

Создайте файл

Modules/Globals/Donations/Integrations/Handlers/YourPaymentSystem.php:

Требования:

  • Класс должен наследоваться от PaymentHandler

  • Класс должен реализовывать HandlerInterface

  • Имя класса должно совпадать с именем файла


Шаг 3: Определение конфигурации

Внутри класса определите статические свойства:

Конструктор


Шаг 4: Реализация метода checkout()

Этот метод подготавливает платеж и возвращает URL для перенаправления пользователя.

Реализуйте метод checkout() для получения URL перенаправления пользователя, в соответствии с документацией платежной системы.


Шаг 5: Реализация метода webhook()

Этот метод обрабатывает входящий вебхук от платежной системы.

Реализуйте метод webhook() в соответствии с документацией обработки успешных платежей вашей платежной системы.


Шаг 6: Реализация метода getWebhookSignature()

Вычисляет ожидаемую подпись вебхука для верификации.

ВАЖНО: Формула подписи должна точно совпадать с документацией платежной системы!


Шаг 7: Регистрация в Config.php

Откройте файл Config.php и добавьте вашу систему:

Важно: Ключ в массиве должен совпадать с $identifier в созданном ранее классе.


Шаг 8: Добавление изображения платежной системы

Добавьте логотип платежной системы:

Путь:

Требования:

  • Формат: PNG или SVG

  • Фон: прозрачный или белый

  • Имя файла: должно совпадать с $identifier


Шаг 9: Настройка URL вебхука в платежной системе

URL вебхука формируется автоматически:

Примеры:

  • $identifier = 'stripe'https://ваш-сайт.ru/payment/webhook/stripe

  • $identifier = 'paypal'https://ваш-сайт.ru/payment/webhook/paypal

Что делать:

  1. Войдите в панель управления платежной системой

  2. Найдите раздел "Webhooks" / "Notifications" / "Integration"

  3. Добавьте новый вебхук

  4. Вставьте URL: https://ваш-сайт.ru/payment/webhook/your_identifier

  5. Выберите события: обычно "Payment completed" или "Payment success"

  6. Сохраните


Шаг 10: Включение платежной системы

Откройте ваш класс обработчика и измените:

После этого способ оплаты автоматически появится на странице:


Чек-лист перед тестированием

Проверьте что выполнены все шаги:

  • Application Token выпущен и установлен в PaymentHandler::APPLICATION_TOKEN

  • Класс обработчика создан в Modules/Globals/Donations/Integrations/Handlers/

  • Класс зарегистрирован в PAYMENT_INTEGRATIONS в Config.php

  • Изображение добавлено в template/panel/assets/media/payment/your_identifier.png

  • URL вебхука настроен в платежной системе

  • $status = true установлен в классе

  • checkout() возвращает объект checkoutResponse($redirectUrl)

  • webhook() возвращает boolean


Тестирование

Проверка отображения

  1. Перейдите на https://ваш-сайт.ru/panel/donations

  2. Убедитесь что ваша платежная система отображается в списке

Тестовый платеж

  1. Выберите вашу платежную систему

  2. Укажите сумму пополнения

  3. Нажмите "Пополнить"

  4. Убедитесь что произошел редирект на платежный шлюз

  5. Выполните тестовый платеж

  6. Проверьте что баланс пополнился


Частые ошибки

Ошибка
Причина
Решение

ORDER_NOT_FOUND

Ордер не найден

Проверьте формат order_id: Order:XXXXXXXX

Invalid webhook signature

Подпись не совпадает

Проверьте формулу подписи в документации

Payment system not supported

Не зарегистрирована

Проверьте PAYMENT_INTEGRATIONS в Config.php

Forbidden: IP address not allowed

IP не разрешен

Добавьте IP в $allowedIps или используйте подпись

ORDER_ALREADY_COMPLETED

Ордер уже обработан

Нормально при повторной отправке вебхука


Рекомендации по безопасности

  1. Всегда проверяйте статус платежа в методе webhook()

  2. Всегда проверяйте подпись вебхука используя hash_equals()

  3. Альтернативно: проверяйте IP адрес если платежная система не использует подписи

Дополнительно:

  • Проверяйте сумму платежа если она приходит в вебхуке

  • Используйте HTTPS для всех запросов

  • Логируйте все платежи для аудита

  • Не доверяйте клиентским редиректам — только вебхукам


Полный пример класса

Last updated

Was this helpful?