使用Java語言開發(fā)微信公眾平臺(五)——獲取access_token

在前四期的文章中,我們分別學(xué)習(xí)了“環(huán)境搭建與開發(fā)接入”、“文本消息的接收與響應(yīng)”、“被關(guān)注回復(fù)與關(guān)鍵詞回復(fù)”、“圖文消息的發(fā)送與響應(yīng)”等環(huán)節(jié)。那么,從本篇博文開始,我們將進(jìn)去更高級的開發(fā)層面,調(diào)用微信公眾平臺提供的各種接口。

今天,我們來學(xué)習(xí)一下微信公眾平臺最基礎(chǔ)的一個接口——access_token,access_token是公眾號的全局唯一票據(jù),公眾號調(diào)用各接口時都需使用access_token。

當(dāng)然,從本章開始,我們需要調(diào)用的各種接口,均需使用服務(wù)號開發(fā)。沒有服務(wù)號的小伙伴,可以選擇申請一個測試賬號,詳情查看系列博文第一篇<環(huán)境搭建與開發(fā)接入>

、了解access_token

正如前言所述,access_token是公眾號的全局唯一票據(jù),公眾號調(diào)用各接口時都需使用access_token。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。

公眾號可以使用AppID和AppSecret調(diào)用本接口來獲取access_token。AppID和AppSecret可在微信公眾平臺官網(wǎng)-開發(fā)者中心頁中獲得。且一個公眾號每天獲取access_token的次數(shù)上限為2000次。

接口調(diào)用請求地址

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

② 需要傳遞參數(shù)說明

③ 返回參數(shù)說明

從上述請求地址,以及參數(shù)和響應(yīng)表格可以知道,我們需要通過請求傳遞三個參數(shù)給微信公眾平臺,分別是grant_type(獲取access_token填寫client_credential)、appid、appsecret,請求成功后,公眾平臺會將access_token以及有效期返回給我們。

組裝請求access_token的工具類

在了解了access_token之后,我們開始組裝一個工具類,來向服務(wù)器發(fā)送請求獲取access_token。在我們之前的Util包下,新建一個WeiXinUtil.java工具類

[劇透一下]由于在開發(fā)過程中,我們需要①將接收過來的結(jié)果轉(zhuǎn)成JSON格式?② 使用HttpClient發(fā)送HTTP請求,所以需要導(dǎo)入幾個Jar包,導(dǎo)入Jar包列表如下(其中,紅色框為第①部分所需,藍(lán)色框為第②部分所需):

Jar包導(dǎo)入完成后,進(jìn)入我們的代碼實戰(zhàn)環(huán)節(jié),打開我們的WeiXinUtil.java工具類,封裝三個常量,分別是我們的APPID、APPSECRET、以及請求access_token的URL:

接下來我們組裝兩個方法,分別是使用Get和Post對我們的URL發(fā)起請求,當(dāng)我們直接請求URL而不需要傳遞參數(shù)時,可使用Get請求,而當(dāng)我們需要傳遞參數(shù)的時候,就需要使用Post請求,這兩個請求的實現(xiàn),均需借助我們導(dǎo)入HttpClient這兩個Jar包:

① Get請求的實現(xiàn)(相關(guān)代碼解釋已在注釋闡明)

② Post請求的實現(xiàn)(相關(guān)代碼解釋已在注釋闡明)

、創(chuàng)建AccessToken實體類

由第一部分返回結(jié)果說明我們可以知道,當(dāng)我們執(zhí)行請求URL,并且請求成功后,公眾平臺會將access_token以及有效期返回給我們。所以我們需要新建一個AccessToken實體類用于組裝返回結(jié)果,實體類屬性如下:

、獲取Access_Token并編寫測試類

① 在WeiXinUtil.java工具類中,新增getAccessToken方法

② 編寫測試類測試方法

③ 運行測試類,即可取到Access_Token及有效期

由于每個公眾賬號一天請求2000次Access_Token,在一些訪問量大的公眾號上顯然是不夠用的,因此我們可以將取到的Access_Token存到本地,每次使用時判斷是否過期,如果沒有過期就不要再發(fā)送請求啦~

這個問題呢,作為一個課后練習(xí),有能力的小伙伴可能自行嘗試哦~


【附】WeiXinUtil.Java 源碼部分

package com.jredu.util;

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

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.util.EntityUtils;

import com.jredu.entity.AccessToken;

import net.sf.json.JSONObject;

