Platega
Platega (app.platega.io) — касса с оплатой через СБП, картой и криптой. Юзер уходит по редиректу на hosted-страницу Platega и после оплаты возвращается в бота. Валюта шлюза — RUB.
Способ оплаты у Platega задаётся числовым кодом в настройках шлюза (payment_method): один шлюз работает в одном методе. Идентификатор транзакции генерирует сама Platega — бот привязывает вебхук по нему (external_id).
Что понадобится
Мерчант-аккаунт на app.platega.io. Из кабинета Platega возьмите пару Merchant ID и Secret — она передаётся заголовками X-MerchantId / X-Secret и в запросах бота к Platega, и в обратном callback от Platega к боту.
Настройка в кабинете
В кабинете бота откройте платёжных провайдеров, выберите Platega и заполните поля:
| Поле | Что это | Обязательное |
|---|---|---|
merchant_id | Merchant ID из кабинета Platega | да |
secret | секретный ключ; хранится в БД в зашифрованном виде | да |
payment_method | код способа оплаты: 2 — СБП QR, 3 — карта, 11 — карточный эквайринг, 13 — крипта | нет, по умолчанию 2 |
Дальше включите тумблер активности провайдера и нажмите Тест — бот сделает запрос к API Platega с вашими ключами: ответ 401/403 означает, что ключи не приняты. Дополнительно у провайдера настраиваются отображаемое имя, комиссия для статистики и формы оплаты, которые видит юзер (карта / СБП / крипта).
Вебхук
https://ваш-домен/api/v1/payments/plategaУкажите этот URL как callback в кабинете Platega. Тело callback Platega не подписывает — подлинность проверяется по заголовкам X-MerchantId и X-Secret: бот сравнивает их со своими кредами (constant-time). Поэтому вебхук должен ходить строго по HTTPS, а secret нельзя нигде светить — кто знает пару заголовков, тот может подтвердить платёж. Неверные заголовки → HTTP 403, платёж не трогается.
Маппинг статусов из тела callback:
| Статус Platega | Что делает бот |
|---|---|
CONFIRMED | зачисляет платёж |
CANCELED / CANCELLED / CHARGEBACKED / EXPIRED / REJECTED / FAILED | закрывает платёж как отменённый |
| остальные | оставляет в ожидании |
Особенности
- Возвратов по API нет — возврат делаете в кабинете Platega руками, а в боте фиксируете результат: /payments/refunds.
- Рекурренты и сохранённые карты не поддерживаются.
- Шлюз умеет опрос статуса (
GET /transaction/{id}) — реконсилятор сам добивает платежи с потерянным вебхуком. - Описание платежа обрезается до 128 символов; после оплаты (и при неудаче) юзера возвращает на
return_url, по умолчанию — в Telegram.
Платёж прошёл, а подписки нет?
Реконсилятор опрашивает Platega каждые 5 минут и сам зачисляет зависшие оплаты. Как это работает — /payments/webhooks.
