Dasturchilar uchun qoʻllanma: Paynet bilan integratsiya

Oʻzbekiston toʻlov ekotizimi · Developer Portal
v3.4 · Iyun 2026

Dasturchilar uchun qo'llanma: Paynet bilan integratsiya (Developer Portal)

Paynet dasturchilar portaliga xush kelibsiz! Bizning platformamiz xizmat ko'rsatuvchilar va merchantlar agregatori bo'lib, to'lovlarni qabul qilishning qulay usullarini taqdim etadi.

Biz ulanishning 3 ta variantini taklif qilamiz. Mos keluvchi variantni aniqlash uchun quyidagi diagrammadan foydalaning.

1. Integratsiya turini tanlash

Qanday tanlash kerak? (Decision Tree)

flowchart TD START["🤔 To'lovlarni qanday\nqabul qilmoqchisiz?"] --> Q1{"Sizda o'z\nAPI / IT-jamoangiz bormi?"} Q1 -->|"❌ Yo'q"| UB["✅ Universal billing\n— Dasturlashsiz —\nPaynet hammasini o'zi qiladi"] Q1 -->|"✅ Ha"| Q2{"API'ni Paynet standartiga\nmuvofiq amalga oshirishga tayyormisiz?"} Q2 -->|"✅ Ha"| UWS["⚙️ UWS Konnektori\n— O'rtacha qiyinlikda —\nSiz JSON-RPC API'ni amalga oshirasiz"] Q2 -->|"❌ Yo'q, o'zimizning API'miz bor"| CUSTOM["🔧 Maxsus konnektor\n— Paynet sizga moslashadi —\nBiznes-keys talab qilinadi"] style UB fill:#d1fae5,stroke:#1EB863,stroke-width:3px,color:#082E12 style UWS fill:#e0e7ff,stroke:#6366f1,stroke-width:2px,color:#1e1b4b style CUSTOM fill:#fef3c7,stroke:#f59e0b,stroke-width:2px,color:#78350f

Modellarni solishtirish

✅ Universal billing ⚙️ UWS Konnektori 🔧 Maxsus konnektor
Dasturlash ❌ Talab qilinmaydi ✅ Kerak (JSON-RPC API) ❌ Talab qilinmaydi (Paynet qiladi)
Tavsif Paynet ma'lumotlarni o'zi yig'adi, to'lovni qabul qiladi va merchantni Telegram-bot yoki Foyda orqali xabardor qiladi. Siz API'ni Paynet standartiga muvofiq amalga oshirasiz (GetInformation, PerformTransaction va boshqalar). Siz o'zingizning mavjud API'ingizni taqdim etasiz, Paynet integratsiyani o'zi ishlab chiqadi.
Kimlarga mos keladi IT-jamoasi va o'z API'si yo'q merchantlarga. IT-infratuzilmasiga ega bo'lgan, standartlashtirilgan API'ni amalga oshirishga tayyor kompaniyalarga. Mavjud barqaror API'ga ega yirik korporativ mijozlarga.
Avtomatlashtirish Qo'lda (xabarnomalar) To'liq (API-to-API) To'liq (API-to-API)

Har bir model uchun sizdan nima talab qilinadi

✅ Universal billing — hech qanday dasturlashsiz:

⚙️ UWS Konnektori — API'ni amalga oshirish kerak:

[!NOTE] serviceId nima? serviceId — bu xizmatingizning statik ichki identifikatori bo'lib, uni o'zingiz o'ylab topasiz va "Texnik hamkorlik tartibi" hujjatida bizga taqdim etasiz. U mijozning telefon raqami yoki shaxsiy hisob raqami EMAS (bu ma'lumotlar fields massivida uzatiladi). Bitta hamkor bir nechta xizmatlarni taqdim etishi mumkin, va serviceId Paynet'ga mijoz aynan qaysi xizmat uchun to'lov qilayotganini tushunishga yordam beradi.

⚠️ Bu sizning variantingiz EMAS, agar...

