Kartaga tushgan pulni saytingiz o'zi taniydi

Mijoz Humo yoki Uzcard kartangizga istalgan ilovadan pul o'tkazadi. Har bir to'lovga noyob summa beriladi, shu summa bilan kelgan kirim bir necha soniyada tasdiqlanadi va saytingizga xabar boradi.

Buyurtma#order-123
Narx50 000 so'm
50 003 so'm

Mijoz aynan shu summani o'tkazadi. Oxirgi raqamlar to'lovni shu buyurtmaga bog'laydi.

HUMO9860 •••• •••• 9012
Kirim tasdiqlandi — webhook yuborildi

Qanday ishlaydi

  1. Saytingiz to'lov yaratadiBuyurtma summasi va ID sini API ga yuborasiz.
  2. Tizim noyob summa va karta beradiMasalan 50 000 o'rniga 50 003 so'm. Bir vaqtda ochiq to'lovlar summasi hech qachon takrorlanmaydi.
  3. Mijoz kartaga o'tkazadiClick, Payme, Uzum, Paynet yoki bank ilovasi orqali — farqi yo'q.
  4. Bank xabari o'qiladiKartangiz ulangan Telegram akkaunt yoki SMS telefoni orqali kirim summasi aniqlanadi.
  5. Saytingizga webhook keladiinvoice.paid — buyurtmani "to'landi" qilasiz.

Tez boshlash

  1. Botga kiring@TolovTekshiruvchiBot da /start — akkaunt va sinov muddati darhol ochiladi.
  2. Karta qo'shing va tasdiqlash manbasini ulang«💳 Kartalar» bo'limida karta, keyin «🤖 Telegram ulash» yoki «📱 SMS qurilma».
  3. Tayyor kodni oling«📘 Hujjat» → «📦 Tayyor kod». Kalitlaringiz yozilgan AvtoTolov.php, pay.php, webhook.php keladi. PHP bo'lmasa — quyidagi Node.js yoki Python misollaridan foydalaning.
  4. Webhook manzilini kiriting«🔗 Webhook» bo'limida https://saytingiz.uz/webhook.php va «🧪 Test yuborish».
  5. Kichik summa bilan sinangTo'lov yarating, aynan pay_amount ni o'tkazing va webhook kelganini tekshiring.

Avtorizatsiya

Har bir so'rovga API kalitni sarlavhada yuboring. Kalit botdagi «🔑 API kalit» bo'limida.

X-Api-Key: ak_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# yoki
Authorization: Bearer ak_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Asosiy manzil: https://avtotasdiq.uz/api/v1. Barcha javoblar JSON, muvaffaqiyatli bo'lsa "ok": true.

Kalitni faqat serveringizda saqlang — brauzer yoki mobil ilova kodiga qo'ymang. Kalit oshkor bo'lsa, botda «♻️ Kalitlarni yangilash» ni bosing.

To'lov yaratish

POSThttps://avtotasdiq.uz/api/v1/invoices
MaydonTuriTavsif
amount majburiybutun sonBuyurtma summasi, so'mda. 1 000 – 50 000 000.
order_id majburiysatrSizdagi buyurtma ID si, 100 belgigacha. Har bir buyurtma uchun noyob.
descriptionsatrTo'lov sahifasida ko'rinadigan izoh.
return_urlURLTo'lovdan keyin mijoz qaytadigan sahifa.
card_typesatrFaqat shu turdagi kartani berish: humo, uzcard, visa, mastercard.
ttlsoniyaAmal qilish muddati, 120 – 3600. Standart 900.
require 'AvtoTolov.php';           // botdagi «📦 Tayyor kod» dan

$at = new AvtoTolov();
$invoice = $at->createInvoice(50000, 'order-123', [
    'description' => 'UC 660',
    'return_url'  => 'https://sayt.uz/success',
]);

header('Location: ' . $invoice['pay_url']);

Javob — 201

{
  "ok": true,
  "invoice": {
    "id": "inv_3f9a1c0d2b7e4a5f6c81",
    "order_id": "order-123",
    "status": "pending",
    "amount": 50000,
    "pay_amount": 50003,
    "card": { "type": "humo", "number": "9860 1234 5678 9012", "holder": "ALISHER K." },
    "description": "UC 660",
    "pay_url": "https://avtotasdiq.uz/pay/?id=inv_3f9a1c0d2b7e4a5f6c81",
    "return_url": "https://sayt.uz/success",
    "late": false,
    "created_at": "2026-10-09T12:00:00+05:00",
    "expires_at": "2026-10-09T12:15:00+05:00",
    "paid_at": null
  }
}

Shu order_id bilan ochiq to'lov bo'lsa, yangisi yaratilmaydi — o'sha qaytariladi. Shuning uchun so'rovni xavfsiz takrorlash mumkin.

Holatni olish

