PayHamyon PayHamyon Docs v2.4 REST API

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.

Tezkor Eslatma: Barcha API so'rovlari application/json formatida qabul qilinadi va JSON ko'rinishida javob qaytaradi.

Bazaviy URL Manzili

Barcha API so'rovlari quyidagi xavfsiz HTTPS domeniga yuborilishi shart:

BASE URL https://user91.hostx.uz

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).
Diqqat: 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: 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

POST JSON Callback
{
  "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:

webhook_payhamyon.php (PHP 7.4+)
<?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"
  }'