Appearance
1.1 API接入规范
1.1.1 请求规范
双方接口统一采用https协议,utf8编码,post请求传输数据,请求体与响应体均采用application/json。
1.1.2 时区规范
时区统一按照泰国/曼谷,即+07:00时区,时区文件为Asia/Bangkok;所有时间格式统一为yyyy-MM-dd HH:mm:ss,例如2006-01-02 15:04:05。
1.1.3 接口出入参说明
请求参数:
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| channel_code | string | Y | 流量承接方提供的渠道标识 |
| method | string | Y | 请求业务方法 |
| timestamp | string | Y | 时间戳(10位) 与当前时间戳±10s以上的请求将会直接返回报错 |
| nonce | string | Y | 随机字符串(8-32位) 每次请求需生成新的nonce,以防止重放攻击 |
| biz_data | string | Y | AES对称加密后的请求参数 |
| sign | string | Y | RSA生成的签名 |
json
{
"channel_code": "kld8956spceq",
"method": "user_verify",
"timestamp": "1568945678",
"nonce": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",
"biz_data": "HnLNCOW7e1bc3PioyC/6yg==",
"sign" : "R8i+9exBisxsgbFtwIROCbPfSKbcEaFwkSxooOGig3QaJzmbWK42tCXASrgiX4OYFrEUa66sugqMLJD71+Fbd3EtV7lEits3T/vPzctveIXBD65jx39r7579GcS5h+iwR5yzUaN1fkgDpjGgKPCwP2KnT2CKfMixB19KNVrrxf0="
}响应参数:
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| code | int | Y | 错误编码,成功返回0,失败返回非0 |
| message | string | Y | 错误提示 |
| data | object | N | 返回业务信息 |
json
{
"code": 0,
"message": "success",
"data": {}
}json
{
"code": 1000000,
"message": "network busy, please try again",
"data": {}
}1.1.4 sign签名机制
交互双方通过签名机制来保证通信安全。签名算法为SHA256withRSA。RSA生成的密钥对请务必使用PKCS#8的格式。双方各自生成一份RSA密钥对,并相互交换公钥。进行接口交互时,一方使用自己的私钥对参数签名,另一方使用对方的公钥来验证签名,反之亦然。具体语言实现见 1.2 签名代码示例。
sign计算公式如下:
= () = (("biz_data=&channel_code=&method=&nonce=×tamp="))- 上面的参数是按照升序排列组装后,再进行
RSA加密的
公私钥生成方法:
bash
#! /bin/bash
# 请安装 openssl
# 执行后,rsa_private_key.pem为私钥,rsa_public_key.pem为公钥
# 生成私钥
openssl genrsa -out private.pem 1024
# 私钥转换成 PKCS#8 格式
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform PEM -nocrypt -out rsa_private_key.pem
# 生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem1.1.5 biz_data加密机制
biz_data采用AES加密,加密模式为ECB,填充方式pkcs5padding,base64输出。如果原数据为json格式,需要对原数据进行json序列化后,再进行加密。
密码由流量提供方提供,长度为16位(即数据块为128位)
测试案例:
txt
原文: {"md5":"test"}
密码: 1234567812345678
密文: HnLNCOW7e1bc3PioyC/6yg==