Java 微信公眾號(二)——獲取access_token
微信開發者文件會發現——>access_token是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效。
在獲取access_token時使用的是get請求,那麼也就是說我們需要在通過httpclient傳送以個get請求
最後返回的是一個json格式
下面直接貼入程式碼
此時已經可以獲取到access_token了,但是還不滿足我們的開發使用,因為在微信對於access_token有時間要求,access_token會在兩個小時後失效,並且一天只能呼叫2000次,所以我們需要對程式碼進行一個封裝,下面是真正使用的
package com.website.commons.web.utils; import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONObject; public class Constant { public static final String APPID = "你的APPID"; public static final String APPSECRET = "你的APPSECRET"; /**全域性token 所有與微信有互動的前提 */ public static String ACCESS_TOKEN; /**全域性token上次獲取事件 */ public static long LASTTOKENTIME; /** * 獲取全域性token方法 * 該方法通過使用HttpClient傳送http請求,HttpGet()傳送請求 * 微信返回的json中access_token是我們的全域性token */ public static synchronized void getAccess_token(){ if(ACCESS_TOKEN == null || System.currentTimeMillis() - LASTTOKENTIME > 7000*1000){ try { //請求access_token地址 String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx9c3336b0bdb29172&secret=e22ea5453c6c10326045a00112c873f4"; //建立提交方式 HttpGet httpGet = new HttpGet(url); //獲取到httpclien HttpClient httpClient = new DefaultHttpClient(); //傳送請求並得到響應 HttpResponse response = httpClient.execute(httpGet); //判斷請求是否成功 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //將得到的響應轉為String型別 String str = EntityUtils.toString(response.getEntity(), "utf-8"); //字串轉json JSONObject jsonObject = new JSONObject(str); //輸出access_token System.out.println((String) jsonObject.get("access_token")); //給靜態變數賦值,獲取到access_token ACCESS_TOKEN = (String) jsonObject.get("access_token"); //給獲取access_token時間賦值,方便下此次獲取時進行判斷 LASTTOKENTIME = System.currentTimeMillis(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { getAccess_token(); } }