Cryptomus
Cryptomus — крипто-касса: счёт выставляется в рублях, юзер на hosted-странице Cryptomus выбирает любую из 15+ монет, конвертация по курсу — на стороне кассы. Валюта шлюза — RUB, order_id инвойса = внутренний payment_id бота.
Один из немногих шлюзов в базе с возвратами по API: кнопка возврата в кабинете бота сама дёргает Cryptomus, деньги уходят обратно на адрес плательщика.
Что понадобится
Мерчант-аккаунт в Cryptomus. Из его кабинета — merchant UUID и API key (ключ платёжного API): оба участвуют в подписи каждого запроса и вебхука.
Настройка в кабинете
| Поле | Что это | Обязательное |
|---|---|---|
merchant_uuid | UUID мерчанта из кабинета Cryptomus | да |
api_key | ключ платёжного API; хранится в БД в зашифрованном виде | да |
Включите тумблер активности провайдера и нажмите Тест — бот отправит подписанный запрос на POST /v1/balance: если ключи верные, Cryptomus вернёт баланс. Дополнительно у провайдера настраиваются отображаемое имя и комиссия для статистики.
Вебхук
https://ваш-домен/api/v1/payments/cryptomusУкажите этот URL как callback в кабинете Cryptomus. Подпись лежит внутри JSON-тела, в поле sign: бот вынимает его, пересериализует остальное тело компактно (без пробелов, юникод не экранируется — ровно как PHP json_encode(JSON_UNESCAPED_UNICODE)) и сверяет md5(base64(тело) + api_key). Несошедшаяся подпись → HTTP 403.
Маппинг статусов:
| Статус Cryptomus | Что делает бот |
|---|---|
paid, paid_over | зачисляет платёж |
cancel, fail, system_fail, refund_process, refund_paid, wrong_amount | закрывает платёж как отменённый |
| остальные | оставляет в ожидании |
Особенности
- Возвраты по API:
POST /v1/payment/refundвозвращает платёж целиком на адрес плательщика (is_subtract: true); частичной суммы шлюз не передаёт. Запускается из кабинета: /payments/refunds. paid_over(юзер переплатил) засчитывается как оплата;wrong_amount(недоплатил) закрывает платёж как отменённый — недоплата автоматически не зачисляется.- Инвойс живёт 1 час (
lifetime: 3600). - Рекурренты и сохранённые карты не поддерживаются.
- Шлюз умеет опрос статуса (
POST /v1/payment/info) — реконсилятор сам добивает платежи с потерянным вебхуком. - Heleket — полный API-клон этой схемы: в базе он реализован как наследник шлюза Cryptomus, отличается только доменом.
Платёж прошёл, а подписки нет?
Реконсилятор опрашивает Cryptomus каждые 5 минут и сам зачисляет зависшие оплаты. Как это работает — /payments/webhooks.
