POST /v1/payment умеет создавать счёт тремя способами —
в зависимости от того, насколько заранее вы (или покупатель) определяете валюту и сеть оплаты.
Главный сценарий: цена в фиате, монету выбирает покупатель. У вас в магазине ценник в привычной
валюте (
USD, EUR, RUB…), а чем платить — USDT, BTC, TRX — и в какой сети решает сам покупатель
на странице оплаты. Это Режим 3, и именно с него стоит начинать: он ничего не требует, кроме суммы
и валюты цены, и даёт покупателю максимальный выбор (а значит, конверсию).Режимы 1 и 2 нужны, когда вы сознательно сужаете выбор — например, принимаете только USDT в
дешёвой сети, чтобы не разгребать зоопарк монет на балансе.Сначала: цена и расчёт — это разные валюты
Режимы касаются валюты расчёта, а не валюты цены. Не путайте два поля:
Шлюз сам пересчитает фиатную цену в крипту по курсу (округляя вверх, в пользу счёта):
Цену можно назначать не только в долларах
Валюта цены — это не обязательноUSD. Поддерживаются 23 фиатные валюты:
Работают ровно так же, как
USD, — во всех трёх режимах:
USD «для надёжности» смысла не имеет: берите валюту, в которой у вас реальный ценник.
У JPY и KRW — ноль знаков после запятой
Иена и вона не имеют дробной части. Сумма передаётся целым числом:"10.00").
Что НЕ поддерживается
Тенге (KZT), сом (KGS) и сум (UZS) — не поддерживаются. Попытка вернёт
400 payment.unknown_currency:
USD и пересчитывайте в тенге/сом/сум у себя на витрине.
Актуальный список валют цены всегда можно получить программно — в
GET /v1/currencies это блок pricing_currencies (монеты + фиаты,
у фиатов стоит "fiat": true и указан decimals). Не хардкодьте список — читайте его.
Режим 1. Фиксированная валюта и сеть
Вы точно знаете, чем и в какой сети платит покупатель. Задаётеto_currency и network.
Режим 2. Авто‑нормализация сети
Вы задаёте валюту (to_currency/currency), но не задаёте network.
- Если у валюты ровно одна сеть (как у
BTC→bitcoin), она подставится автоматически. - Если у валюты несколько сетей (как у
USDT), вернётся ошибкаpayment.network_required— сеть нужно указать явно.
Режим 3. Валюто‑агностичный (deferred) счёт
Это и есть главный сценарий из начала страницы: ценник в фиате, монету и сеть выбирает покупатель. Валюто‑агностичный (deferred) счёт — это счёт без заранее выбранной валюты и сети: их выбирает не вы, а сам покупатель, уже на странице оплаты. Вы не задаёте ниto_currency, ни network — оба пустые. Валюту и сеть выбирает покупатель на
hosted‑странице (страница оплаты на стороне Oblodai, куда вы редиректите покупателя по ссылке url).
Пустой
address и пустой payer_currency — это не баг. Пока счёт в статусе select, валюты
расчёта у него просто нет, а значит, неоткуда взяться ни адресу, ни сумме в крипте. По той же причине
возврат такого счёта вернёт refund.nothing_to_refund — возвращать нечего.is_multi в ответе — это флаг «мультивалютности»: true означает, что счёт агностичный и валюту
ещё предстоит выбрать покупателю, false — валюта и сеть уже зафиксированы (Режимы 1 и 2).
Дальше на странице оплаты покупатель вызывает
POST /v1/pay/{id}/select с выбранной парой — тогда фиксируется курс и
выделяется адрес.
Когда использовать: вы хотите дать покупателю выбор монеты прямо на странице оплаты, не спрашивая
заранее.
Чем ограничить выбор
По умолчанию покупателю доступен весь каталог. Чтобы сузить список принимаемых валют, задайте набор черезPOST /v1/payment/accepted/set:
Сравнение
Частая ошибка: цена в фиате и сеть без монеты
Если цена задана в фиате (USD, EUR, RUB — любом), и вы задали network, но не задали
to_currency, шлюз вернёт 400 payment.to_currency_required:
tron это может быть и USDT, и TRX, и USDC.
Два выхода:
- укажите монету —
"to_currency": "USDT"(Режим 1); - уберите и
network— тогда монету и сеть выберет покупатель (Режим 3).
to_currency = currency» срабатывает, только когда цена задана в крипте: для
{"currency": "USDT", "network": "tron"} расчёт пойдёт в USDT. С фиатом такого умолчания нет и быть
не может — фиатом в блокчейне не платят.
Полезные детали
- Комиссия фиксируется уже при создании во всех трёх режимах. В агностичном режиме курс и адрес фиксируются в момент выбора, а комиссия — сразу.
is_refreshоживляет просроченный счёт поorder_idвместо создания нового — работает во всех режимах. См.POST /v1/payment.
Связанные страницы
POST /v1/payment
POST /v1/pay/{id}/select
POST /v1/payment/accepted/list · /set
Форматы сумм и денег
GET /v1/currencies
Приём первого платежа
Платёжные ссылки
те же режимы суммы и валюты, но без бэкенда.
Массовые операции
до 5000 счетов одним запросом.