Skip to main content

认证与签名

接入 OristaPay Open API 采用 双重认证
  • OAuth2 访问令牌 — 证明调用方身份
  • HMAC 请求签名 — 证明请求未被篡改
每次请求必须同时通过两层校验,任一失败即返回 401 Unauthorized

1. 获取访问令牌

标准 OAuth2 client_credentials 流程。 请求
响应
使用约束
  • access_tokenexpires_in 秒内可复用,建议缓存并在到期前 30 秒主动刷新
  • access_token 必须由与 X-Api-Key 对应的 OAuth 客户端签发
使用 A 商户的 api_key 配合 B 商户的 access_token 调用会被拒绝。

2. 请求签名算法

待签字符串拼接规则
签名计算
字段定义 参考实现

3. 请求头规范

所有业务请求必须同时携带以下请求头:

请求与响应约定

协议规范

响应信封

所有响应均为单层 JSON { code, message, data? },由下游业务服务返回,网关不再做二次包装。 成功(业务正常) 业务码 code = 1,业务数据在 data 中:
业务/下游错误 下游返回业务错误,HTTP 状态码仍为 200,错误细节由业务码 code / message 表达:
下游 gRPC 不可达 / 超时等场景,HTTP 状态码仍为 200code 为负整数(与 gRPC StatusCode 取负,如 -14 表示 UNAVAILABLE),message 给出连接错误详情。 网关层错误 路由未命中、网关内部异常、descriptor 缺失等。HTTP 状态码使用对应错误码(如 400 / 404 / 500 / 502),响应体仍为单层 {code, message}
  • HTTP 状态码反映传输层处理结果:2xx 表示请求成功送达下游并完成转换;非 2xx 表示网关侧错误
  • 业务码 code 反映业务层处理结果:1 表示业务成功,data 承载返回值;其他值为业务错误码,message 给出原因描述
  • 判断成功的正确姿势:HTTP 2xx + 业务 code == 1,两者皆满足才表示业务调用成功
  • 认证类错误Authorization / X-Signature / X-Timestamp / X-Nonce 任一校验失败统一返回 HTTP 401,响应体为 {"code":401,"message":"Unauthorized"}

错误处理

HTTP 状态码与业务码

响应体统一为单层 {code, message, data?}。HTTP 状态码反映网关/传输层结果,业务码 code 反映业务处理结果。

认证失败排查清单

所有认证类错误统一返回:
请按以下顺序排查:
  1. Token 是否有效 — 是否过期?是否由当前 api_key 签发?
  2. 签名是否匹配METHOD / PATH / BODY 是否与实际发送一致?
  3. 时间戳是否在窗口内 — 本机时钟是否与 NTP 同步?
  4. Nonce 是否唯一 — 5 分钟内同一 api_key 下不得复用

限流策略

超限响应示例
需要更高配额请联系商务,调整后次分钟生效。

安全建议