Заказы и статусы

Заказы и статусы

Двухфазная модель: create → pay

Заказ оформляется в два шага, чтобы вы могли зафиксировать цену до списания денег:

  1. POST /api/reseller/order/create — создаёт заказ, фиксирует оптовую цену. Депозит НЕ списывается. Возвращает total_to_pay_rub.
  2. POST /api/reseller/order/pay — списывает депозит по зафиксированной цене и ставит заказ в очередь доставки.

Идемпотентность по custom_id

custom_id (UUID) придумываете вы — это ключ идемпотентности. Повторный create с тем же значением вернёт тот же заказ, а повторный pay не спишет депозит повторно. Не используйте тот же custom_id с другими параметрами: API вернёт первый заказ. Для каждого нового заказа создавайте новый custom_id.

Жизненный цикл заказа

create ──> CREATED ──pay──> PENDING ──> PROCESSING ──> DELIVERED
                │                                  └──> FAILED (депозит возвращён)
                └──(не оплачен вовремя)──> CANCELLED
        pay при нехватке депозита ──> REJECTED
СтатусЗначение
createdЗаказ создан, цена зафиксирована, не оплачен
pendingОплачен, в очереди на доставку
processingДоставляется
delivered✅ Доставлен (в delivered_payload — детали, напр. tx_hash)
failed❌ Не доставлен, депозит возвращён на баланс
cancelledНеоплаченный заказ истёк по таймауту
rejectedПри оплате не хватило депозита (списания не было)

Данные после доставки

После статуса delivered проверьте delivered_payload:

ТоварЗначение delivered_payload
stars, premium_*tx_hash
giftПодтверждение отправки
neuralКлюч или данные доступа
game с delivery: "codes"Коды, разделённые ;
steam, game с delivery: "topup"Идентификатор заказа у поставщика

Храните ключи и данные доступа для neural на сервере. Не публикуйте их в клиентском приложении.

Проверка получателя заранее

Чтобы не создавать заказ с неверным получателем, проверьте его заранее — это не тратит средства. Проверка нужна для stars и gift с Telegram-юзернеймом, а также для steam с логином Steam. Для neural и game она не нужна, потому что получателя нет:

curl -H "Authorization: Bearer $KEY" \
  "https://hexpay.live/api/reseller/check-recipient?product=stars&username=durov"
# {"success":true,"valid":true,"status":"ok"}

Статусы: ok — можно заказывать, not_found — пользователь не найден, premium_already — у пользователя уже есть Premium.


Did this page help you?