SelSup Developers

Толук иш жүрүшү · Жол башчылары

Веб-хок жана иш-чараларга негизделген интеграция

Чыгуучу веб-чатак орнотуу, коопсуз кабыл алуучу, дубликат коргоо жана API аркылуу жоголгон окуяларды калыбына келтирүү.

Бөлүмдөр: 5Девелоперлер үчүн колдонмо
→

Веб-хоктор өзгөрүүлөрдүн кечиктирүүсүн азайтат, бирок чындыктын булагын алмаштырышпайт.

Иш-чараларга негизделген интеграциялар жана арткы чегиндеги кызматтар

1

Окуяларды жана менчик укуктарын аныктоо

Жаңы же өзгөртүлгөн буйрук, запас өзгөрүшү же баа өзгөрүшү сыяктуу бир иш-чарадан баштоо. Ар бир иш чара үчүн маалыматтардын ээси жана алуучунун аракетин аныктоо.

Негизги веб-хок жүктөрүн нормалдаштырылган моделден бөлүп, чектелген убакытка сактаңыз.

Жаңы тандоо талаасы белгилүү окуялар структурасынын талдоону бузууга тийиш эмес.

2

HTTP кабыл алуучусун орнотуу

  1. 1

    Суроону чектөө

    Тек гана талап кылынган ыкмаларды жана мазмун түрлөрүн кабыл ал, дене өлчөмүнүн чегин күчөт жана кыска убакыттан кийин окууга убакыт бөл.

  2. 2

    Чыгарманы текшерүү

    X-SelSup-Signature текшерүү үчүн веб-хауктын ар бир кол тамгасы менен Сактык: HMAC-SHA256 ASCII(t + "." + id + ".") жана чийки дене байттери менен.

  3. 3

    Иш-чара улантылсын

    Пайдалуу жүктү жана дедупликация ачкычын бир транзакцияга сактоо, андан кийин тез арада ийгиликтүү жооп кайтаруу.

  4. 4

    Процесс асинхрондук

    ЭРП, WMS жана башка системаларды HTTP өтүнүчүнүн ордуна кезектен чалуу.

!
Жообу кыска болсун

Тез жооп берүү убакыттын өтүшү жана эки жолу жеткирүү коркунучун жогорулатат.

Минималдык кабыл алуучу үлгүсү · JavaScript
const crypto = require('node:crypto');
const signingSecret = process.env.SELSUP_WEBHOOK_SECRET;

// Register this route before express.json() so req.body is a Buffer.
app.post('/selsup/events', express.raw({type: 'application/json'}), async (req, res) => {
  const header = req.get('X-SelSup-Signature') || '';
  const match = /^t=(\d+),id=([0-9a-f-]{36}),v1=([0-9a-f]{64})$/.exec(header);
  if (!match) return res.sendStatus(401);
  const [, timestamp, deliveryId, hex] = match;
  if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return res.sendStatus(401);
  const signed = Buffer.concat([
    Buffer.from(`${timestamp}.${deliveryId}.`, 'ascii'), req.body
  ]);
  const expected = crypto.createHmac('sha256', Buffer.from(signingSecret, 'hex'))
    .update(signed).digest();
  const actual = Buffer.from(hex, 'hex');
  if (actual.length !== expected.length || !crypto.timingSafeEqual(actual, expected)) {
    return res.sendStatus(401);
  }
  const inserted = await inbox.insertOnce(deliveryId, req.body);
  return res.sendStatus(inserted ? 202 : 200);
});

3

Дубликат, тартип жана дедубликат

Дубликат берүү нормалдуу түрдө колдонулат. Бар болгондо туруктуу окуяны идентификаторду колдонуңуз; болбосо ачкычты субъекттин түрүнөн, субъекттин идентификаторунан, өзгөртүү убактысынан жана маанилуу маалыматтардын хэшинен алыңыз.

Окуялар тартипте болбошу мүмкүн. API аркылуу учурдагы түзүлүштү жазуудан мурун өзгөртүлгөн датаны салыштыруу же кайра жүктөө.

Иш-чаранын ийгиликтүү абалын кайтаруу. Болбосо жөнөтүүчү аяктаган ишти кайра аракет кыла берет.

i
Баракчанын үлгүсү

Өзгөчө окуялар ачкычы, абалы жана аракет саноосу менен кирген окуялар таблицасы дедупликацияны, ойнотууну жана аудитти жөнөкөйлөтөт.

4

Калган окуяларды калыбына келтирүү

Убактылуу API шайкештигин иштеп чыгуу, ал тургай, веб-хоуктар ден-соолукка пайдалуу.

Алуучунун өчүрүлгөндөн кийин, кире турган кутучаны агызыңыз жана толук өчүрүү терезеси үчүн өзгөртүүлөрдү өтүнүңүз.

5

Веб- кучактагы жашоо циклин башкаруу

Активдүү URL, иш-чаранын түрү, акыркы ийгиликтүү кабыл алуу жана интеграцияңыздагы акыркы error көрсөтүңүз. Бул түздөн-түз серверге кирүүсүз диагноз коюуга мүмкүндүк берет.

URLди алмаштыруудан же жок кылуудан мурун жаңы кабыл алуучу окуяларды кабыл алганын текшериңиз.