PayHamyon API Hujjatlari
PayHamyon REST API dasturchilarga o'zlarining Telegram botlari, veb-saytlari va dasturiy ta'minotlariga milliy HUMO (9860) hamda HUMO Visa (4067) to'lovlarini avtomatlashtirilgan tarzda ulash imkonini beradi.
application/json formatida qabul qilinadi va JSON ko'rinishida javob qaytaradi.
Bazaviy URL Manzili
Barcha API so'rovlari quyidagi xavfsiz HTTPS domeniga yuborilishi shart:
Autentifikatsiya
Har bir so'rovni xavfsiz aniqlash uchun quyidagi ikki parametr talab qilinadi:
| Parametr | Turi | Holati | Tavsif |
|---|---|---|---|
| shop_id | integer | Majburiy | Kassangizning noyob identifikator raqami (masalan: 126). |
| shop_key | string | Majburiy | Kassangizning maxfiy API kaliti (Telegram botdan olinadi). |
shop_key kalitingizni hech qachon brauzer mijoz kodida (frontend JS) ochiq qoldirmang! So'rovlarni faqat o'z backend serveringizdan yuboring.
POST /api/payment/create
Yangi to'lov buyurtmasini shakllantiradi. Tizim asosiy summaga kichik unikal farq (offset) qo'shib, mijoz to'lashi lozim bo'lgan aniq pay_amount ni va to'lov tokenini qaytaradi.
So'rov Parametrlari (Body JSON)
| Maydon | Turi | Holat | Tavsif |
|---|---|---|---|
| shop_id | int | Majburiy | Kassa ID raqami. |
| shop_key | string | Majburiy | Kassa maxfiy kaliti. |
| amount | int | Majburiy | Asosiy to'lov summasi (so'mda, min: 1000). |
| callback_url | string | Ixtiyoriy | To'lov tushganda POST xabar boradigan Webhook havolasi. |
| description | string | Ixtiyoriy | Buyurtma tavsifi yoki foydalanuvchi ma'lumoti. |
| expire_minutes | int | Standart: 15 | To'lov amal qilish muddati (daqiqalarda, odatda 15). |
Muvaffaqiyatli Javob (200 OK)
{
"status": true,
"payment_id": 982,
"token": "3oKTCZPEOT",
"amount": 50000,
"pay_amount": 50130,
"card_number": "9860 3501 8492 4821",
"card_holder": "PAYHAMYON MERCHANT",
"expire_at": "2026-10-27 15:38:59"
}
POST /api/payment/check
To'lov holatini uning tokeni yoki payment_idsi orqali tekshirish. RAM diskdagi 3 soniyalik kesh orqali haddan tashqari ko'p tekshiruvlar bazaga yuklama bermasdan bir zumda javob beradi.
So'rov Parametrlari (Body JSON)
| Maydon | Turi | Holat | Tavsif |
|---|---|---|---|
| shop_id | int | Majburiy | Kassa ID raqami. |
| token | string | Majburiy* | To'lov yaratilganda olingan 10 xonali token. |
| payment_id | int | Muqobil | Token o'rniga payment_id ham kiritilishi mumkin. |
Mumkin Bo'lgan Holatlar (payment_status)
pending— To'lov kutilmoqda (mijoz hali o'tkazma qilmadi).paid— To'lov to'liq muvaffaqiyatli amalga oshirildi!expired— To'lov muddati tugadi (vaqtida to'lanmadi).cancelled— To'lov bekor qilindi.
POST /api/payment/cancel
Kutilayotgan to'lov buyurtmasini muddatidan oldin bekor qilish.
| Maydon | Turi | Tavsif |
|---|---|---|
| shop_id, shop_key | int / str | Autentifikatsiya kalitlari. |
| token yoki payment_id | str / int | Bekor qilinadigan to'lov. |
POST /api/shop/info
Kassa holatini, ulangan karta ma'lumotlarini va Telegram Userbot faolligini tekshirish.
Webhook Tizimi (Callback)
Mijoz kartangizga pul o'tkazishi bilan PayHamyon siz ko'rsatgan callback_url manziliga avtomatik POST so'rovi yuboradi.
Webhook Payload Namunasi
{
"event": "payment.success",
"shop_id": 126,
"payment_id": 982,
"token": "3oKTCZPEOT",
"amount": 50000,
"pay_amount": 50130,
"status": "paid",
"paid_at": "2026-10-27 15:25:33"
}
Tayyor PHP Webhook Qabul Qiluvchi Kodu
Ushbu kodni saytingizdagi webhook_payhamyon.php fayliga joylashtirishingiz mumkin:
<?php
// PayHamyon Webhook qabul qiluvchi
header('Content-Type: application/json');
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (!$data || !isset($data['event']) || $data['event'] !== 'payment.success') {
http_response_code(400);
echo json_encode(['error' => 'Noto\'g\'ri so\'rov']);
exit;
}
$payment_id = $data['payment_id'];
$token = $data['token'];
$amount = $data['amount'];
$status = $data['status'];
if ($status === 'paid') {
// 1. O'z ma'lumotlar bazangizda buyurtmani tasdiqlang
// 2. Foydalanuvchi hisobiga mablag' qo'shing
// Muvaffaqiyatli 200 OK javob qaytaramiz:
http_response_code(200);
echo json_encode(['status' => 'success', 'message' => 'To\'lov qabul qilindi']);
} else {
http_response_code(200);
echo json_encode(['status' => 'ignored']);
}
?>
Xatolik Kodlari va Holatlar
| Kod | Xatolik | Sababi |
|---|---|---|
101 |
Invalid Request Format | JSON strukturasi noto'g'ri yoki yaroqsiz formatda. |
102 |
Authentication Failed | shop_id yoki shop_key noto'g'ri kiritilgan. |
103 |
Shop Not Found | Kassa tizimda topilmadi yoki o'chirilgan. |
104 |
Invalid Amount | To'lov summasi 1000 so'mdan kichik yoki raqam emas. |
105 |
Payment Not Found | Berilgan token yoki payment_id bo'yicha to'lov topilmadi. |
106 |
Payment Expired | To'lov muddati tugagan. |
429 |
Too Many Requests | IP manzil so'rovlar chegarasidan (sekundiga 5, daqiqasiga 60) oshdi. |
Xavfsizlik: Rate Limiting & Ban Qoidalari
Server barqarorligini ta'minlash maqsadida quyidagi cheklovlar avtomatik ishlaydi:
- Sekundiga maksimal 5 ta so'rov;
- Daqiqasiga maksimal 60 ta so'rov;
- Bir daqiqada 120 tadan ko'p so'rov yuborgan IP manzil avtomatik ravishda 15 daqiqaga bloklanadi (HTTP 429).
Namunaviy Kodlar (SDK)
O'z loyihangizga PayHamyon to'lov tizimini 5 daqiqada ulash uchun quyidagi tayyor kod namunalaridan foydalaning. Kerakli tilni tanlab, 1 bosishda nusxalab oling:
1. To'lov Yaratish (POST /api/payment/create)
curl -X POST https://user91.hostx.uz/api/payment/create \
-H "Content-Type: application/json" \
-d '{
"shop_id": 126,
"shop_key": "YOUR_SECRET_SHOP_KEY",
"amount": 50000,
"callback_url": "https://yoursite.uz/webhook.php"
}'
2. To'lov Holatini Tekshirish (POST /api/payment/check)
curl -X POST https://user91.hostx.uz/api/payment/check \
-H "Content-Type: application/json" \
-d '{
"shop_id": 126,
"token": "3oKTCZPEOT"
}'