Tashqi tizimdan onlayn buyurtma
Vazifa: onlayn do’kon yoki marketpleys buyurtmani o’zida rasmiylashtiradi va uni BILLZ’da aniq bir do’konning sotuvi sifatida — xaridor, chegirma va to’lov bilan o’tkazishi lozim.
Atamalardagi farqlar
“Atamalardagi farqlar” bo'limiBILLZ’da «buyurtma» so’zi band.
| Vazifa ta’rifi | Bu BILLZ’da qanday ataladi | Metodlar |
|---|---|---|
| Xaridor saytda mahsulotga buyurtma berdi | Sotuv (Order, sotuv cheki) |
/v2/order, /v2/order-product, /v2/order-payment |
| Mahsulot yetkazib beruvchidan buyurtma qilingan | Yetkazib beruvchiga buyurtma (SupplierOrder) |
/v2/supplier-order, /v2/supplier-order/add-item |
Onlayn buyurtma uchun birinchi qator kerak.
Ssenariy sxemasi
“Ssenariy sxemasi” bo'limiGET /v1/shop, /v1/company-payment-type ma'lumotnomalar, bir marta │GET /v1/client?phone_number=… mijozni topishPOST /v1/client topilmasa, yaratish │POST /v2/order {shop_id, cashbox_id} sotuv yaratish ──> order_idPOST /v2/order-product/:order_id tovar qo'shish (birma-bir)PUT /v2/order-customer-new/:order_id mijozni biriktirishPOST /v2/order-manual-discount/:order_id chegirmaPOST /v1/recalculate-order-bill/:order_id summani solishtirishPOST /v2/order-payment/:order_id sotuvni yakunlash │GET /v2/order/:id o'tkazilgan sotuv tafsilotlariSotuvni yaratish va chek tarkibini o’zgartiruvchi metodlar — asinxron:
Billz-Response-Channel: HTTP sarlavhasi talab etiladi, aks holda natija o’rniga hodisa
identifikatori keladi.
Qayta hisoblash va to’lov — sinxron, ularga sarlavha kerak emas.
1. Mijoz
“1. Mijoz” bo'limiQidiruv
“Qidiruv” bo'limicurl -X GET 'https://api-admin.billz.ai/v1/client?phone_number=%2B998900000000&limit=10&page=1' \ -H 'Authorization: Bearer TOKEN'Parametrlar: phone_number, search, chat_id, limit, page. Javob — {count, clients[]}.
Topilgan ID bo’yicha batafsil kartochka — GET /v1/customer/:id (unda clients[] elementiga
qaraganda boshqa, kengroq maydonlar to’plami mavjud).
search ism, familiya, otasining ismi, telefon raqamlari, external_id, chat_id, tug’ilgan sana,
sodiqlik kartasi kodi va nomi bo’yicha ostsatrni qidiradi. Bo’sh joy orqali ajratilgan bir necha
so’z — «VA».
Maxsus belgilar olib tashlanadi: +998901234567 va 998901234567 teng qiymatli.
phone_number ostsatr bo’yicha, chat_id esa aniq moslik bo’yicha qidiradi.
Yaratish
“Yaratish” bo'limicurl -X POST 'https://api-admin.billz.ai/v1/client' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "first_name": "Ivan", "last_name": "Petrov", "phone_number": "+998900000000", "gender": 1, "date_of_birth": "1990-05-14" }'Javob — { "id": "..." }: tashqi tizimda saqlanadigan mijoz UUID’si.
gender: 1 — erkak, 2 — ayol, boshqa qiymatlar bo’sh qilib yoziladi.
2. Kerakli do’konda sotuv yaratish
“2. Kerakli do’konda sotuv yaratish” bo'limiSotuv POST /v2/order asinxron metodi bilan yaratiladi. Javob kanali Billz-Response-Channel: HTTP
sarlavhasi yoki xuddi shu nomdagi query-parametr orqali belgilanadi — quyidagi misoldagidek.
curl -X POST 'https://api-admin.billz.ai/v2/order?Billz-Response-Channel=HTTP' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "shop_id": "c1056fcc-539b-47ea-8bc4-d9e337c433f0", "cashbox_id": "9b4a7f8c-a8ef-4870-8a1b-89869fdd4141" }'{ "session_id": "fd8d352a-6299-4489-8a6e-a5c037f3f65b", "status_code": 200, "id": "38c3920a-ffdd-4233-a823-8af3266f5f4f", "error": { "code": "", "message": "" }, "data": { "id": "38c3920a-ffdd-4233-a823-8af3266f5f4f", "order_number": "5632631379", "order_type": "SALE" }, "correlation_id": "3674f28e-7b96-4683-87c3-80892698f421"}Sotuv UUID’si — id maydoni (data.id dagi qiymat bilan bir xil), u barcha keyingi qadamlarga
qo’yiladi. order_number — kassir interfeysda ko’radigan qisqa sotuv raqami.
Do’kon shop_id maydoni, kassa esa cashbox_id maydoni orqali tanlanadi. Do’konlar ro’yxati —
GET /v1/shop.
3. Mahsulotlarni qo’shish
“3. Mahsulotlarni qo’shish” bo'limiHar bir so’rovga bitta tovar nomi.
curl -X POST 'https://api-admin.billz.ai/v2/order-product/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -H 'Billz-Response-Channel: HTTP' \ -d '{ "product_id": "2ce40c63-4527-4898-a975-7c30c255fd50", "sold_measurement_value": 2, "used_wholesale_price": false }'Bu mutlaq miqdorli upsert: xuddi shu product_id bilan takroriy chaqiruv miqdorni almashtiradi.
sold_measurement_value: 0 chekdan pozitsiyani olib tashlaydi.
4. Mijozni biriktirish
“4. Mijozni biriktirish” bo'limicurl -X PUT 'https://api-admin.billz.ai/v2/order-customer-new/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -H 'Billz-Response-Channel: HTTP' \ -d '{ "customer_id": "ID_MIJOZNI", "check_auth_code": false }'Javob konvertda keladi: obyekt data maydonida joylashgan.
5. Chegirma
“5. Chegirma” bo'limicurl -X POST 'https://api-admin.billz.ai/v2/order-manual-discount/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -H 'Billz-Response-Channel: HTTP' \ -d '{ "discount_unit": "PERCENTAGE", "discount_value": 10 }'discount_unit — PERCENTAGE yoki CURRENCY. Ixtiyoriy product_id bitta pozitsiyaga chegirma
qo’llaydi; usiz — butun savatga.
Qo’lda kiritilgan chegirma savatni qayta hisoblashni ishga tushiradi: to’lov chegirmaga asinxron javob olingandan so’ng chaqiriladi.
6. Summani solishtirish
“6. Summani solishtirish” bo'limicurl -X POST 'https://api-admin.billz.ai/v1/recalculate-order-bill/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN'Metod sinxron bo’lib, pozitsiyalar, chegirmalar va yakuniy summa ko’rsatilgan dolzarb chekni qaytaradi.
Kechiktirilgan sotuv uchun metod rad javobini beradi.
7. Sotuvni yakunlash
“7. Sotuvni yakunlash” bo'limicurl -X POST 'https://api-admin.billz.ai/v2/order-payment/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "payments": [ { "company_payment_type_id": "c6e84d9b-...", "paid_amount": 900000, "returned_amount": 0 } ], "comment": "Saytdan №12345 buyurtma", "without_cashback": false }'| Maydon | Mazmuni |
|---|---|
payments[] |
to’lovlar ro’yxati; bir nechta element — turli usullar bilan to’lash |
payments[].company_payment_type_id |
GET /v1/company-payment-type dan to’lov turi |
payments[].paid_amount |
kiritilgan summa |
payments[].returned_amount |
qaytim |
payments[].gift_card_id |
butun son; sovg’a kartasi bilan to’lash uchun kerak |
with_cashback |
summa (bayroq emas), mijoz bonuslari hisobidan qoplanadi |
without_cashback |
true — ushbu sotuv uchun keshbek hisoblanmasin |
sold_at |
YYYY-MM-DD HH:MM:SS formatidagi sotuv sanasi va vaqti — o’tgan sana bilan o’tkazish uchun |
comment |
tashqi tizimning buyurtma raqami; bo’sh qator oldingisini o’chirib yubormaydi |
skip_ofd |
to’lovdan oldin OFD tekshiruvlarini olib tashlaydi, quyida qarang |
Metod sinxron. Javob tariqasida {"order_type": "SALE", "should_print_cheque": true} statusli 200
keladi.
To’lov xatolari kodlari
“To’lov xatolari kodlari” bo'limiXato HTTP 400 bilan keladi, sabab raqami esa data ichida joylashgan:
{ "status_code": 400, "error": { "code": "", "message": "status: 400 - errors: Bad request - causes: ..." }, "data": { "error_code": 20084, "message": "payment is possible only for calculated order" }}Sababi data.error_code bo’yicha aniqlanadi: ushbu javobdagi error.code maydoni bo’sh.
| Kod | Xabar | Nimani anglatadi |
|---|---|---|
20009 |
cashbox shop id and order shop id are different | foydalanuvchining joriy kassasi boshqa do’konga tegishli |
20010 |
user’s current cashbox id is empty | sotuv do’konida ochiq kassa yo’q |
20011 |
cashbox has not enough money | kassada qaytarish uchun pul yetishmayapti |
20015 |
order does not have items | chekda pozitsiyalar yo’q |
20016 |
not enough product | qoldiq yetishmayapti; mavjud miqdor — data.data da |
20017 |
order is deleted | sotuv o’chirildi |
20020 |
wrong payment amount | to’lovlar summasi mos kelmayapti; data da — total_price va claimed_amount |
20047 |
not enough funds in customer balance | with_cashback uchun bonuslar yetishmayapti |
20063 |
order not sent to epos | chek OFD ga yuborilmadi (skip_ofd bayrog’i bilan olib tashlanadi) |
20082 |
cannot make payment with closed cashbox | kassa yopiq |
20084 |
payment is possible only for calculated order | savat qayta hisoblanmadi, 3-qadamga qarang |
claimed_amount — barcha elementlar bo’yicha paid_amount summasi minus returned_amount, plyus
with_cashback, plyus qarz; chek yakuni bilan solishtiriladi.
8. Sotuv ID si va tafsilotlari
“8. Sotuv ID si va tafsilotlari” bo'limiID 2-qadamda qaytariladi. O’tkazilgan sotuvning to’liq tafsilotlari — pozitsiyalar, to’lovlar, chegirmalar, mijoz:
curl -X GET 'https://api-admin.billz.ai/v2/order/SOTUV_ID' \ -H 'Authorization: Bearer TOKEN'Ko’p beriladigan aniqlashtiruvchi savollarga javoblar
“Ko’p beriladigan aniqlashtiruvchi savollarga javoblar” bo'limiDo’kon qaysi maydon orqali tanlanadi
“Do’kon qaysi maydon orqali tanlanadi” bo'limishop_id tanasidagi POST /v2/order maydoni orqali; kassa ham o’sha yerda belgilanadi —
cashbox_id.
Do’konlar ro’yxati — GET /v1/shop.
Qoldiq yetishmaganda sotuvni rasmiylashtirish mumkinmi
“Qoldiq yetishmaganda sotuvni rasmiylashtirish mumkinmi” bo'limiBu mahsulotning «manfiy qoldiqqa ruxsat berish» sozlamasi orqali boshqariladi. Agar u o’chirilgan bo’lsa, qoldiqdan ortiqcha mahsulot qo’shib bo’lmaydi; agar yoqilgan bo’lsa — qoldiq minusga kiradi.
Xato — HTTP 400, data.error_code = 20016, data.message = not enough product; mavjud
miqdor data.data da keladi.
Qoldiqni dastlabki tekshirish — kerakli GET /v2/products bo’yicha
shop_measurement_values[].active_measurement_value → shop_id. Tekshiruv va to’lov o’rtasida
mahsulot oflayn sotilishi mumkin: to’lovdagi rad etish ham qayta ishlanadi.
Yuk xati qanday ko’rinishda beriladi
“Yuk xati qanday ko’rinishda beriladi” bo'limiOmmaviy API sotuv bo’yicha tayyor yuk xatini yoki bosma shaklni bermaydi.
| Nima kerak | Nima bilan yopiladi |
|---|---|
| O’z bosma shakli | GET /v2/order/:id — pozitsiyalar, narxlar, chegirmalar, to’lovlar, do’kon, mijoz; tashqi tizim tomonida sahifalash |
| Buxgalteriya uchun yuklash | hisobotlar /v1/general-report-table, /v1/transaction-report-table |
O’zida qaysi identifikatorni saqlash kerak
“O’zida qaysi identifikatorni saqlash kerak” bo'limiSotuv UUID’si (2-qadam javob konvertidan id). order_number qo’llab-quvvatlash xizmati bilan
yozishish uchun mo’ljallangan.
- «Tashqi tizim buyurtma raqami → BILLZ sotuv UUID’si» aloqasi tashqi tizim tomonida saqlanadi; UUID 2-qadamdan so’ng darhol yozib olinadi, mahsulotlar qo’shilishidan oldin.
- Sotuvni yaratishdan oldin ushbu buyurtma bo’yicha yozuv bor-yo’qligi tekshiriladi.
- Tashqi tizimning buyurtma raqami to’lov vaqtida
commentga uzatiladi: dublikat BILLZ interfeysida va hisobotlarda ko’rinadi.
Ruxsatlar
“Ruxsatlar” bo'limi403 tahlili — muammolarni hal qilishda, kalit uchun ochiq
bo’lganlarning to’liq ro’yxati esa ma’lumotnomada keltirilgan.
Kalitni chiqarish metodlarning asosiy to’plamini ochadi; nozik metodlar kalit ruxsatlarini sozlash orqali alohida ochiladi.
Metodlar xulosasi
“Metodlar xulosasi” bo'limi| Qadam | Metod | Tur |
|---|---|---|
| Do’konlar ro’yxati | GET /v1/shop |
sync |
| To’lov turlari | GET /v1/company-payment-type |
sync |
| Mijozni qidirish | GET /v1/client |
sync |
| Mijoz kartasi | GET /v1/customer/:id |
sync |
| Mijoz yaratish | POST /v1/client |
sync |
| Mijozni o’zgartirish | PUT /v1/client/:id |
sync |
| Sotuv yaratish | POST /v2/order |
async |
| Mahsulot qo’shish | POST /v2/order-product/:order_id |
async |
| Mijozni biriktirish | PUT /v2/order-customer-new/:order_id |
async |
| Chegirma | POST /v2/order-manual-discount/:order_id |
async |
| Summani solishtirish | POST /v1/recalculate-order-bill/:order_id |
sync |
| Sotuvni yakunlash | POST /v2/order-payment/:order_id |
sync |
| Sotuv tafsilotlari | GET /v2/order/:id |
sync |