Skip to content
大纲

服务端 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
}