SelSup Developers

终端到终端工作流程 · 导游

网络网络和活动驱动的集成

通过API,设置出发网络连接器,安全接收器,重复保护和错过事件的恢复.

章节: 5开发人员指南
→

网络缩了变化延迟,但并不能取代真相来源.接收者必须无力,定期调整仍然是必不可少的.

基于事件的集成和后端服务

1

定义事件和所有权

开始一个商业事件,例如新或更改的订单,股票变化或价格变化.

保持原始的网关用量与正常模型分开,只能在整合后重播.

另一个选项字段不能打破已知事件结构的解析.

2

建立一个安全的 HTTP 接收器

  1. 1

    限制请求

    接受只需要的方法和内容类型,强制限制体积,并使用短暂的阅读时间.

  2. 2

    检查源

    通过每网页签名验证X-SelSup-Signature. 秘密:HMAC-SHA256在ASCII(t + "." + id + ".") 后面是原始体字节. 拒绝过时标签和复制交货身份证.

  3. 3

    继续活动

    存储有效负载和减倍密钥在一个交易中,然后快速返回成功的响应.

  4. 4

    过程异步

    通过排队调用ERP,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

复制,排序和减复

处理重复传输正常. 使用当存在时稳定的事件识别符;否则从实体类型,实体ID,修改时间和有意义的数据的哈希中导出一个关键.

通过 API,比较改编日期之前或重新加载当前实体.

返回已处理的事件成功状态.否则发送者可能会继续重新尝试完成的工作.

i
收件箱模式

具有独特的事件键,状态和尝试数的入场事件表简化了排放,重播和审计.

4

恢复错过事件

运行定期的API调整,即使网络链接是健康的. 使用修改Date与订单重叠和仓库或改变SKU检查库存.

接收器停机时间结束后,请排放收件箱,并要求对完全停机窗口进行更改.相同的减倍逻辑应该结合webhook和API结果.

5

管理网联链生命周期

显示主动URL,事件类型,最后成功收件和最新的error在您的集成中. 这使得无法直接访问服务器日志的诊断.

在更换或删除URL之前,请验证新接收器是否接受事件. 迁移后撤销旧秘密.