SDK入门

登录认证

我们约定所有的接口都需要认证,所有的接口请求头Header都需要带以下字段

字段名类型说明
accessIdString用户的appId
timestampString时间戳(秒)
signatureString签名字段

appId获取

用户需前往 用户前端页面开启SDK功能 生成秘钥appId

时间戳生成

下面以java代码为例

String time=(System.currentTimeMillis()/1000L)+"";

签名

1 拼接签名字符串

1.1 GET 请求

用户需把Get请求参数按传输顺序拼接,参数为空或为null不参与拼接.比如 http://192.168.0.1/info?a=3&b=3 转换结果为

a=3&b=3

注意:如果是参数是带在路径上面的可以不用转换 例如 http://192.168.0.1/info/3

1.2 其他请求

用户需把其他请求里面的body转换为JSON (这里特指请求头为content-type="application/json")

1.3 拼接字段

下面使用java代码说明

StringBuffer s2s = new StringBuffer(); 
        s2s.append("[");
        s2s.append(reqMethod.toUpperCase()); //请求方法 get post put delete 这些
        s2s.append("]");
        s2s.append(path); //请求路径 例如 192.168.0.1/info?a=3  路径为 /info  192.168.0.1/info/b  路径为/info/b
        s2s.append("&");
        s2s.append(appId); //用户前端页面生成的appId
        s2s.append("&");
        s2s.append(timestamp); //时间戳
        if(!StrUtil.isEmpty(jsonText)){  //如果请求内容为空不需要参与签名
            s2s.append("&").append(jsonText);
        }
        return s2s.toString();

2 生成签名

本sdk加密方式采用的是SHA256withRSA 下面是java代码签名示例

        RSA rsa=new RSA(privateKey,null);
        Signature sign = Signature.getInstance("SHA256withRSA");
        sign.initSign(rsa.getPrivateKey());
        sign.update(sigStr.getBytes(Charset.forName("UTF-8"))); //sinStr为你的签名字符串
        byte[] bytes=sign.sign();
        String signResult= Base64.getEncoder().encodeToString(bytes); //signResult 为签名结果

3 签名例子

现有以下拼接字段 签名私钥:

MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANnTr4H9traEQlZQo/Uy92E6ikWVt6x3vRMVLqAsSUGEz4tdh8fs4YMlrk+TRDYjTxPA6w5LMd+/AB1FEXjQs2M1cJx5tWoZSMusZgQnfM9P0FcsmgQ2tJLkSM435my1VnNdxn6KDvoaummhu5zin0BCfZC/QghwHg6vcz32GWuHAgMBAAECgYAbfkhK3XWYKtsJSaCwJvsp+/ljgrFN+kep5sSy9clXP4acngpbIG8ZnldrzCLSEc8o0fLjzneLOJswlpJNJUuxexeeoIY9hOdwh1gDXch0ihbY7h1zey70wbLUnLhgkAkAvmghlvZTlziKFdaRPYfpN6VU52BeDRPzy/uBBLh7TQJBAPZ75xJ9j8MQedcKr/0xVkhThA51gUwr9aQOz0g/Alf/DaOTQR3NcPob3lrYF+uDdnX2Yh2Ilj785eTITCOwdb0CQQDiPI2+V47j9GKFdP50a/gLliu6tYcHMu97LOZ0Uy5ABAjNavZvRqvkLZ/fJ8IYe1F8Ox1XMooA1Ew20WSPshCTAkEAvLQzPia+73onrYjTH6asBgdabK9tY+Gr2AQ2kXsb0j7ENF1CVwy31+OKIkaaWYZ2JO2SREYTsPlxD+yAzjoEiQJAfIIe8DZ36XTCE/jDYYdaR+YpwuPMoGWj7wJTAooU1h5iScsoPS2DxFxntATJiXe07M4L48VotfQgzbqHwZ2aCQJAJdkLHqsWV51AHTabg+Hod/ZLZJP+avsq1BakGNU/ByAqvGdL2QKuwfhOLKgEvhmJwi49i9Skb3bp+JhDvxRU1w==

签名内容:

[GET]/api/3dcat/user/info&33344333&1625818669&a=34&b=34

签名结果

Orm3jq4+MZzJta0iSdHsLA3v0klYeJZv7MmRJNlyCRVq4An4GshYblm7jF+wzrSBciAvA0Bdq8NojhIFuc1Yfw47ETibJEOvsq9PCvyL6WyBhe1CEwL/8QPZOR8K4ZwSiJaIqDcuXYzt7fl4DSpkBGADcbbPKDp4hNafJIWNS2g=

接口返回格式

这里约定 接口 返回的http 状态码 为200 其他为失败, code 返回 为200 其他为失败

字段名类型说明
codeint返回200 为成功(注意不是http返回码)
dataObject返回的数据对象
{
    "code": 200, 
    "data": {
        "d": "34", 
        "s": "34"
    }, 
    "message": "success", 
    "requestId": "343434", 
    "result": true, 
    "serverTime": 1625824236454, 
    "version": "1.0.0"
}

常用返回状态码

code值说明
200成功
100失败
610签名过期
611非法签名
612非法鉴权
901请求头参数不全
902appId不正确
QQ: 912428984
+86 18588403835