认证
不同的 API 模块使用不同的认证方式。
Bot API — Bot Token
Bot API 使用 Token 认证。Token 包含在请求 URL 路径中:
POST https://api.example.com/bot{token}/sendmessageToken 由 BotFather 在创建 Bot 时颁发。服务端会验证 Token 的有效性,并据此识别 Bot 身份。
WARNING
Token 是 Bot 的唯一身份凭证,请妥善保管,不要泄露。
Wallet API — RSA 签名
Wallet API 使用请求头签名认证,需要以下 HTTP Header:
| Header | 说明 |
|---|---|
X-bot-Id | 机器人 ID |
X-Timestamp | Unix 时间戳(秒) |
X-Sign | RSA 签名 |
X-Nonce | 消息唯一 ID(防重放) |
签名生成方式
签名数据的拼接格式:
signData = botId + "\n" + method + "\n" + path + "\n" + timestamp + "\n" + nonce + "\n" + canonicalJSONbotId— 机器人 IDmethod— HTTP 方法(POST)path— 请求路径(如/safew/wallet-info)timestamp— 同X-Timestampnonce— 同X-NoncecanonicalJSON— 请求体的标准化 JSON
使用 RSA 私钥对 signData 进行签名,将签名结果进行 Base64 编码后填入 X-Sign。
时间戳验证
服务端会检查时间戳是否在 5 分钟 有效期内。超过有效期的请求将被拒绝。
防重放
服务端会检查 X-Nonce 是否重复,重复的请求将被拒绝。
响应签名
Wallet API 的响应也包含签名头:
| Header | 说明 |
|---|---|
X-Resp-bot-Id | 机器人 ID |
X-Resp-Timestamp | 响应时间戳 |
X-Resp-Request-Id | 请求 ID(同 X-Nonce) |
X-Resp-Sign | 响应签名 |
