Skip to content

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.

text
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

http
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"
}
MaydonTavsif
codeAvtorizatsiya kodi. Bir martalik, 20 daqiqa yashaydi.
client_idSizning OAuth client id'ingiz — ish boshlashdan oldin o'zingizniki ekanini tekshiring.
account_idSizni o'rnatgan mijoz akkaunti. Saqlang: mijozlaringizni shu bo'yicha ajratasiz.
X-Bito-SignatureSo'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.
  • t joriy vaqtdan ~5 daqiqadan ko'proq eski bo'lsa so'rovni rad eting — bu qayta yuborish (replay) hujumlarini to'xtatadi.
  • Shuningdek client_id va account_id kutilgan mijozga mos kelishini tekshiring.

Misol (Node.js)

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.

Bito 2.0 Integration API