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白名單便可!