Процесс оплаты заказа

Прямая оплата через платёжную систему (карта, СБП и т.д.) с веб-страницы, Telegram Web App или мобильного приложения. Списание внутреннего баланса бота через эти методы не поддерживается.

Базовый URL: https://api.bot-t.com

Все методы — POST, тело JSON, заголовок Content-Type: application/json.


Авторизация

Не нужны: токен бота (token / botToken) и секретный ключ бота (secretKey).

Нужен доступ к заказу — одно из двух полей в теле каждого запроса:

ПолеОписание
order_key или orderKeyсекретный ключ заказа из ответа создания заказа (поле orderKey). На страницу оплаты его обычно передают в query URL — см. ниже
secret_user_keyсекрет пользователя бота — владельца заказа

Без ключа:

{ "result": false, "message": "not_access (public_pay_key)" }

Обязательные поля в каждом запросе

ПолеТипОписание
bot_idintegerID бота. Должен совпадать с ботом заказа
order_idstringидентификатор оплаты (форматы ниже)
order_key / orderKey или secret_user_keystringдоступ к заказу; достаточно одного варианта

Откуда взять ключ

Тип order_idorder_key / orderKeysecret_user_key
o-{id}поле orderKey из ответа создания заказа магазинасекрет владельца, если заказ привязан к пользователю
c-{id}поле orderKey из ответа создания заказа корзинысекрет владельца заказа
p-{id}поле orderKey из ответа создания истории оплаты сообщения; в кнопках URL — плейсхолдер {ORDER_KEY}секрет плательщика (альтернатива)

Ключ привязан к типу заказа: ключ от c-123 не откроет o-123 или p-123.

Как ключ попадает на страницу оплаты

  1. Создаёте заказ / запись оплаты через API.
  2. В ответе сохраняете order_id (или собираете o-{id} / c-{id} / p-{id}) и строку orderKey.
  3. Открываете свою страницу оплаты и передаёте туда параметры (часто в query URL), например:
https://example.com/pay?bot_id=1&order_id=o-123321&order_key=a1b2c3d4e5f6...

Имена параметров могут быть любыми на вашей стороне. Важно: при вызове API отправьте их как bot_id, order_id и order_key (или orderKey) в JSON-теле.

Тот же orderKey можно хранить в localStorage, сессии или QR — суть одна: клиент должен иметь секрет заказа до первого get-status.

Telegram deep-link вида https://t.me/{бот}?start=o_{id} содержит только номер заказа, без order_key. Для оплаты через этот публичный API его недостаточно: нужен сохранённый orderKey с шага создания или secret_user_key владельца.

Оплата сообщения (p-{id})

При создании записи истории оплаты (API create-payment-history или отправка сообщения-оплаты в боте) в ответе / данных записи приходят:

ПолеПримерНазначение
order_idp-44744идентификатор для payment/order
orderKeya1b2c3...секрет доступа (order_key в запросах оплаты)

Пример ответа создания:

{
  "result": true,
  "data": {
    "id": 44744,
    "order_id": "p-44744",
    "orderKey": "a1b2c3...",
    "status": "pending"
  }
}

Дальше — как у магазина:

https://example.com/pay?bot_id=51318&order_id=p-44744&order_key=a1b2c3...
{
  "bot_id": 51318,
  "order_id": "p-44744",
  "order_key": "a1b2c3..."
}

В тексте и URL кнопок сообщения-оплаты можно использовать плейсхолдеры {ORDER_ID} и {ORDER_KEY} — бот подставит p-{id} и секрет при отправке.

Альтернатива без order_key: передать secret_user_key пользователя, которому принадлежит платёж (Web App / API пользователя бота).

{
  "bot_id": 51318,
  "order_id": "p-44744",
  "secret_user_key": "k7f3a9b2c1d4e5f6"
}

Форматы order_id

ПрефиксЧто оплачиваетсяПример
o-заказ магазинаo-123321
c-заказ корзиныc-456
p-оплата сообщения ботаp-789

