API说明
- 授权认证,调用接口需要将 appid,timestamp, nonce 和 sign放在url参数中。比如:api/v1/Subsidy/Get?appid=xxxx×tamp=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 += "×tamp=" + 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 作者:方杰