| 项目 | 说明 |
|---|
| 算法 | HMAC-SHA256 |
| 待签名内容 | 请求体 JSON 字符串(原始报文,不做任何格式化) |
| 密钥 (Secret) | signKey(共享签名密钥),测试环境联系 Support 获取,生产环境单独分配 |
| 签名计算 | Signature = Base64(HMAC-SHA256(signKey, requestBody)) |
| 传递方式 | 放入 HTTP 请求头 Signature |
| 开关 | 默认开启,可按店铺独立关闭。如需变更店铺配置,请联系 Support。创建店铺接口是例外,始终校验签名 |
POST /OpenApiV2/applyToken 不校验 Signature(见 申请令牌)。
商户业务接口(除申请令牌外)标准请求头:
| Header | 值 | 说明 |
|---|
Content-Type | application/json | 必填 |
Authorization | Bearer {token} | Token 鉴权。申请令牌接口不要带此头 |
Signature | {signature} | HMAC-SHA256 签名。店铺开启签名校验时必填;关闭时不校验。申请令牌接口不要带此头 |
创建店铺接口 OpenApiCreateUserAndShopV2 使用平台 SaaS App(appType=1)申请的 token,不能用店铺 token;该 token 也不能调其它商户业务接口。该接口不读取店铺签名开关,Signature 始终必填。见 创建店铺。
| 项目 | 规则 |
|---|
| 请求方式 | POST(未特别说明时) |
| Content-Type | application/json |
| 字段命名 | 小驼峰为主;个别字段为历史兼容(如 ItemPicInfoMain、Properties、CancelError) |
| 金额类型 | string,单位为币种主单位(如币种 USD 即美元金额);小数位数以各字段 schema 为准(存在 4 位小数字段,如延保报价 price),不要统一按 2 位截断 |
| 时间格式 | RFC 3339,例:2023-09-05T21:21:22+00:00 |
| 环境 | 请求地址 |
|---|
| 测试 (beta) | https://betaxcottons.xmhhulu.com |
| 生产 (美国) | https://openapi.xcottons.com |
生产域名解析至 52.86.202.15、34.192.81.36 两个公网入口 IP。如需全球加速访问,联系 Support(加速域名无固定 IP)。
| 项目 | 说明 |
|---|
| 能力与开关 | 接口支持防重放;是否启用按店铺配置,部分店铺可关闭。自20260824开始,接入OPENAPI默认接入防重放功能。 |
| 配置方式 | 联系 Support 修改店铺配置 |
| Header | 格式 | 示例 |
|---|
Timestamp | 毫秒级时间戳 | 1765952712000 |
Nonce | UUID 随机字符串 | d8193360-8ae1-4297-a092-13c0c8f4b7fe |
Timestamp 与 Xcotton 服务器时间的差值需在 300 秒以内,否则接口报错。
Timestamp 与 Nonce 是条件必填:店铺开启防重放时两者必须同时传入,任意一个缺失都会校验失败;店铺关闭防重放时不要求传入,也不参与签名。
| 项目 | 说明 |
|---|
| 公式 | Signature = Base64(HMAC-SHA256(signKey, newBody)) |
| 新报文内容 | newBody = 原始请求体 JSON 字符串逐字节原样拼接字面后缀 &Timestamp={timestamp}&Nonce={nonce}(&、= 为字面字符,无空格) |
| 字节口径 | 拼接前不要重新序列化、转义或格式化请求体;对拼接后的完整字符串按 UTF-8 字节计算 HMAC |
| 示例 | {"testkey":{"testkey1":"testvalue"}}&Timestamp=1765952712000&Nonce=d8193360-8ae1-4297-a092-13c0c8f4b7fe |
| Header | 值 |
|---|
Content-Type | application/json |
Authorization | Bearer {token} |
Signature | {signature} |
Timestamp | {timestamp} |
Nonce | {nonce} |
回调 URL 由商户在店铺接入时配置(openapiConfig.callEndpoints),由 Support 协助开通。报文结构与店铺无关,只有 URL 按店配置。当前六类已上线回调和两类预设计回调的 payload 均写在 OpenAPI webhooks 中,可在 API 接口文档 查看字段;那不是出站接口,不要对着 OpenAPI 域名点 Send。邮包险开通审核回调使用配置键 openApiSpSwitchCallback,其中 secret 是敏感凭据,禁止记录到日志或前端页面。
| 项目 | 说明 |
|---|
| 请求方式 | POST |
| Content-Type | application/json |
| 验签头 | xmh-hmc-signature(见 §4.2) |
| 项目 | 说明 |
|---|
| 算法 | HMAC-SHA256 |
| 待签名内容 | 请求体 JSON 字符串(原始报文) |
| 密钥 (Secret) | signKey(共享签名密钥) |
| 签名计算 | sign = Base64(HMAC-SHA256(signKey, requestBody)) |
| 传递方式 | 放入 HTTP 请求头 xmh-hmc-signature |
平台只认 HTTP 状态码 200。不解析商户响应 body 中的 errCode。非 200 视为失败并定时重试。
| 项目 | 说明 |
|---|
| 单机 QPS | 50 |
| 扩容方式 | 横向扩容 |
| 生产实例数 | 高频接口服务 20+ 实例 |
本节只给出站(商户 → Xcotton)接口。回调见 §4.3。
只有同时满足以下条件才视为成功:
| 条件 | 值 |
|---|
| HTTP 状态码 | 200(业务失败时 HTTP 仍为 200,看 errCode) |
| 业务状态码 | errCode = 0 |
| 项目 | 说明 |
|---|
| 可重试 | 错误码附录 中 920xxx 一类(超时、限流、临时故障) |
| 不要盲目重试 | 参数错误、鉴权失败、业务拒绝等非 920xxx 码,重复调用通常无意义 |
| 幂等 | 退保等写接口请带业务幂等键(如 cancelId);不要假设所有接口都可随意重试 |