Tokenlar bilan ishlash
Har bir oqim bir xil natijaga olib keladi: har murojaatda yuboradigan access_token va muddati tugaganda yangi juftlik olish uchun refresh_token.
Avtorizatsiya kodini almashtirish
Flow A va Flow B uchun bir xil.
So'rov
POST /auth/oauth/token
Content-Type: application/json
{
"grant_type": "authorization_code",
"code": "abc123def456",
"client_id": "69c50a2d50f7b939923a469b",
"client_secret": "4f3c1a9e8b27d605f1ac93e7d284b6510ff7a3c9e15d8b2470a6cd91e83f4b27"
}| Maydon | Tur | Majburiy | Tavsif |
|---|---|---|---|
grant_type | string | Ha | Doim "authorization_code" |
code | string | Ha | Bito bergan avtorizatsiya kodi |
client_id | string | Ha | Sizning OAuth client id |
client_secret | string | Ha | Mijoz siringiz |
Javob
{
"code": 0,
"message": "Success",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 86400,
"token_type": "Bearer",
"scope": "read write"
}
}expires_in — berilgan paytdan boshlab soniyalarda.
WARNING
Avtorizatsiya kodi bir martalik va 20 daqiqadan keyin o'ladi. Ikkinchi marta almashtirishga urinish Invalid credentials qaytaradi, ikkinchi token juftligini emas.
Tokenlarni yangilash
So'rov
POST /auth/oauth/token
Content-Type: application/json
{
"grant_type": "refresh_token",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"client_id": "69c50a2d50f7b939923a469b",
"client_secret": "4f3c1a9e8b27d605f1ac93e7d284b6510ff7a3c9e15d8b2470a6cd91e83f4b27"
}Javob shakli kodni almashtirish bilan bir xil.
WARNING
Har bir yangilashda ikkala token ham almashadi. Ishlatilgan refresh token ishlamay qoladi — yangi juftlikni atomar saqlang, aks holda keyingi yangilash muvaffaqiyatsiz bo'ladi va mijoz integratsiyani qayta o'rnatishga majbur bo'ladi.
Yangilash o'chirilgan integratsiyani qaytarmaydi. Mijoz sizni o'chirsa, refresh o'rnatilmagan yozuv bilan ishlashda davom etadi, shuning uchun haqiqiy signal deb o'chirish hookini hisoblang.
Client credentials
Foydalanuvchi ishtirokisiz server vazifalari uchun. Boshqa endpointga boradi — /auth/oauth/token emas, /auth/oauth/auth — va oraliq kodsiz, darhol token qaytaradi.
WARNING
Shart: mijoz integratsiyangizni allaqachon o'rnatgan bo'lishi kerak. Bu usul aynan o'rnatma sirini tekshiradi, shuning uchun birinchi o'rnatishgacha solishtiradigan narsa yo'q.
So'rov
POST /auth/oauth/auth
Content-Type: application/json
{
"response_type": "client_credentials",
"client_id": "69c50a2d50f7b939923a469b",
"client_secret": "4f3c1a9e8b27d605f1ac93e7d284b6510ff7a3c9e15d8b2470a6cd91e83f4b27",
"redirect_uri": "https://example-app.com/callback",
"scope": ["read", "write"],
"state": "optional_state"
}| Maydon | Tur | Majburiy | Tavsif |
|---|---|---|---|
response_type | string | Ha | Doim "client_credentials" |
client_id | string | Ha | Sizning OAuth client id |
client_secret | string | Ha | O'rnatilgan integratsiyaning siri |
redirect_uri | string | Ha | To'g'ri URL bo'lishi shart. Bu yerda redirect bo'lmasa ham tekshiriladi — ro'yxatdan o'tgan manzilingizni yuboring. |
scope | string[] | Ha | So'ralayotgan huquqlar, massiv ko'rinishida |
state | string | Yo'q | Ixtiyoriy qiymat, o'zgarishsiz qaytariladi |
Javob
{
"code": 0,
"message": "Success",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 86400,
"token_type": "Bearer",
"scope": "read write"
}
}Access tokendan foydalanish
Tokenni har bir so'rovda Authorization sarlavhasida yuboring.
POST /integration/api/v2/product/get-paging
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json
Accept-Language: uz
{
"limit": 20,
"page": 1
}| Sarlavha | Majburiy | Tavsif |
|---|---|---|
Authorization | Ha | Bearer <access_token> |
Accept-Language | Yo'q | Javob tili: uz, uz_cyrillic, ru, en, kk, tg, ky. Standart — uz. |
organization_id | Yo'q | Akkaunt ichidagi tashkilot. Faqat integratsiya sozlamalarida (fields) organization_id maydoni bo'lsa ishlatiladi — aks holda sarlavha e'tiborga olinmaydi. Yuborilmasa, o'sha maydon qiymati olinadi. |
warehouse_id | Yo'q | Ombor. Faqat integratsiya sozlamalarida (fields) warehouse_id maydoni bo'lsa ishlatiladi — aks holda sarlavha e'tiborga olinmaydi. Yuborilmasa, o'sha maydon qiymati olinadi. |
price_id | Yo'q | Narxlar olinadigan narx ro'yxati. Faqat integratsiya sozlamalarida (fields) price_id maydoni bo'lsa ishlatiladi — aks holda sarlavha e'tiborga olinmaydi. Yuborilmasa, o'sha maydon qiymati olinadi. |
role_id | Yo'q | So'rov bajariladigan rol. Faqat integratsiya sozlamalarida (fields) role_id maydoni bo'lsa ishlatiladi — aks holda sarlavha e'tiborga olinmaydi. Yuborilmasa, o'sha maydon qiymati olinadi. |
user_id | Yo'q | So'rovni shu foydalanuvchi nomidan bajarish. Foydalanuvchi shu akkauntga tegishli va bloklanmagan bo'lishi shart, aks holda so'rov rad etiladi. Yuborilmasa — akkaunt egasi nomidan. |
Akkaunt identifikatorini yubormaysiz — u tokenning ichida.
Tokenlarning amal qilish muddati
| Token | Muddat | Izoh |
|---|---|---|
| Avtorizatsiya kodi | 20 daqiqa | Bir martalik, shu oraliqda almashtirilishi kerak |
| Access token | 24 soat | Authorization sarlavhasida yuboriladi |
| Refresh token | 90 kun | Yangi juftlikka almashtiriladi; har ishlatishda almashadi |
| Bir martalik token | 24 soat | Bir martalik, mijoz siri bilan imzolangan — Bir martalik tokenlar |
WARNING
Mijoz sirini yangilash eski sir ostida berilgan barcha access va refresh tokenlarni barcha mijoz akkauntlarida bir vaqtda o'ldiradi.
So'rovlar chegarasi
/auth/oauth/auth va /auth/oauth/token bitta IP uchun daqiqasiga 20 so'rov qabul qiladi. Tokenni muddati tugaganda yangilang, taymer bo'yicha yoki har so'rov oldidan emas.