Open API / 推送支付密码

推送支付密码

业务触发支付密码,后端生成支付密码发送到 IM 端,IM 收到支付密码后回填,完成后续业务。

RSA2 仅服务端 application/json
POST /v1/system-push/pay-password

调用时机 签名 PATH 请求体 响应 错误码 重试 示例

签名算法见 签名规范。本页只写本接口的 PATH、字段和错误码。

调用时机

业务方需要触发支付密码并向 IM 发送时,由业务方自行判断是否调用。

userNo 必须是平台用户编号,且该用户已完成与直播侧的账号同步。未同步返回 code=404。不要传直播 uid 或手机号。

签名 PATH

METHODPOST
HTTP 路径/v1/system-push/pay-password
签名 PATH/api/open/v1/system-push/pay-password
测试 URLhttps://test-chat-live-open-go.gyyx.store/v1/system-push/pay-password
生产 URL

请求体

字段类型约束说明
userNostring必填最长 32平台用户编号
payPasswordstring必填6 位数字明文支付密码
textstring可选最长 3000正文,可含 {payPassword}。默认 您的支付密码:{payPassword}
titlestring可选最长 200离线通知标题。默认 支付密码
json
{
  "userNo": "69493154",
  "payPassword": "847291"
}

响应

统一信封。以 code 为准:鉴权失败多为 HTTP 4xx;业务失败多为 HTTP 200 且 code != 0

json
{
  "code": 0,
  "message": "ok",
  "data": {
    "imUserId": "42",
    "c2cDelivered": 1
  }
}
字段说明
imUserId直播侧 IM 账号
c2cDelivered1 表示会话已提交,不表示用户已读

错误码

HTTPcodemessage处理
400400缺少必要请求头补齐 X-YS-*
400400不支持的签名类型X-YS-Sign-Type 设为 RSA2
400400时间戳无效使用 Unix 秒并校准时钟
400400密钥版本无效确认 v1
400400签名无效核对待签串与私钥
400400nonce 重复更换 nonce
400400参数错误检查 userNo 与 6 位数字密码
403403应用无效或未启用核对 AppID
403403接口未授权联系开通权限
403403IP 不在白名单报备出口 IP
429429请求过于频繁间隔后重试
200404用户未同步或映射不存在待该 userNo 同步完成后再调
2005608推送失败按重试策略重试

重试

结果是否重试
超时、连接失败、5608是。1s / 2s / 4s,最多 3 次
429是。至少间隔 1 秒
404 / 400 / 403 / 0

重试须更换 X-YS-TimestampX-YS-Nonce,建议更换 X-YS-Request-Id,并对同一份 body 重新签名。同一密码成功推送后不要再推。

调用示例

http
POST /v1/system-push/pay-password HTTP/1.1
Host: test-chat-live-open-go.gyyx.store
Content-Type: application/json
X-YS-App-Id: ys_app_asset
X-YS-Timestamp: 1756610000
X-YS-Nonce: a1b2c3d4e5f67890
X-YS-Request-Id: req_001
X-YS-Sign-Type: RSA2
X-YS-Key-Version: v1
X-YS-Signature: <RSA2 Base64>

{"userNo":"69493154","payPassword":"847291"}
go
body, _ := json.Marshal(map[string]string{
    "userNo": "69493154", "payPassword": "847291",
})
ts := strconv.FormatInt(time.Now().Unix(), 10)
nonce := fmt.Sprintf("n_%d", time.Now().UnixNano())
reqID := fmt.Sprintf("req_%d", time.Now().UnixNano())
appID := "ys_app_asset"
sum := sha256.Sum256(body)
canonical := strings.Join([]string{
    "POST",
    "/api/open/v1/system-push/pay-password",
    "",
    appID, ts, nonce, reqID,
    hex.EncodeToString(sum[:]),
}, "\n")
sig := SignRSA2(privateKeyPEM, canonical)

req, _ := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-YS-App-Id", appID)
req.Header.Set("X-YS-Timestamp", ts)
req.Header.Set("X-YS-Nonce", nonce)
req.Header.Set("X-YS-Request-Id", reqID)
req.Header.Set("X-YS-Sign-Type", "RSA2")
req.Header.Set("X-YS-Key-Version", "v1")
req.Header.Set("X-YS-Signature", sig)