插件统一交易接口:令牌、幂等与结果核对

适用版本:会员插件 1.3.3 · 核对日期:2026-10-10

用途

由可信插件后端为已有会员增加或扣减一种账户资产,并记录可关联业务的流水。

前置条件

开启插件统一接入,为已安装调用插件配置唯一服务令牌;pluginId 使用调用方 plugin.yaml 的 metadata.name。会员存在,余额操作还需余额总开关。

操作入口

会员插件设置 → 插件接入。接口前缀:/apis/public.member.muyin.site/v1alpha1/integration。请求头:X-Muyin-Member-Token: <调用插件服务令牌>。

操作步骤

  1. 先调用 POST /self-check 核对开关、令牌识别和调用方身份。
  2. 创建稳定 requestId,明确用户、账户差额、交易类型、业务类型和业务 ID。
  3. 调用 POST /transactions;单笔只允许积分或余额一种非零变化。
  4. 保存返回的交易 ID 与业务结果,核对账户和流水。
  5. 发生超时或返回不明确时,调用 POST /transactions/lookup 并携带原交易指纹。
  6. 同一业务重试使用原请求 ID 和一致内容;发现冲突或结果仍不明确时先人工核对。

预期结果与核对

服务令牌解析得到调用插件身份。已成功记录在相同 pluginId + requestId 下用于识别重试;不一致的交易内容返回冲突。查询返回 found 及已找到交易的信息。

限制与注意事项

令牌只用于后端,不能写进主题、公开 JavaScript 或文档样例。单笔同时改变积分和余额会被拒绝,两者都为 0 也会被拒绝。类型和正负方向必须一致。未找到成功流水不能证明一次网络超时绝对没有改变账户;必须核对原账户与流水,不能更换 ID 盲目重放。

常见问题

  • 401/403? 核对插件授权、统一开关、令牌与实际 RBAC 放行入口。
  • 400? 查必填字段、枚举类型、账户变化和余额开关。
  • 409? 同一请求 ID 被不同内容使用,保留原业务指纹排查。

请求与查询示例

以下是某任务业务补发 20 分的请求体;用户名、业务 ID 和令牌均需替换为自己的真实值。调用前应确认业务未重复发放。

{
  "requestId": "task-submission-001-reward",
  "userId": "alice",
  "scoreDelta": 20,
  "balanceDelta": 0,
  "transactionType": "SCORE_TASK_REWARD",
  "businessType": "TASK",
  "businessId": "submission-001",
  "description": "任务审核奖励",
  "metadata": {"taskId": "task-001"}
}

核对接口 POST /transactions/lookup 的请求体:

{
  "requestId": "task-submission-001-reward",
  "userId": "alice",
  "scoreDelta": 20,
  "balanceDelta": 0,
  "transactionType": "SCORE_TASK_REWARD",
  "businessType": "TASK",
  "businessId": "submission-001"
}

两个接口均携带同一调用方服务令牌。transactionType、businessType 必须使用插件支持的枚举,不使用任意字符串如 CUSTOM_ORDER。