1. 程式人生 > >Java 微信公眾號(二)——獲取access_token

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();     } }