access_token 做为微信接口全局访问的惟一调用凭据 ,公众号调用各个接口时候都须要使用access_token 。java
access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将致使上次获取的access_token失效。 json
注意:
小程序
access_token 尽可能获取一次,而后各个地方调用便可,切勿屡次请求接口获取,防止形成冲突。
文档原文以下:api
接口调用请求说明安全
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明服务器
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户惟一凭证 |
secret | 是 | 第三方用户惟一凭证密钥,即appsecret |
返回说明微信
正常状况下,微信会返回下述JSON数据包给公众号:app
{"access_token":"ACCESS_TOKEN","expires_in":7200}
参数说明微信公众平台
参数 | 说明 |
---|---|
access_token | 获取到的凭证 |
expires_in | 凭证有效时间,单位:秒 |
错误时微信会返回错误码等信息,JSON数据包示例以下(该示例为AppID无效错误):工具
{"errcode":40013,"errmsg":"invalid appid"}
返回码说明
返回码 | 说明 |
---|---|
-1 | 系统繁忙,此时请开发者稍候再试 |
0 | 请求成功 |
40001 | AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性 |
40002 | 请确保grant_type字段值为client_credential |
40164 | 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。) |
public class AccessToken { private String expires_in; //成功有效时间 private String access_token; // 普通Token private String errcode; //失败ID private String errmsg; //失败消息 private long expiresIn; //过时时间 , 默认2小时 public long getExpiresIn() { return expiresIn; } public void setExpiresIn(long expiresIn) { this.expiresIn = expiresIn; } public String getExpires_in() { return expires_in; } public void setExpires_in(String expires_in) { this.expires_in = expires_in; } public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public String getErrcode() { return errcode; } public void setErrcode(String errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } /** * * @param expires_in 从微信服务器获取到的过时时间 * @param access_token 从微信服务器获取到的过时时间access-token */ public AccessToken(String expires_in, String access_token) { this.access_token = access_token; //当前系统时间+上过时时间 expiresIn = System.currentTimeMillis() + Integer.parseInt(expires_in) * 1000; } //判断token是否过时 public boolean isExpired() { return System.currentTimeMillis() > expiresIn; } }
HttpUtil工具
/** * @param url 发送get请求方法 * @return */ public static String sendHttpByGet(String url){ try { URL urlGet = new URL(url); URLConnection urlConnection = urlGet.openConnection(); InputStream is = urlConnection.getInputStream(); String inputStreamData = getInputStreamData(is); return inputStreamData; } catch (Exception e) { logger.info("发送get请求方法异常! " + e); e.printStackTrace(); } return null; }
请求获取
public class AccessTokenTool { static Logger logger = LoggerFactory.getLogger(AccessTokenTool.class); //本身的appid 和 appsecret private static final String APPID = "wxb24662xxxx"; private static final String APPSECRET = "1864f91ecdd3xxxxxxxxxxx"; //用于存储token private static AccessToken at; /** * @return * @throws Exception */ private static com.example.bwjf.demo.pojo.AccessToken getAccessToken(){ String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; accessTokenUrl = accessTokenUrl.replace("APPID",APPID).replace("APPSECRET",APPSECRET); logger.info(" 微信全局token的url " + accessTokenUrl ); String message = HttpUtil.sendHttpByGet(accessTokenUrl); /** * 获取access_token * 成功返回的json : {"access_token":"ACCESS_TOKEN","expires_in":7200} * 失败放的json : {"errcode":40013,"errmsg":"invalid appid"} * */ JSONObject jsonObject = JSONObject.parseObject(message); String accessToken = jsonObject.getString("access_token"); String expires_in = jsonObject.getString("expires_in"); String errcode = jsonObject.getString("errcode"); logger.info("accessToken = " + accessToken); logger.info("expires_in = "+ expires_in); if(!jsonObject.containsKey(errcode)){ //建立token,而且存起来 at = new AccessToken(expires_in,accessToken); return at; } return null; } /** * 对外提供获取 AccessTokenTool * @return */ public static String getToken(){ if(at==null || at.isExpired() == false){ //logger.info("过时"); try { getAccessToken(); } catch (Exception e) { e.printStackTrace(); } } return at.getAccess_token(); } }
注:
认证后公众号,可能出现的问题调用Api无权限或者为空 (开发者测试帐号除外 )
请在微信公众平台,安全中心设置ip白名单便可!