Model Mos kelmaydi, agar...
Universal billing Sizga mijoz balansiga avtomatik mablag' o'tkazish, tovarni avtomatik jo'natish yoki sizning ERP/CRM bilan integratsiya kerak bo'lsa. Bunday holda UWS ni tanlang.
UWS Konnektori Sizda API'ni joylashtirish uchun IT-jamoa yoki server bo'lmasa. Bunday holda Universal billing ni tanlang.
Maxsus konnektor Siz barqaror API va biznes-hajmlarga ega bo'lmagan startap yoki kichik biznes bo'lsangiz. Bunday holda Universal billing yoki UWS ni tanlang.

2. Arxitektura va jarayonlar (Sequence Diagrams)

[!IMPORTANT] Arxitektura paradigmasi (Bir yo'nalishlilik) UWS integratsiyasi Push/Pull modeli bo'yicha ishlaydi, bu yerda Paynet har doim mijoz (client), sizning billingiz esa server sifatida ishtirok etadi. Siz Paynet API tomoniga hech qanday so'rov yubormaysiz. Barcha o'zaro harakatlar (tekshirish va bekor qilishlar ham) faqat Paynet serverlari tomonidan sizning Endpoint'ingizga yo'naltirilgan holda boshlanadi.

UWS bo'yicha integratsiya (Universal konnektor)

Muvaffaqiyatli to'lovning asosiy ssenariysi:

sequenceDiagram autonumber actor Mijoz participant Paynet as Paynet (DAK) participant Hamkor as Hamkor Billingi (UWS) Mijoz->>Paynet: Ma'lumotlarni kiritish (Abonent ID, summa) Paynet->>Hamkor: POST /uws (method: GetInformation) Hamkor-->>Paynet: Abonent ma'lumotlari (F.I.Sh., Balans) Paynet-->>Mijoz: Tasdiqlash ekrani Mijoz->>Paynet: To'lovni tasdiqlash Paynet->>Hamkor: POST /uws (method: PerformTransaction) Hamkor-->>Paynet: Tranzaksiya muvaffaqiyatli (providerTrnId) Paynet-->>Mijoz: To'lov cheki

Ssenariy 1: Network Timeout (Tarmoq taymauti):

sequenceDiagram autonumber participant Paynet as Paynet (DAK) participant Hamkor as Hamkor Billingi (UWS) Paynet->>Hamkor: POST /uws (method: PerformTransaction) Note over Paynet, Hamkor: Tarmoq uzilishi yoki taymaut > 500ms Paynet--xHamkor: (Javob olinmadi) Paynet->>Hamkor: POST /uws (method: CheckTransaction) Hamkor-->>Paynet: transactionState: 1 (Muvaffaqiyatli) Note over Paynet: Paynet statusni sinxronlashtiradi

Ssenariy 2: Tranzaksiyani bekor qilish (CancelTransaction):

sequenceDiagram autonumber participant Paynet as Paynet (DAK) participant Hamkor as Hamkor Billingi (UWS) Paynet->>Hamkor: POST /uws (method: CancelTransaction) Note over Hamkor: Bekor qilish qarori — hamkorning biznes-mantig'i alt Hamkor qaytarishni amalga oshiradi Hamkor-->>Paynet: transactionState: 2 (Bekor qilingan) else Mijoz mablag'ni allaqachon sarflagan Hamkor-->>Paynet: JSON-RPC 2.0 xatosi (77: Bekor qilish uchun mablag' yetarli emas) else Hisobot davri yopilgan (yopuvchi hujjatlar shakllantirilgan) Hamkor-->>Paynet: JSON-RPC 2.0 xatosi (306: Bekor qilish vaqti tugagan) else Tranzaksiya topilmadi Hamkor-->>Paynet: JSON-RPC 2.0 xatosi (203: Tranzaksiya topilmadi) end

Universal billing

Paynet barcha mantiqni mustaqil ravishda qayta ishlaydi va faqat merchantni xabardor qiladi.

sequenceDiagram autonumber actor Mijoz participant Paynet as Paynet (DAK / Foyda) participant Merchant as Telegram-bot / Shaxsiy kabinet Mijoz->>Paynet: To'lov shakliga ma'lumotlarni kiritadi (sozlanuvchi maydonlar) Paynet-->>Mijoz: Ma'lumotlar formatini tekshirish Mijoz->>Paynet: Xizmat uchun to'lov Paynet->>Paynet: To'lovni tizimda qayd etish Paynet->>Merchant: Muvaffaqiyatli to'lov haqida xabarnoma (Foyda / Telegram) Paynet-->>Mijoz: Chek taqdim etish

3. Ma'lumotlarga qo'yiladigan talablar, Xavfsizlik va Idempotentlik

3.1 Ma'lumotlar formatlari va Valyuta

[!WARNING] Ushbu bandlardagi xatolar — test bosqichidagi rad etishlarning eng keng tarqalgan sababidir.

[!CAUTION] Sana formatidan yagona istisno: CheckTransaction so'rovidagi timestamp parametri EEE MMM dd HH:mm:ss z yyyy formatida keladi, masalan Mon Jun 16 06:12:41 UZT 2021. Bu format tarixan o'rnatilgan (ko'plab yetkazib beruvchilar allaqachon u bo'yicha ishlamoqda) va o'zgartirilmaydi — sizning parseringiz uni qo'llab-quvvatlashi shart. Boshqa barcha sanalar, jumladan CancelTransaction dagi timestamp va serveringizning barcha javoblari, standart YYYY-MM-dd HH:mm:ss formatidan foydalanadi.

3.2 Avtorizatsiya va himoya

3.3 Idempotentlik va Taymautlar

Moliyaviy tranzaksiyalar qat'iy izchillikni talab qiladi:


4. Operatsion faoliyat: Solishtirish va SLA


5. UWS uchun OpenAPI spetsifikatsiyasi

Spetsifikatsiya OpenAPI (UWS) in Uzbek (Latin).yaml faylida mavjud. U o'z ichiga barcha JSON-RPC 2.0 metodlarining tavsifini oladi: GetInformation, PerformTransaction, CheckTransaction, CancelTransaction, GetStatement, ChangePassword (majburiy emas), shuningdek qat'iy JSON-sxemalar, xato kodlari va formatlarni o'z ichiga oladi.


6. Onbording va testlash bo'yicha qo'llanma (UWS)

Universal konnektor (UWS) orqali to'lovlarni qabul qilishni boshlash uchun quyidagi qadamlarni bajaring:

1-qadam: Infratuzilmani tayyorlash

2-qadam: Arizani to'ldirish (Anketa)

Paynet menejeriga quyidagi ma'lumotlarni taqdim eting:

3-qadam: Testlash va Test-keyslar

Ishga tushirishdan oldin standart test-keyslarni bajarish kerak:

  1. Abonentni tekshirish (GetInformation): Abonentni muvaffaqiyatli izlashni emulyatsiya qilish va 302 (Mijoz topilmadi) xatosini emulyatsiya qilish.
  2. To'lovni amalga oshirish (PerformTransaction): Abonent balansini muvaffaqiyatli to'ldirish.
  3. Cheklovlar (PerformTransaction): 413 (Noto'g'ri summa) yoki 101 (Kvota tugagan) xatolarini emulyatsiya qilish.
  4. Bekor qilish (CancelTransaction): Test to'lovini amalga oshirish va uni to'liq bekor qilish. Mablag'larni qaytarish (qisman qaytarishlar texnik jihatdan qo'llab-quvvatlanmaydi). 77 (mijoz mablag'ni allaqachon sarflagan), 306 (hisobot davri yopilgan) va 203 (tranzaksiya topilmadi) xatolarini emulyatsiya qilish.
  5. Statusni tekshirish (CheckTransaction): Mavjud tranzaksiya (state 1) va mavjud bo'lmagan (state 3, muvaffaqiyatli javob — xato emas) statusini tekshirish. EEE MMM dd HH:mm:ss z yyyy formatidagi timestamp parsingini albatta tekshiring.

4-qadam: Production'ga tushirish (Go-Live)

Barcha testlardan muvaffaqiyatli o'tgandan so'ng, texnik tayyorgarlik dalolatnomasi imzolanadi va sizning xizmatlaringiz millionlab Paynet foydalanuvchilari uchun to'lashga ochiq bo'ladi!


7. Paynet xato kodlari ma'lumotnomasi (Paynet Error Codes)

Biznes-xatolik yuzaga kelganda, hamkor billingi o'zida code va message bo'lgan error obyekti bilan JSON-RPC javobini qaytaradi.

[!IMPORTANT] Ushbu bo'limdagi barcha kodlar (201, 412, 413 va h.k.) — bu JSON-RPC darajasidagi Paynet xato kodlari, HTTP statuslari emas. Ularni ko'pincha HTTP kodlari bilan adashtirishadi: aslida ular javob tanasidagi error obyekti ichida qaytariladi, javobning HTTP statusi esa 200 OK bo'lib qoladi. Yagona istisno — autentifikatsiya: noto'g'ri login/parolda HTTP 401 Unauthorized qaytariladi (quyidagi 412 xatosi haqidagi eslatmaga qarang).

Biznes xatolar xaritasi (Business Error Mapping) jadvali

Sizning biznes-keysingizga qarab qanday xato qaytarish kerakligini tushunish uchun ushbu jadvaldan foydalaning:

Biznes holati Tavsiya etilgan Paynet xato kodi
Mijoz / ma'lumotlarni kiritish bilan bog'liq muammolar
Mijoz noto'g'ri qurilma raqami / shaxsiy hisob raqamini kiritdi 301, 302, 304 (Raqam/Mijoz/Tovar topilmadi)
Foydalanuvchi hamyoni identifikatsiya qilinmagan 113
Xizmatlar bilan bog'liq muammolar (serviceId)
Mavjud bo'lmagan serviceId uzatildi 305 (Xizmat topilmadi)
Xizmat sizning tomoningizda vaqtincha ishlamayapti 100 (Xizmat vaqtincha qo'llab-quvvatlanmaydi)
Limitlar va summalar
Summa operatsiyaning maksimal limitidan oshib ketdi 415
Mijozning kunlik limiti oshib ketdi 141
Mijozning oylik limiti oshib ketdi 140
Mijoz noto'g'ri summa uzatdi (tarifga mos kelmaydi) 413
Biznes-cheklovlar
Mijoz sizning qora ro'yxatingizda / to'lovga taqiq qo'yilgan 501 (Tranzaksiyalar taqiqlangan)
Bekor qilish va tranzaksiya statuslari
Paynet allaqachon bekor qilingan tranzaksiyani bekor qilishga urinmoqda 202 (Tranzaksiya allaqachon bekor qilingan)
Paynet tranzaksiyani bekor qilmoqda, lekin mijoz mablag'ni allaqachon sarflagan 77 (Bekor qilish uchun mablag' yetarli emas)
Siz qaytarishni rad etasiz: yopuvchi hujjatlar shakllantirilgan, hisobot davri yopilgan (masalan, yanvarda to'lov — martda qaytarish) 306 (Ruxsat etilgan bekor qilish vaqti tugagan)
Paynet mavjud bo'lmagan tranzaksiyani bekor qilmoqda 203 (Tranzaksiya topilmadi)
Paynet mavjud bo'lmagan tranzaksiya statusini so'ramoqda (CheckTransaction) Xato emas! transactionState: 3 bilan result qaytaring
Paynet tranzaksiyaning dublikatini yubormoqda (PerformTransaction) 201 (Tranzaksiya allaqachon mavjud) — keyin Paynet CheckTransaction ni chaqiradi
Boshqalar
Paynet oq ro'yxatidan tashqari IP-manzildan so'rov 601 (Kirish taqiqlangan) — firewall darajasida bloklash afzalroq
Noma'lum/qo'llab-quvvatlanmaydigan buyruq qiymati 603 (Buyruq kodi noto'g'ri)
Xizmatning majburiy parametri uzatilmagan 411; aniq parametr xatosi — 401410 (parametrlar raqamlanishi sizning xizmatingiz tomonidan belgilanadi va anketada qayd etiladi)
Sana/vaqt tanib bo'lmaydigan formatda 414

[!NOTE] 412 xatosi haqida (Noto'g'ri login yoki parol): autentifikatsiya faqat HTTP darajasida bajariladi — noto'g'ri hisob ma'lumotlarida JSON-RPC xatosi emas, HTTP 401 Unauthorized qaytaring. 412 kodi — protokolning dastlabki versiyalaridan qolgan legacy, yangi integratsiyalarda ishlatilmaydi.

Paynet xato kodlarining to'liq ma'lumotnomasi

Paynet xato kodi Tavsif
0 Muvaffaqiyatli o'tkazildi
77 To'lovni bekor qilish uchun mijoz hisobida mablag' yetarli emas
100 Xizmat vaqtincha qo'llab-quvvatlanmaydi
101 Kvota tugagan
102 Tizim xatosi
103 Noma'lum xato
113 Hamyon identifikatsiya qilinmagan
140 Ushbu akkaunt uchun oylik limit oshib ketdi
141 Ushbu akkaunt uchun kunlik limit oshib ketdi
201 Tranzaksiya allaqachon mavjud
202 Tranzaksiya allaqachon bekor qilingan
203 Tranzaksiya topilmadi
301 Raqam mavjud emas
302 Mijoz topilmadi
304 Tovar topilmadi
305 Xizmat topilmadi
306 Tranzaksiyani bekor qilish uchun ruxsat etilgan vaqt tugagan (hisobot davri yopilgan — hamkor qaytarishni rad etadi)
401 - 410 Parametrni validatsiya qilish xatosi 1 - 10
411 Bitta yoki bir nechta majburiy parametrlar o'rnatilmagan
412 Noto'g'ri login yoki parol
413 Noto'g'ri summa
414 Sana va vaqt formati noto'g'ri
415 Summa maksimal limitdan oshib ketdi
501 Ushbu to'lovchi uchun tranzaksiyalar taqiqlangan
601 Kirish taqiqlangan
603 Buyruq kodi noto'g'ri

JSON-RPC protokoli xatoliklari:

Xato kodi Tavsif
-32300 So'rov metodi POST bo'lmagan holatda xatolik yuzaga keladi
-32700 JSON parsing xatosi (javobda "id": null ruxsat etiladi)
-32600 RPC-so'rovda majburiy maydonlar yo'q yoki noto'g'ri turda
-32601 So'ralgan metod topilmadi
-32602 Parametrlarning majburiy maydonlari yo'q (protokol darajasi; biznes-analogi — 411)
-32603 Tizim (ichki xatolik)

[!NOTE] 0 kodi («Muvaffaqiyatli o'tkazildi») — status qiymati, u hech qachon error obyekti ichida qaytarilmaydi.


8. Versiyalar tarixi

Sana Versiya O'zgarishlar
01.04.2022 1.0 UWS spetsifikatsiyasining dastlabki versiyasi
20.09.2022 1.1 Yangilangan versiya
28.11.2023 3.3 CheckTransaction: vaqt parametri — timestamp
07.05.2025 3.4 CheckTransaction: timestamp formati aniqlashtirildi (EEE MMM dd HH:mm:ss z yyyy). Joriy versiya

Portal va OpenAPI spetsifikatsiyasi 2025-yil 07-maydagi UWS v3.4 ga Paynet core-jamoasining aniqlashtirishlari bilan mos keladi: 306 xato kodi qo'shildi (bekor qilish uchun ruxsat etilgan vaqt tugagan), TLS v1.3 talabi belgilandi, GetInformation javobidagi status maydoni majburiy deb tasdiqlandi.