ROXIY Kanal
RoxPay

Click, Payme,
Paynet — bitta API.

Kassa @roxPayBot’da ochiladi. Mijoz pay.roxiy.uz sahifasida to‘laydi, pul kassa balansiga tushadi, sizga imzoli callback keladi.

3to‘lov tizimi: Click, Payme, Paynet
6%kartaga yechishda ushlanadi
120so‘rov daqiqasiga, bitta kalit
01 — Ulanish

Kassa 4 qadamda.

  1. Kassa oching@roxPayBot → «Kassalarim» → «Yangi kassa ochish», bot tokenini yuboring.
  2. API kalitni olingHar kassaga alohida kalit avtomatik yaratiladi.
  3. To‘lov yaratingPOST /api/create → javobdagi pay_url’ni mijozga bering.
  4. Callback’ni qabul qilingstatus=paid kelsa, imzoni tekshirib buyurtmani yoping.
02 — API

API ma’lumotnomasi.

Asosiy manzil https://pay.roxiy.uz/api. Har so‘rovda X-Api-Key sarlavhasi. Kalitga IP cheklovi qo‘yilgan bo‘lsa, boshqa IP’dan so‘rov rad etiladi.

MetodYo‘lVazifasi
POST/createTo‘lov yaratish. Callback — GET, faqat to‘langanda.
GET/status/{order_id}To‘lov holati.
POST/v1/ordersTo‘lov yaratish, v1. Callback — JSON POST: order.paid, order.expired, order.cancelled, order.refunded.
GET/v1/orders/{id}To‘lov holati, v1.

POST /create

MaydonTurIzoh
amountintegerMajburiy. So‘mda, 1 000 — 99 999 999.
notestringIzoh, 500 belgigacha. Callback’da qaytadi.
callback_urlurlTo‘lov bo‘lganda chaqiriladi. Ochiq internet manzili bo‘lishi kerak.
return_urlurlTo‘lovdan keyin mijoz qaytadigan sahifa.

v1 qo‘shimcha maydonlari: external_id (64), description (500), payer.telegram_id, payer.username, payer.name.

Holatlar

pending · paid · expired · cancelled · refunded

so‘rov
curl -X POST https://pay.roxiy.uz/api/create \
  -H "X-Api-Key: SIZNING_KALIT" \
  -d amount=25000 \
  -d note="Buyurtma #1042" \
  -d callback_url=https://sayt.uz/rox-callback
201 · javob
{
  "ok": true,
  "status": "pending",
  "order_id": 1042,
  "amount": 25000,
  "pay_url": "https://pay.roxiy.uz/pay/…",
  "providers": { /* click, payme, paynet */ }
}

Callback imzosi

Har callback’da uchta sarlavha keladi:

  • X-Rox-Eventhodisa, masalan order.paid
  • X-Rox-TimestampUnix vaqt, soniyada
  • X-Rox-Signaturesha256= + HMAC-SHA256(timestamp.body, kassa webhook siri)
body — POST’da JSON tanasi; GET’da faqat status, order_id, order_hash, amount, note shu tartibda. URL’ingizdagi boshqa parametrlar imzoga kirmaydi. Callback bir necha marta kelishi mumkin — ishlovchi takroriy so‘rovni qayta bajarmasin.
PHP
// callback_url.php — imzoni tekshirish
$secret = 'KASSA_WEBHOOK_SECRET';
$ts  = $_SERVER['HTTP_X_ROX_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_ROX_SIGNATURE'] ?? '';

// GET callback: faqat shu 5 parametr, shu tartibda
$body = http_build_query(array_intersect_key(
    array_merge(array_flip(['status','order_id','order_hash','amount','note']), $_GET),
    array_flip(['status','order_id','order_hash','amount','note'])));
// v1 (POST): $body = file_get_contents('php://input');

$ok = hash_equals('sha256=' . hash_hmac('sha256', $ts . '.' . $body, $secret), $sig)
   && abs(time() - (int)$ts) < 300;

Xatolar

HTTPKodSabab
401missing_credentialsX-Api-Key yuborilmagan
401invalid_credentialsKalit noto‘g‘ri
401key_revokedKalit bekor qilingan
401ip_not_allowedBu IP manzilga ruxsat yo‘q
403merchant_inactiveKassa faol emas
422Maydon noto‘g‘ri: {"ok": false, "error": "…"}
429Daqiqasiga 120 so‘rovdan oshdi
03 — Pul

Pul qayerga tushadi?

  • To‘lovkassa balansiga tushadi
  • Yechish@roxPayBot orqali kartaga; 6% komissiya ushlanadi
  • Qaytarishv1 kassalarga order.refunded hodisasi keladi
  • Muddatto‘lanmagan havola 1 soatdan keyin expired bo‘ladi
Aloqa

Savol bormi?

Formadagi xabar to‘g‘ridan-to‘g‘ri Telegram’ga keladi. Xizmat bo‘yicha savolni o‘sha botning o‘zida ham berish mumkin.