1. 程式人生 > >Java微信公眾平臺開發(六)--微信開發中的token獲取

Java微信公眾平臺開發(六)--微信開發中的token獲取

轉自:http://www.cuiyongzhi.com/post/44.html

(一)token的介紹

引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效!

(二)token的獲取參考文件

獲取的流程我們完全可以參考微信官方文件:http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html

 如圖:

1.png

(三)token獲取流程分析

  • 從公眾平臺獲取賬號的AppID和AppSecret;

  • token獲取並解析儲存執行體;

  • 採用任務排程每隔兩小時執行一次token獲取執行體;

(四)token的獲取流程的具體實現

①獲取appid和appsecret

在微信公眾平臺【開發】——>【基本配置】中可以檢視到我們需要的兩個引數:

2.png

這裡我們將他們定義到我們的配置檔案【wechat.properties】中,大致程式碼為:

1 2 3 4 #獲取到的appid appid=wx7e32765bc24XXXX  #獲取到的AppSecret AppSecret=d58051564fe9d86093f9XXXXX

②token獲取並解析儲存執行體的程式碼編寫

由於在這裡我們需要通過http的get請求向微信伺服器獲取時效性為7200秒的token,所以我在這裡寫了一個http請求的工具類,以方便我們的使用,如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 package  com.cuiyongzhi.wechat.util;   import  java.io.BufferedInputStream; import  java.io.BufferedReader; import  java.io.IOException; import  java.io.InputStream; import  java.io.InputStreamReader; import  java.io.OutputStreamWriter; import  java.net.MalformedURLException; import  java.net.URI; import  java.net.URL; import  java.net.URLConnection; import  java.util.ArrayList; import  java.util.List; import  java.util.Map; import  java.util.Set; import  java.util.zip.GZIPInputStream;   import  org.apache.http.HttpResponse; import  org.apache.http.NameValuePair; import  org.apache.http.client.ClientProtocolException; import  org.apache.http.client.HttpClient; import  org.apache.http.client.entity.UrlEncodedFormEntity; import  org.apache.http.client.methods.HttpGet; import  org.apache.http.client.methods.HttpPost; import  org.apache.http.entity.StringEntity; import  org.apache.http.impl.client.DefaultHttpClient; import  org.apache.http.message.BasicNameValuePair; import  org.apache.http.protocol.HTTP; import  org.apache.http.util.EntityUtils;   /**   * ClassName: HttpUtils     * @Description: http請求工具類   * @author dapengniao   * @date 2016年3月10日 下午3:57:14   */ @SuppressWarnings ( "deprecation" ) public  class  HttpUtils {        /**       * @Description: http get請求共用方法       * @param @param reqUrl       * @param @param params       * @param @return       * @param @throws Exception       * @author dapengniao       * @date 2016年3月10日 下午3:57:39       */      @SuppressWarnings ( "resource" )      public  static  String sendGet(String reqUrl, Map<String, String> params)              throws  Exception {          InputStream inputStream =  null ;          HttpGet request =  new  HttpGet();          try  {              String url = buildUrl(reqUrl, params);              HttpClient client =  new  DefaultHttpClient();                request.setHeader( "Accept-Encoding" "gzip" );              request.setURI( new  URI(url));                HttpResponse response = client.execute(request);                inputStream = response.getEntity().getContent();              String result = getJsonStringFromGZIP(inputStream);              return  result;          finally  {              if  (inputStream !=  null ) {                  inputStream.close();              }              request.releaseConnection();          }        }        /**       * @Description: http post請求共用方法       * @param @param reqUrl       * @param @param params       * @param @return       * @param @throws Exception       * @author dapengniao       * @date 2016年3月10日 下午3:57:53       */      @SuppressWarnings ( "resource" )      public  static  String sendPost(String reqUrl, Map<String, String> params)              throws  Exception {          try  {              Set<String> set = params.keySet();              List<NameValuePair> list =  new  ArrayList<NameValuePair>();              for  (String key : set) {                  list.add( new  BasicNameValuePair(key, params.get(key)));              }              if  (list.size() >  0 ) {                  try  {                      HttpClient client =  new  DefaultHttpClient();                      HttpPost request =  new  HttpPost(reqUrl);                        request.setHeader( "Accept-Encoding" "gzip" );                      request.setEntity( new  UrlEncodedFormEntity(list, HTTP.UTF_8));                        HttpResponse response = client.execute(request);                        InputStream inputStream = response.getEntity().getContent();                      try  {                          String result = getJsonStringFromGZIP(inputStream);                            return  result;                      finally  {                          inputStream.close();                      }                  catch  (Exception ex) {                      ex.printStackTrace();                      throw  new  Exception( "網路連線失敗,請連線網路後再試" );                  }              else  {                  throw  new  Exception( "引數不全,請稍後重試" );              }          catch  (Exception ex) {              ex.printStackTrace();              throw  new  Exception( "傳送未知異常" );          }      }        /**       * @Description: http post請求json資料       * @param @param urls       * @param @param params       * @param @return       * @param @throws ClientProtocolException       * @param @throws IOException       * @author dapengniao       * @date 2016年3月10日 下午3:58:15       */      public  static  String sendPostBuffer(String urls, String params)              throws  ClientProtocolException, IOException {          HttpPost request =  new  HttpPost(urls);            StringEntity se =  new  StringEntity(params, HTTP.UTF_8);          request.setEntity(se);          // 傳送請求          @SuppressWarnings ( "resource" )          HttpResponse httpResponse =  new  DefaultHttpClient().execute(request);          // 得到應答的字串,這也是一個 JSON 格式儲存的資料          String retSrc = EntityUtils.toString(httpResponse.getEntity());          request.releaseConnection();          return  retSrc;        }        /**       * @Description: http請求傳送xml內容       * @param @param urlStr       * @param @param xmlInfo       * @param @return       * @author dapengniao       * @date 2016年3月10日 下午3:58:32       */      public  static  String sendXmlPost(String urlStr, String xmlInfo) {          // xmlInfo xml具體字串            try  {              URL url =  new  URL(urlStr);              URLConnection con = url.openConnection();              con.setDoOutput( true );              con.setRequestProperty( "Pragma:" "no-cache" );              con.setRequestProperty( "Cache-Control" "no-cache" );              con.setRequestProperty( "Content-Type" "text/xml" );              OutputStreamWriter out =  new  OutputStreamWriter(                      con.getOutputStream());              out.write( new  String(xmlInfo.getBytes( "utf-8" )));              out.flush();              out.close();              BufferedReader br =  new  BufferedReader( new  InputStreamReader(                      con.getInputStream()));              String lines =  "" ;              for  (String line = br.readLine(); line !=  null ; line = br

相關推薦

公眾平臺被動回覆使用者訊息開發全步驟

一、微信開發模式 二、自己的伺服器和域名 1.可以購買阿里雲的伺服器和域名。 2.使用內網滲透軟體NATAPP把自己的計算機打造成自定義伺服器,會自動擁有一個域名。 缺點就是關掉後域名會變化,因為是免費的,可以購買付費的就不會變了。 ② 建立隧道: 需

公眾平臺百度天氣預報開發

2.實現天氣資訊功能baiduWeather.php<?php /** * 使用百度天氣預報介面獲取城市天氣資訊案例實現 */ //獲取城市天氣資訊 function getWeatherInfo($cityName){ if

公眾平臺訊息介面PHP版開發教程

三、驗證介面 用自己的個人微信關注下你的公眾賬號,給這個賬號發一條訊息過去,收到原樣的訊息返回,即驗證成功了。 四、開始自定義回覆 註釋掉$wechatObj->valid(); 這行,同時去掉//$wechatObj->responseMsg();這行的註釋。 你

Java公眾平臺開發()--開發token獲取

轉自:http://www.cuiyongzhi.com/post/44.html (一)token的介紹 引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。acce

Java公眾平臺開發(十)--網頁授權(OAuth2.0授權)獲取用戶基本

php sendget 會話 oauth lsp row code end except 轉自:http://www.cuiyongzhi.com/post/78.html 好長時間沒有寫文章了,主要是最近的工作和生活上的事情比較多而且繁瑣,其實到現在我依然還是感覺有些迷茫

篇 :公眾平臺開發實戰Java版之如何自定義公眾號選單

我們來了解一下 自定義選單建立介面: 自定義選單查詢介面: 自定義選單刪除介面: 自定義選單介面可實現多種型別按鈕,如下: 1、click:點選推事件 使用者點選click型別按鈕後,微信伺服器會通過訊息介面推送訊息型別為event 的結構給開發者(參考訊息介面指

Java公眾平臺開發()——開發token獲取

(一)token的介紹 引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致

公眾平臺開發教程Java版() 事件處理(選單點選/關注/取消關注)

前言: 事件處理是非常重要的,這一章講講常見的事件處理 1、關注/取消關注 2、選單點選 事件型別介紹: 在微信中有事件請求是訊息請求中的一種。請求型別為:event 而event事件型別又分多種事件型別,具體分關注:subscribe取消關注:unsubscribe自定義選單點選:CLICK    根

Java公眾平臺開發之OAuth2.0網頁授權

col nts har 順序 pan getcount iba unionid syn 根據官方文檔點擊查看在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權

java公眾平臺開發

http style 消息發送 req gets 信號 多說 接收消息 servle 微信公眾平臺的開發,總體說來也是簡單的,就是先大概看下微信公眾平臺接口文檔。 請先大概瀏覽一下API手冊,我們會發現,推送給微信服務器的數據有兩種:xml的形式,和json的形式. 那麽

JAVA帶你一步一步實現公眾開發(一)--接入微公眾平臺

(一)接入流程解析 在我們的開發過程中無論如何最好的參考工具當然是我們的官方文件了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html 通過上面我們可以看出其中接入微信公眾平臺開發,開發者需要按照如下

java公眾平臺開發(使用sunny ngrok設定外網url)

使用Sunny-Ngrok贈送的免費域名進行http服務對映 1、首先在本站註冊成為會員 2、開通隧道 在上圖中表單資訊解釋:     隧道名稱:可以隨便填寫,只是為了使用者在往後之後這個隧道是幹嘛的  

Java公眾平臺開發之自定義選單

一、自定義選單的說明和按鈕型別 1、選單說明 1)自定義選單最多包括3個一級選單,每個一級選單最多包含5個二級選單。 2)一級選單最多4個漢字,二級選單最多7個漢字,多出來的部分將會以“...”代替。 3)建立自定義選單後,選單的重新整理策略是,在使用者進入公

公眾平臺開發教程(含java程式碼)》下載

2018年11月02日 14:23:40 茹粿鰅莧丨你 閱讀數:7 標籤: 程式設計 資料 區

公眾平臺java開發詳解(工程程式碼+解析)

說明:本次的教程主要是對微信公眾平臺開發者模式的講解,網路上很多類似文章,但很多都讓初學微信開發的人一頭霧水,所以總結自己的微信開發經驗,將微信開發的整個過程系統的列出,並對主要程式碼進行講解分析,讓初學者儘快上手。在閱讀本文之前,應對微信公眾平臺的官方開發文件有所瞭解,知

Java公眾平臺開發之素材管理

微信素材管理和群發這塊文件對Java很不友好。本文只對新增臨時素材,新增永久素材做介紹,其餘獲取、刪除、修改自行補充公眾號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用介面特別是傳送訊息時,對多媒體檔案、多媒體訊息的獲取和呼叫等操作,是通過media_id來進行的。素

【備忘】【No5】公眾平臺開發入門到實戰開發視訊教程(Java+PHP)

(1)微信入門視訊 共14節課 (2)微信公眾平臺搭建與開發揭祕 共50節課 (3)深入淺出微信公眾平臺實戰開發(微網站、LBS雲、Api介面呼叫、服務號高階介面) 共16節課 (4)微信公眾平臺搭建與開發揭祕50集 (5)兄弟連24集 微信開發VIP教程 (6)微信jav

Java公眾平臺開發(三)--接收訊息的分類及實體的建立

轉自:http://www.cuiyongzhi.com/post/41.html 前面一篇有說道應用伺服器和騰訊伺服器是通過訊息進行通訊的,並簡單介紹了微信端post的訊息型別,這裡我們將建立訊息實體以方便我們後面的使用! (一)訊息實體基礎類

Java公眾平臺開發(二)--伺服器post訊息體的接收

轉自: http://www.cuiyongzhi.com/post/39.html 在上一篇的文章中我們詳細講述瞭如何將我們的應用伺服器和微信騰訊伺服器之間的對接操作,最後接入成功,不知道你有沒有發現在上一篇的【controller】中我定義了一個get方法和一個post方法,但是在使用過程中我

Java公眾平臺開發(一)--接入微公眾平臺

轉自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我們的開發過程中無論如何最好的參考工具當然是我們的官方文件了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html