public class WeiXinUtil {

//從微信后臺拿到APPID和APPSECRET 并封裝為常量

private static final String APPID = "wxe09763a06d980f09";

private static final String APPSECRET = "3a6005a4c7589ca9e93297c72f7eaf4d";

private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

/**

* 編寫Get請求的方法。但沒有參數(shù)傳遞的時候,可以使用Get請求

*

* @param url 需要請求的URL

* @return 將請求URL后返回的數(shù)據(jù),轉(zhuǎn)為JSON格式,并return

*/

public static JSONObject doGetStr(String url) throws ClientProtocolException, IOException {

DefaultHttpClient client = new DefaultHttpClient();//獲取DefaultHttpClient請求

HttpGet httpGet = new HttpGet(url);//HttpGet將使用Get方式發(fā)送請求URL

JSONObject jsonObject = null;

HttpResponse response = client.execute(httpGet);//使用HttpResponse接收client執(zhí)行httpGet的結(jié)果

HttpEntity entity = response.getEntity();//從response中獲取結(jié)果,類型為HttpEntity

if(entity != null){

String result = EntityUtils.toString(entity,"UTF-8");//HttpEntity轉(zhuǎn)為字符串類型

jsonObject = JSONObject.fromObject(result);//字符串類型轉(zhuǎn)為JSON類型

}

return jsonObject;

}

/**

* 編寫Post請求的方法。當(dāng)我們需要參數(shù)傳遞的時候,可以使用Post請求

*

* @param url 需要請求的URL

* @param outStr? 需要傳遞的參數(shù)

* @return 將請求URL后返回的數(shù)據(jù),轉(zhuǎn)為JSON格式,并return

*/

public static JSONObject doPostStr(String url,String outStr) throws ClientProtocolException, IOException {

DefaultHttpClient client = new DefaultHttpClient();//獲取DefaultHttpClient請求

HttpPost httpost = new HttpPost(url);//HttpPost將使用Get方式發(fā)送請求URL

JSONObject jsonObject = null;

httpost.setEntity(new StringEntity(outStr,"UTF-8"));//使用setEntity方法,將我們傳進(jìn)來的參數(shù)放入請求中

HttpResponse response = client.execute(httpost);//使用HttpResponse接收client執(zhí)行httpost的結(jié)果

String result = EntityUtils.toString(response.getEntity(),"UTF-8");//HttpEntity轉(zhuǎn)為字符串類型

jsonObject = JSONObject.fromObject(result);//字符串類型轉(zhuǎn)為JSON類型

return jsonObject;

}

/**

* 獲取AccessToken

* @return 返回拿到的access_token及有效期

*/

public static AccessToken getAccessToken() throws ClientProtocolException, IOException{

AccessToken token = new AccessToken();

String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);//將URL中的兩個參數(shù)替換掉

JSONObject jsonObject = doGetStr(url);//使用剛剛寫的doGet方法接收結(jié)果

if(jsonObject!=null){ //如果返回不為空,將返回結(jié)果封裝進(jìn)AccessToken實體類

token.setToken(jsonObject.getString("access_token"));//取出access_token

token.setExpiresIn(jsonObject.getInt("expires_in"));//取出access_token的有效期

}

return token;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 久違的新文章發(fā)布。。我的鍋這篇文章是在寫的太長,可以慢慢看一下,偽代碼,畢竟簡書上面,望大家見諒?。?!先看官方文檔...
    wyatt_plus閱讀 1,715評論 0 2
  • 本文檔僅為微信開發(fā)文檔記錄,非參考文檔,非官方文檔。如果其中出現(xiàn)錯誤,歡迎指正。然后其中有代碼是參考的網(wǎng)上資料,具...
    Hugh1029閱讀 1,224評論 0 0
  • 微信公眾平臺開發(fā)概述 1.什么是token? 2.怎么獲取token? 3.怎么使用token? 1. ac...
    王恒0011閱讀 22,902評論 0 5
  • 1.注冊微信公眾號,新浪云 2.新浪云-->云應(yīng)用-->創(chuàng)建新應(yīng)用-->運行環(huán)境(PHP5.3),其他的自己填寫,...
    夢想秀閱讀 763評論 0 0
  • 1、開啟公眾號開發(fā)者模式 公眾平臺的技術(shù)文檔目的為了簡明扼要的交代接口的使用,語句難免苦澀難懂,甚至對于不同的讀者...
    good7758閱讀 1,671評論 0 1

友情鏈接更多精彩內(nèi)容