##接口訪問憑證
###簡介
平臺為開發者提供的一系列接口,在調用時都需要傳入接口訪問憑證access_token。
###獲取接口憑證
自定義菜單的創建、查詢、刪除都需要調用公眾平臺開放的自定義菜單接口,而調用接口需要先獲取 access_token(接口訪問憑證)。獲取憑證接口的請求地址如下
~~~
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
~~~
通過發起HTTP GET請求調用該接口,調用接口時需傳入參數grant_type、appid和sercet。其中grant_type是授權類型,這里只需要傳入固定值 client_credential即可,appid和secret可以再公眾號開發者中心找到。如果接口調用成功,會返回如下json結果
~~~
{"access_token":"ACCESS_TOKEN","expires_in":7200}
~~~
其中 access_token 就是我們需要的接口訪問憑證,它是一個長度上百位的加密字符串;而expires_in 是憑證的有效期,單位是秒
* * * * *
######**提示**:access_token的有效期是7200秒,也就是2個小時。這就意味著,并不是每次訪問通用接口都需要重新獲取access_token,可以將獲取到的access_token存儲到緩存或數據庫中,只要access_token沒有過期,就能取出來繼續使用
* * * * *
###獲取訪問憑證的方式
獲取憑證的方式可以分為兩種: 手動獲取和程序獲取。手動獲取就是講請求地址放到瀏覽器地址欄進行訪問,而程序獲取是指通過編程調用獲取憑證接口。兩種獲取方式本質都是向微信服務器發送HTTPS GET請求。
####1.手動獲取
手動獲取比較簡單,直接將替換好參數的url放到瀏覽器上進行訪問,正常情況下就會返回所需要的憑證信息
####2.程序獲取
在Java中,訪問HTTPS鏈接需要用到HttpsURLConnection類。代碼示例如下
ps: 代碼中需要用到 “自定義信任管理器”請點擊鏈接 :
[自定義信任管理器](http://www.hmoore.net/yongxin/wxapi/196780)
~~~
/*
* 測試獲取憑證(HTTPS GET請求)
*/
public class TokenTest{
public static void man(String[] args) throws Exception{
//獲取憑證接口地址
String tokneUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
//建立連接
URL url = new URL(tokenUrl);
HttpsURLConnection coon = (HTTPSURLConnection) url.openConnection();
//使用自定義的信任管理器
TrusManager[] tm = {new MyX509TrustManager()};
SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null,tm,new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
conn.setSSLSocketFactory(ssf);
conn.setDoInput(true);
//設置請求方式
conn.setRequestMethod("GET");
//取得輸入流
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//設置相應內容
StringBuffer buffer = new StringBuffer();
String str = null;
while((str = bufferedReader.readLine()) != null){
buffer.append(str);
}
//關閉、釋放資源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
conn.disconnect();
//輸出返回結果
System.out.println(buffer);
}
}
~~~
以上代碼先通過URL對象的 openConnection()方法與微信的憑證處理服務建立連接,并將HTTPS請求方式設置為GET。再使用HttpsURLConnection類的getInputStream()方法得到輸入流,讀取輸入流中的內容(正常情況下得到的就是憑證信息)。接下來從Json字符串中解析出access_token 和 expires_in 就可以了