获取AccessToken
接口说明
- 为每个第三方访问者发放AppId和AppSecret
- 访问者使用AppId和AppSecret通过本接口获取AccessToken
请求URL
/openapi/v2/common/getAccessToken?appid=xxxx×tamp=xxxx&nonce=xxxx&sign=xxxx
- 接口统一为 UTF-8 编码;
- 接口支持 http 和 https;
- 请求方式为GET。
请求参数
appid & appsecret
- 服务器端生成appid&appsecret对,提供给访问方
timestamp
- 1970-01-01以来的秒数
- 和服务器间隔超过10分钟无效
nonce
- 随机值字符串
加签方式
sign=MD5(appsecret + appid + timeStamp + nonce + appsecret)
返回结果
参数名 | 是否必须 | 类型 | 说明 |
---|---|---|---|
Token | 是 | string | AccessToken |
ExpireTime | 是 | string | 过期时间 |
例子
- appid: “Jx3wQMD1”
- timestamp: “1676874831”
- nonce:”cbQSLn4Ipaa9dUBrMErWAlnGFO3fewY”
- app_secret:”d68397c4fb671bc024e24e1964b067cc35388818”
GET
- sign:”5aef2812c4aa99ac901d66a5edf26e15”
响应
参数名 | 是否必须 | 类型 | 说明 |
---|---|---|---|
code | 是 | int | 错误码,0000为正确,其他为错误值,错误时,message为错误详情 |
message | 是 | String | 错误信息 |
result | 是 | 对象 | 正确返回结果,根据消息不同而不同 |
返回值(code)
错误code码说明
code码 | 英文code | 说明 |
---|---|---|
41001 | CODE_APPID_MISSING | 缺失appid参数 |
41002 | CODE_APPID_INVALID | 无效的AppID |
41003 | CODE_TIMESTAMP_MISSING | 缺失timestamp参数 |
41004 | CODE_TIMESTAMP_INVLID | 无效timestamp |
41005 | CODE_NONCE_MISSING | 缺失nonce参数 |
41007 | CODE_SIGN_MISSING | 缺失sign参数 |
41008 | CODE_SIGN_INVALID | sing参数无效 |
41010 | CODE_JSON_INVALID | Json参数无效 |
41011 | CODE_JSON_MISSING | 缺失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/v2/common/GetAccessToken";
String appid = "Jx3wQMD1";
String appsecret = "d68397c4fb671bc024e24e1964b067cc35388818";
// 生成随机字符串
String nonce = getRandomString(32);
// 调用时间戳(1970/01/01以来的秒数)
long seconds = System.currentTimeMillis() / 1000l;
String timestamp = "" + seconds;
// 接口内容
MessageDigest md5 = null;
// 生成签名
String signStr = "";
try {
md5 = MessageDigest.getInstance("MD5");
// 转换为MD5码
String input = appsecret + 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);
String result = sendGet(url);
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 + 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;
文档更新时间: 2023-02-23 13:39 作者:方杰