RoxPay
Click, Payme,
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.
- Kassa oching@roxPayBot → «Kassalarim» → «Yangi kassa ochish», bot tokenini yuboring.
- API kalitni olingHar kassaga alohida kalit avtomatik yaratiladi.
- To‘lov yarating
POST /api/create→ javobdagipay_url’ni mijozga bering. - Callback’ni qabul qiling
status=paidkelsa, 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.
| Metod | Yo‘l | Vazifasi |
|---|---|---|
| POST | /create | To‘lov yaratish. Callback — GET, faqat to‘langanda. |
| GET | /status/{order_id} | To‘lov holati. |
| POST | /v1/orders | To‘lov yaratish, v1. Callback — JSON POST: order.paid, order.expired, order.cancelled, order.refunded. |
| GET | /v1/orders/{id} | To‘lov holati, v1. |
POST /create
| Maydon | Tur | Izoh |
|---|---|---|
| amount | integer | Majburiy. So‘mda, 1 000 — 99 999 999. |
| note | string | Izoh, 500 belgigacha. Callback’da qaytadi. |
| callback_url | url | To‘lov bo‘lganda chaqiriladi. Ochiq internet manzili bo‘lishi kerak. |
| return_url | url | To‘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, masalanorder.paidX-Rox-TimestampUnix vaqt, soniyadaX-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
| HTTP | Kod | Sabab |
|---|---|---|
| 401 | missing_credentials | X-Api-Key yuborilmagan |
| 401 | invalid_credentials | Kalit noto‘g‘ri |
| 401 | key_revoked | Kalit bekor qilingan |
| 401 | ip_not_allowed | Bu IP manzilga ruxsat yo‘q |
| 403 | merchant_inactive | Kassa faol emas |
| 422 | — | Maydon noto‘g‘ri: {"ok": false, "error": "…"} |
| 429 | — | Daqiqasiga 120 so‘rovdan oshdi |
03 — Pul
Pul qayerga tushadi?
- To‘lovkassa balansiga tushadi
- Yechish@roxPayBot orqali kartaga; 6% komissiya ushlanadi
- Qaytarishv1 kassalarga
order.refundedhodisasi keladi - Muddatto‘lanmagan havola 1 soatdan keyin
expiredbo‘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.