API说明

- 授权认证,调用接口需要将 appid,timestamp, nonce 和 sign放在url参数中。比如:api/v1/Subsidy/Get?appid=xxxx&timestamp=xxxx&nonce=xxxx&sign=xxxx

  • 接口统一为 UTF-8 编码;
  • 接口支持 http 和 https;
  • 请求方式为POST。
  • POST的内容为param
appid & appsecret
  • 服务器端生成appid&appsecret对,提供给访问方
timestamp
  • 1970-01-01以来的秒数
  • 和服务器间隔超过10分钟无效
nonce
  • 随机值字符串

加签方式

sign=MD5(appsecret + param + appid + timeStamp + nonce + appsecret)

例子

  • appid: “Jx3wQMD1”
  • timestamp: “1660529980”
  • nonce:”tNjfHueAVXCMVTXXVYkvWRyo3S2SLhBp”
  • app_secret:”d68397c4fb671bc024e24e1964b067cc35388818”
GET
  • sign:”e1e1351c9f08ccda6937087fd1ec58d8”
POST
  • param(raw): {“LogonName”:”fj”,”Point”:1000,”Subsidy”:100}
  • sign:”270b8548e052eaf7e6bd98f99f8cb53c”

响应

参数名 是否必须 类型 说明
code int 错误码,0为正确,其他为错误值,错误时,message为错误详情
message String 错误信息
result 对象 正确返回结果,根据消息不同而不同
返回值(code)
    public const uint CODE_BASE = 1000;
    public const uint CODE_APPID_MISSING = 1001; //    缺失appid参数
    public const uint CODE_APPID_INVALID = 1002; //    合法的AppID
    public const uint CODE_TIMESTAMP_MISSING = 1003; //    缺失timestamp参数
    public const uint CODE_TIMESTAMP_INVLID = 1004; // 无效timestamp
    public const uint CODE_NONCE_MISSING = 1005; //    缺失nonce参数
    public const uint CODE_SIGN_MISSING = 1007; //    缺失sign参数
    public const uint CODE_SIGN_INVALID = 1008; //    SIGN参数无效

    public const uint CODE_JSON_INVALID = 1010; //    Json参数无效
    public const uint CODE_JSON_MISSING = 1011; //    缺失Json参数

代码

Java
//生成指定长度随机字符串
public static String getRandomString(int length) {
    String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    Random random = new Random();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < length; i++) {
        int number = random.nextInt(62);
        sb.append(str.charAt(number));
    }
    return sb.toString();
}
// 发送http请求
public static String sendPost(String url,String param)
{
    String result="";
    try{
        URL httpurl = new URL(url);
        HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection();
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        PrintWriter out = new PrintWriter(httpConn.getOutputStream());
        out.print(param);
        out.flush();
        out.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
        String line;
        while ((line = in.readLine())!= null)
        {
            result += line;
        }
        in.close();
    }catch(Exception e){
        System.out.println("ApiDemo:"+e);
    }
    return result;
}
// Api测试demo,
public static void testApi(){
    String url = "http://127.0.0.1:9130/api/v1/Subsidy/Get";
    String appid = "Jx3wQMD1";
    String appsecret = "d68397c4fb671bc024e24e1964b067cc35388818";
    // 生成随机字符串
    String nonce = getRandomString(32);
    // 调用时间戳(1970/01/01以来的秒数)
    long seconds = System.currentTimeMillis() / 1000l;
    String timestamp = "" + seconds;
    // 接口内容
    String content = "{\"LogonName\":\"fj\"}";
    MessageDigest md5 = null;
    // 生成签名
    String signStr = "";
    try {
        md5 = MessageDigest.getInstance("MD5");
        // 转换为MD5码
        String input = appsecret + content + appid + timestamp + nonce + appsecret;
        md5.update(input.getBytes());
        signStr = new BigInteger(1, md5.digest()).toString(16);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    // 生成查询字符串
    String queryString = "";
    queryString += "appid=" + appid;
    queryString += "&timestamp=" + timestamp;
    queryString += "&nonce=" + nonce;
    queryString += "&sign=" + signStr;
    url += "?" + queryString;
    System.out.println("url:"+ url);
    System.out.println("content:"+ content);
    String result = sendPost(url, content);
    System.out.println("result:"+ result);
}
js
//产生随机字符串
function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}

var data = {
    appid: "Jx3wQMD1",
};
data.nonce = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
data.timestamp = Math.round(new Date().getTime()/1000);
var app_secret="d68397c4fb671bc024e24e1964b067cc35388818"
var CryptoJS = require("crypto-js");
//pm.request.body.raw 为Post的内容,可以为空字符("")
var md5str = CryptoJS.MD5(app_secret + pm.request.body.raw +  data.appid + data.timestamp + data.nonce + app_secret).toString();
data.sign = md5str;

// 处理请求地址
var query = require('querystring');
var s = query.stringify(data);
pm.request.url += '?' + s;
文档更新时间: 2022-09-08 14:54   作者:方杰