Skip to content

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_codestringY流量承接方提供的渠道标识
methodstringY请求业务方法
timestampstringY时间戳(10位)
与当前时间戳±10s以上的请求将会直接返回报错
noncestringY随机字符串(8-32位)
每次请求需生成新的nonce,以防止重放攻击
biz_datastringYAES对称加密后的请求参数
signstringYRSA生成的签名
json
{
    "channel_code": "kld8956spceq",
    "method": "user_verify",
    "timestamp": "1568945678",
    "nonce": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",
    "biz_data": "HnLNCOW7e1bc3PioyC/6yg==",
    "sign"  : "R8i+9exBisxsgbFtwIROCbPfSKbcEaFwkSxooOGig3QaJzmbWK42tCXASrgiX4OYFrEUa66sugqMLJD71+Fbd3EtV7lEits3T/vPzctveIXBD65jx39r7579GcS5h+iwR5yzUaN1fkgDpjGgKPCwP2KnT2CKfMixB19KNVrrxf0=" 
}

响应参数:

参数类型必选说明
codeintY错误编码,成功返回0,失败返回非0
messagestringY错误提示
dataobjectN返回业务信息
json
{
    "code": 0,
    "message": "success",
    "data": {}
}
json
{
    "code": 1000000,
    "message": "network busy, please try again",
    "data": {}
}

1.1.4 sign签名机制

交互双方通过签名机制来保证通信安全。签名算法为SHA256withRSARSA生成的密钥对请务必使用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.pem

1.1.5 biz_data加密机制

biz_data采用AES加密,加密模式为ECB,填充方式pkcs5paddingbase64输出。如果原数据为json格式,需要对原数据进行json序列化后,再进行加密。

密码由流量提供方提供,长度为16位(即数据块为128位)

测试案例:

txt
原文: {"md5":"test"}
密码: 1234567812345678
密文: HnLNCOW7e1bc3PioyC/6yg==

加解密在线校验请点击我