O'rnatish oqimi (Flow A)
Bu marketplace integratsiyasi uchun oqim. U Bito ichida boshlanadi: mijoz Integratsiyalar → Integratsiyalar bo'limini ochadi, marketplace'da integratsiyangizni topadi va o'rnatish tugmasini (Bepul o'rnatish yoki Pullik o'rnatish) bosadi. Shundan so'ng Bito avtorizatsiya kodini to'g'ridan-to'g'ri serveringizga yuboradi. Mijozning brauzeri bunda qatnashmaydi, shuning uchun sizga sahifa emas, endpoint kerak.
Mijoz (Bito'da) Bito Sizning server
| | |
| 1. "O'rnatish" | |
|------------------------->| |
| | 2. POST redirect_uri |
| | { code, client_id, |
| | account_id } |
| |--------------------------->|
| | |
| | 3. POST /auth/oauth/token |
| |<---------------------------|
| | { access_token, |
| | refresh_token } |
| |--------------------------->|
| | |
| 4. integratsiyadan foydalanadi |1. Mijoz integratsiyani o'rnatadi
Bu yerda hech narsa yozish kerak emas. O'rnatish tugmasi integratsiya PUBLIC bo'lgach barcha mijozlarda paydo bo'ladi; PRIVATE holatida uni faqat o'z akkauntingiz ko'radi — ishlab chiqish vaqtida aynan shu kerak.
2. Bito kodni redirect_uri'ingizga yuboradi
Bito integratsiya yaratishda ko'rsatgan redirect_uri manziliga POST yuboradi — redirect emas.
Bito yuboradigan so'rov
POST https://your-app.example.com/bito/install
Content-Type: application/json
X-Bito-Signature: t=1736937000,v1=6b1f0a...c94e
{
"code": "abc123def456",
"client_id": "69c50a2d50f7b939923a469b",
"account_id": "507f1f77bcf86cd799439011"
}| Maydon | Tavsif |
|---|---|
code | Avtorizatsiya kodi. Bir martalik, 20 daqiqa yashaydi. |
client_id | Sizning OAuth client id'ingiz — ish boshlashdan oldin o'zingizniki ekanini tekshiring. |
account_id | Sizni o'rnatgan mijoz akkaunti. Saqlang: mijozlaringizni shu bo'yicha ajratasiz. |
X-Bito-Signature | So'rov imzosi — quyiga qarang. |
So'rov haqiqatan Bito'dan kelganini tekshiring
Bu POST sizning client_secret'ingiz bilan imzolanadi. Bu sirni faqat Bito va siz bilasiz, shuning uchun mos imzo so'rov haqiqiy ekanini isbotlaydi va uchinchi tomon o'rnatishni soxtalashtira olmaydi.
- Header formati:
X-Bito-Signature: t=<unix soniya>,v1=<hex> v1 = HMAC_SHA256(client_secret, "{t}.{raw_body}")— so'rov tanasining aynan baytlari bo'yicha hisoblanadi. JSON'ni qayta seriyalashmang.v1'ni qayta hisoblang va header'dagi bilan doimiy-vaqt (constant-time) solishtiring; farq bo'lsa so'rovni rad eting.tjoriy vaqtdan ~5 daqiqadan ko'proq eski bo'lsa so'rovni rad eting — bu qayta yuborish (replay) hujumlarini to'xtatadi.- Shuningdek
client_idvaaccount_idkutilgan mijozga mos kelishini tekshiring.
Misol (Node.js)
const crypto = require('crypto');
function verifyBitoSignature(rawBody, headers, clientSecret, now = Date.now()) {
const m = /t=(\d+),v1=([a-f0-9]+)/.exec(headers['x-bito-signature'] || '');
if (!m) return false;
const [, t, v1] = m;
if (Math.abs(now / 1000 - Number(t)) > 5 * 60) return false; // stale / replay
const expected = crypto
.createHmac('sha256', clientSecret)
.update(t + '.' + rawBody)
.digest('hex');
const a = Buffer.from(expected, 'hex');
const b = Buffer.from(v1, 'hex');
return a.length === b.length && crypto.timingSafeEqual(a, b);
}WARNING
Tez 2xx qaytaring, kerak bo'lsa tokenni almashtirishni fonda bajaring. Bito bu so'rovni qayta yubormaydi.
3. Kodni tokenga almashtiring
20 daqiqa ichida token endpointiga murojaat qiling — faqat serverdan, chunki so'rov client_secret'ingizni olib yuradi.
Qarang: Tokenlar bilan ishlash → Avtorizatsiya kodini almashtirish.
4. Tokenlarni akkaunt bilan birga saqlang
access_token, refresh_token va account_id'ni birga saqlang. Bitta mijoz — bitta token juftligi. Access token muddati tugagach, uni yangilang.
TIP
O'chirish hookini ham amalga oshiring, shunda mijoz integratsiyani olib tashlaganda uning ma'lumotini o'chira olasiz.