Криптовалюта
Заказы в фиате или в криптовалюте, которые плательщик оплачивает криптовалютой
Перед тем как начать
Авторизация
Как подписывать запросы API-токеном.
Создание платежа
Базовый запрос на создание заказа, который расширяет эта страница.
Этот способ оплаты доступен не всем мерчантам. Уточните доступность у вашего менеджера.
Обзор
Оплата криптовалютой — это обычный заказ. Дополнительные поля не нужны: способ оплаты определяется терминалом, к которому подключён ваш сервис. Заказ можно создать в фиате или сразу в криптовалюте:
| Валюта заказа | Чем платит плательщик | Сумма к оплате |
|---|---|---|
RUB, USD | Криптовалютой, например USDT (TRC-20) или BTC | Эквивалент суммы заказа в токене по текущему курсу |
USDT, USDC, BTC, ETH, LTC, TRX, TON, SOL, BNB, DOGE, XMR, MATIC | Той же криптовалютой; сеть токена (например, TRC-20 для USDT) задана терминалом | Ровно сумма заказа, без пересчёта |
Плательщик не выбирает токен и сеть: они заданы в настройках терминала. Какие токены и сети подключены для вашего аккаунта, уточните у менеджера.
Точность сумм
| Валюта | Знаков после запятой | Минимальная сумма заказа |
|---|---|---|
Фиат, USDT, USDC | до 2 | 1 |
BTC, ETH, LTC, TRX, TON, SOL, BNB, DOGE, XMR, MATIC | до 8 | больше 0 |
Запрос с большим числом знаков отклоняется с 400. Суммы в ответах API и webhook-уведомлениях округлены до этой же точности.
Пример запроса
Заказ в фиате — обычный запрос на создание заказа в RUB или USD:
curl -X POST "https://api.panel.valutix.kz/v1/orders" \
-H "Content-Type: application/json" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-d '{
"amount": "5000.00",
"currency": "RUB",
"serviceId": 3,
"externalId": "order_12345",
"purpose": "Оплата заказа #12345",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments"
}'Заказ в криптовалюте — в той валюте, которой платит плательщик, сумма в ней же:
curl -X POST "https://api.panel.valutix.kz/v1/orders" \
-H "Content-Type: application/json" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-d '{
"amount": 0.00125,
"currency": "BTC",
"serviceId": 4,
"externalId": "order_12346",
"successUrl": "https://example.com/success",
"callbackUrl": "https://example.com/webhooks/payments"
}'Ответ
В ответе возвращается стандартный объект заказа. Заказ создаётся со статусом CREATED; перенаправьте плательщика на paymentLink, чтобы он завершил оплату.
Поля объекта заказа
Заказы с оплатой криптовалютой получают paymentType: "CRYPTO", когда выдана ссылка на оплату.
Что видит плательщик
Перенаправьте плательщика на paymentLink. В зависимости от терминала он попадает на одну из двух страниц:
- страницу оплаты провайдера, где и завершает оплату;
- нашу платёжную форму с реквизитами перевода:
- адрес кошелька и его QR-код;
- точная сумма в токене;
- тег / memo, если он нужен сети. Перевод без него не зачисляется, поэтому плательщик должен указать его в точности как на форме;
- таймер: сколько ещё действуют реквизиты.
Реквизиты кошелька показываются только на платёжной форме. API их не возвращает: вывести их в своём интерфейсе нельзя.
Итоговая сумма
Сумма заказа с оплатой криптовалютой может отличаться от запрошенной. Если плательщик перевёл меньше нужного, заказ остаётся в PENDING до истечения срока оплаты: в это время плательщик ещё может доплатить. После этого заказ закрывается как COMPLETED на фактически оплаченную сумму в валюте заказа: у заказа в фиате — эквивалент в фиате, у заказа в криптовалюте — переведённая сумма токена. Поле amount заказа обновляется до этого значения.
Перевод другим токеном автоматически не зачисляется: такой заказ разбирается вручную.
Зачисляйте плательщику amount из webhook-уведомления или из запроса статуса, а не сумму из своего запроса. Перевод, поступивший после истечения срока оплаты, заказ не меняет.
Статусы
У заказов с оплатой криптовалютой обычные статусы заказа:
| Статус | Когда |
|---|---|
PENDING | Ждём перевод и его подтверждение в сети или доплату недостающей суммы |
COMPLETED | Перевод подтверждён. amount — фактически оплаченная сумма, см. Итоговая сумма |
EXPIRED | До истечения срока оплаты ничего не оплачено |
FAILED | Ошибка оплаты на стороне провайдера |
Webhook-уведомления отправляются при каждой смене статуса, как и для других способов оплаты, см. Статус заказа и webhook-уведомления.
Тестовый режим
На тестовом терминале перевод не выполняется; статус заказа зависит от суммы, как и для других способов оплаты: 1000 — COMPLETED, 1001 — CANCELED, 1002 — FAILED, 1003 — COMPLETED, затем REFUND, любая другая сумма — EXPIRED через 5 минут.
Рекомендации
- Берите оплаченную сумму из webhook-уведомления, а не из своего запроса: после недоплаты она может быть меньше.
- Дождитесь
COMPLETED, прежде чем выдавать товар: перевод в сети — ещё не подтверждённая оплата. - Храните суммы в криптовалюте десятичными строками или decimal-типами, а не float: у BTC и ETH до 8 знаков после запятой.