Формат ответа

{ "result": true, "data": ... }
{ "result": false, "message": "текст ошибки" }

Всегда проверяйте result === true перед использованием data.

Лимит: 120 запросов в минуту с одного IP.


Типовой сценарий

sequenceDiagram
    participant UI as Страница оплаты
    participant API as API оплаты

    UI->>API: get-status (bot_id, order_id, order_key)
    alt result=false (уже оплачен)
        UI->>UI: Экран «Заказ уже оплачен»
    else status=wait
        UI->>API: get-groups
        UI->>API: get-items
        UI->>API: get-pay-data
        UI->>UI: Редирект / форма оплаты
        UI->>API: check-pay или get-status
    end

Сценарий одинаков для o-, c- и p-. Ключ доступа (order_key или secret_user_key) передаётся во всех шагах.


Методы

Базовый путь: POST https://api.bot-t.com/v1/payment/order/{действие}

ДействиеНазначение
get-statusстатус: ожидает оплаты или уже оплачен
get-groupsгруппы способов оплаты
get-itemsспособы оплаты в группе (group_id)
get-pay-dataданные для экрана оплаты (item_id)
set-pay-inputввод пользователя, когда нужен текст (тип оплаты 2)
check-payпроверка оплаты у платёжной системы
cancelотмена сценария

Примеры запросов

Статус заказа магазина

{
  "bot_id": 1,
  "order_id": "o-123321",
  "order_key": "a1b2c3..."
}

Допустимо поле orderKey вместо order_key.

Статус заказа корзины

{
  "bot_id": 1,
  "order_id": "c-456",
  "order_key": "a1b2c3..."
}

Статус оплаты сообщения — через order_key

{
  "bot_id": 1,
  "order_id": "p-789",
  "order_key": "a1b2c3..."
}

Статус оплаты сообщения — через секрет пользователя

{
  "bot_id": 1,
  "order_id": "p-789",
  "secret_user_key": "k7f3a9b2c1d4e5f6"
}

Данные для оплаты

{
  "bot_id": 1,
  "order_id": "p-789",
  "order_key": "a1b2c3...",
  "item_id": 15
}

Сохранить ввод пользователя (тип оплаты 2)

{
  "bot_id": 1,
  "order_id": "c-456",
  "order_key": "a1b2c3...",
  "item_id": 15,
  "input_value": "текст от пользователя"
}

Поле dataPay.type

typeЧто делать на клиенте
0показать dataPay.text
1открыть ссылку dataPay.link
2поле ввода → set-pay-input → снова get-pay-data
3, 4, 8requires_telegram: true — завершить оплату в Telegram-боте
6открыть Web App (dataPay.web_app)
7, 9способ с чеком на сайте недоступен — выберите другой

Сумма в полях amount — в минимальных единицах валюты (копейки). Для отображения делите на 100.


Статус заказа

Проверка выполняется во всех методах.

Если заказ уже оплачен (или больше не ждёт оплаты):

{ "result": false, "message": "Заказ уже оплачен" }

Повторно пройти сценарий оплаты для такого заказа нельзя — покажите пользователю экран успеха.

При успешном get-status заказ всегда в состоянии ожидания:

{
  "result": true,
  "data": {
    "status": "wait",
    "order_id": "o-123321",
    "amount": 150000
  }
}

Ошибки

СитуацияТипичный message
Нет или неверный ключ доступаnot_access (public_pay_key)
Неверный формат order_idДопустимы только o-{id}, c-{id} или p-{id}
Заказ не найденnot found
bot_id не совпадает с ботом заказаnot_access (public_bot)
Заказ уже оплаченЗаказ уже оплачен
Способ с чекомтекст про другой способ или оплату в Telegram

Связанные разделы

  • Оплата сообщения (p-{id}): все запросы — PaymentMessagePublic.md.
  • Создание заказа магазина (o-{id}) и получение orderKey — документация публичного магазина.
  • Создание заказа корзины (c-{id}) и получение orderKey — документация публичной корзины.