Open API / 推送支付密码

推送支付密码

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

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

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

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

调用时机

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

userNo 必须是平台众享号。已有 IM 映射时直接推送;没有映射时可带 phone,服务会建一个登录密码为空的本地号、导入腾讯云 IM,再推送。不带 phone 且未同步返回 code=404。不要传直播 uid。

签名 PATH

项值
METHODPOST
HTTP 路径/v1/system-push/pay-password
签名 PATH/api/open/v1/system-push/pay-password
生产 URLhttps://chatlive.openapi.zhengdeyunqi.cn/v1/system-push/pay-password

请求体

字段类型约束说明
userNostring必填最长 32平台众享号
payPasswordstring必填6 位数字明文支付密码
phonestring条件11 位手机号无 IM 映射时必填。按手机号建本地空密码账号并导入 IM
nicknamestring可选最长 100新建本地号时的昵称;空则自动生成
textstring可选最长 3000正文,可含 {payPassword}。默认 您的支付密码:{payPassword}
titlestring可选最长 200离线通知标题。默认 支付密码
json
{
  "userNo": "69493154",
  "payPassword": "847291",
  "phone": "13800138000"
}

响应

统一信封。以 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用户未同步或映射不存在先同步,或带 phone 让本接口自动建空密码 IM 号
2004091手机号已绑定其他众享号不要改绑,改用原众享号
2005608推送失败按重试策略重试。含 IM 建号失败

重试

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

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

调用示例

http
POST /v1/system-push/pay-password HTTP/1.1
Host: chatlive.openapi.zhengdeyunqi.cn
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)