GEThttps://avtotasdiq.uz/api/v1/invoices/{id}
GEThttps://avtotasdiq.uz/api/v1/invoices?order_id={order_id}

Javob to'lov yaratishdagi kabi invoice obyekti. Webhook kelmay qolsa, shu bilan tekshirib turing.

Bekor qilish

POSThttps://avtotasdiq.uz/api/v1/invoices/{id}/cancel

Faqat pending holatdagi to'lov bekor qilinadi. Uning noyob summasi boshqa to'lovlar uchun bo'shaydi.

Do'kon holati

GEThttps://avtotasdiq.uz/api/v1/me
{
  "ok": true,
  "shop": {
    "id": 12,
    "name": "Mening do'konim",
    "webhook_url": "https://sayt.uz/webhook.php",
    "subscription_active": true,
    "subscription_until": "2026-11-09T12:00:00+05:00"
  }
}

Holatlar

statusMa'nosi
pendingTo'lov kutilmoqda.
paidPul tushdi va tasdiqlandi. Muddati o'tgandan keyin 10 daqiqa ichida kelsa ham tasdiqlanadi va "late": true bo'ladi.
expiredMuddat ichida to'lov kelmadi.
cancelledSiz bekor qildingiz.

To'lov sahifasi

Eng oson yo'l — mijozni pay_url ga yo'naltirish. Sahifada karta raqami, aniq summa, nusxalash tugmalari va taymer bor; pul tushishi bilan sahifa o'zi yangilanadi va return_url ga qaytaradi.

O'z dizayningizda ko'rsatmoqchi bo'lsangiz, card.number va pay_amount ni chiqaring va mijozga aynan shu summani o'tkazish kerakligini aniq yozing.

Webhook

To'lov tasdiqlanganda (invoice.paid) va muddati o'tganda (invoice.expired) botda kiritgan manzilingizga POST so'rov keladi.

POST https://sayt.uz/webhook.php
Content-Type: application/json
X-Event: invoice.paid
X-Signature: 5d41402abc4b2a76b9719d911017c592...

{
  "event": "invoice.paid",
  "invoice": { "id": "inv_...", "order_id": "order-123", "status": "paid",
               "amount": 50000, "pay_amount": 50003, "paid_at": "2026-10-09T12:03:41+05:00", ... },
  "sent_at": "2026-10-09T12:03:42+05:00"
}

Javob sifatida 2xx qaytaring. Aks holda so'rov qayta yuboriladi: 1, 2, 5, 10, 30 daqiqa, 1, 3, 6 soatdan keyin. Shu sababli bir xil webhook bir necha marta kelishi mumkin — buyurtma allaqachon to'langan bo'lsa, qayta ishlamang.

Imzoni tekshirish

X-Signature = so'rov tanasining HMAC-SHA256 imzosi (hex), kalit sifatida botdagi webhook secret ishlatiladi. Imzosi mos kelmagan so'rovni rad eting — aks holda istalgan odam saytingizga "to'landi" deb yozishi mumkin.

require 'AvtoTolov.php';

$data = (new AvtoTolov())->readWebhook();   // imzoni o'zi tekshiradi
if (!$data) { http_response_code(401); exit; }

if ($data['event'] === 'invoice.paid') {
    $orderId = $data['invoice']['order_id'];
    // buyurtma allaqachon to'langan bo'lsa — o'tkazib yuboring
    // aks holda "to'landi" qiling
}
echo 'ok';

Xato kodlari

{ "ok": false, "error": { "code": "no_card", "message": "Faol karta yo'q..." } }
HTTPcodeNima qilish kerak
401unauthorizedAPI kalitni tekshiring.
402subscription_expiredBotda «💎 Obuna» orqali uzaytiring.
403blockedAdmin bilan bog'laning.
404not_foundTo'lov ID si yoki manzil noto'g'ri.
409no_cardBotda faol karta qo'shing.
409order_existsBu order_id allaqachon to'langan yoki yopilgan — yangi ID bering.
422bad_amount, bad_order_id, bad_card_typeMaydon qiymatini tuzating.
429busyShu summa atrofida ochiq to'lovlar juda ko'p. Bir ozdan keyin qayta urining.

Muhim qoidalar

  • Summani har doim o'z bazangizdagi buyurtmadan oling, foydalanuvchi yuborgan qiymatdan emas.
  • Buyurtmani faqat imzosi tekshirilgan webhook yoki API dagi status: paid asosida yoping. To'lov sahifasidan qaytish (return_url) to'lov qilinganini bildirmaydi.
  • Webhook da invoice.amount buyurtma summasiga tengligini tekshiring.
  • Mijoz boshqa summa o'tkazsa, to'lov avtomatik tasdiqlanmaydi — botga "mos kelmagan kirim" xabari keladi, uni qo'lda hal qilasiz.