Appearance
服务端 API
注意
以下文档内容中"{}"包含的变量信息均可从客户端凭证文件中获取,对接过程中需替换对应的值
一.获取客户端凭证
1.1.获取客户端凭证
通过 <运营人员> 获取**<客户端凭证> **文件,其中包含: 租户凭证信息 和 **访问配置信息 **
租户凭证信息: 包含 客户端凭证 和 客户端公钥
客户端凭证: 租户的访问标识,用于识别租户身份
客户端公钥: 参数的加密秘钥,用于需要参数加密接口的加密秘钥
访问配置信息: 包含 测试环境地址、生产环境地址、渠道编码、应用编码
1.2.获取 Token 接口
**接口描述:**获取全局唯一后台接口调用 Token,token 有效期为 3600s,需要进行妥善保存
**调用地址:**POST {能力访问地址}/ops-kit/api/token
地址说明:
能力访问地址:<客户端凭证>中<访问配置信息>的<测试环境地址>或<生产环境地址>
**请求格式:**application/json
请求头部:
sh
X-AOS-Voucher:<客户端凭证>
请求参数:
json
{
"data": "<加密(请求参数JSON)>" //加密方法见:二.请求参数加密
}
返回参数:
json
{
"code": 1,
"message": "",
"data": {
"token": "<接口调用Token>"
}
}
1.3.续期访问 Token
**接口描述:**接口调用 Token 续期,时间 3600s,Token 值不会变
**调用地址:**POST {能力访问地址}/ops-kit/api/token/renewal
地址说明:
能力访问地址:<客户端凭证>中<访问配置信息>的<测试环境地址>或<生产环境地址>
**请求格式:**application/json
请求头部:
sh
X-AOS-Voucher:<客户端凭证>
Authorization:<接口调用Token>
**请求参数:**无
返回参数:
json
{
"code": 1,
"message": "",
"data": {}
}
二.请求参数加密
提供二种方式加密
java
# Java方式加密
## Maven依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.10</version>
</dependency>
## 样例代码
public static void main(String[] args) throws Exception {
String payload = "{\"realName\":\"xxxx\",\"idType\":\"111\",\"idCardNo\":\"xxxxxxxxxxxx\",\"type\":\"1\"}";
String publicKeyBase64 = "<客户端公钥>";
//HuTool加密
byte[] publicKey = Base64.getDecoder().decode(publicKeyBase64);
ASN1EncodableVector vec = new ASN1EncodableVector();
ASN1EncodableVector param = new ASN1EncodableVector();
param.add(new ASN1ObjectIdentifier("1.2.840.10045.2.1"));
param.add(new ASN1ObjectIdentifier("1.2.156.10197.1.301"));
vec.add(new DERSequence(param));
vec.add(new DERBitString(publicKey));
publicKey = new DERSequence(vec).getEncoded("DER");
SM2 sm2 = SmUtil.sm2(null, publicKey);
sm2.setMode(SM2Engine.Mode.C1C3C2);
String encryptStr = Base64.getEncoder().encodeToString(sm2.encrypt(payload, KeyType.PublicKey));
System.out.println("HuTool加密: " + encryptStr);
}
go
# Go方式加密
## 库依赖
import (
"crypto/rand"
"github.com/tjfoc/gmsm/sm2"
"math/big"
)
## 样例代码
// SM2Encrypt SM2加密
func SM2Encrypt() (dataSm2 []byte, err error) {
dataStr := "{\"realName\":\"xxxx\",\"idType\":\"111\",\"idCardNo\":\"xxxxxxxxxxxx\",\"type\":\"1\"}"
publicKeyStr := "<客户端公钥>"
//1.公钥Base64解密
publicKey, err := base64.StdEncoding.DecodeString(publicKeyStr)
if err != nil {
return nil, err
}
//2.数据 转 []byte
data := []byte(dataStr)
//3.数据SM2加密
pubk := &sm2.PublicKey{
Curve: sm2.P256Sm2(),
X: new(big.Int).SetBytes(publicKey[1:33]),
Y: new(big.Int).SetBytes(publicKey[33:]),
}
dataSm2, err := sm2.Encrypt(pubk, data, rand.Reader, sm2.C1C3C2)
if err != nil {
return nil, err
}
return dataSm2, nil
}