使用Java语言开发微信公众平台(五)——获取access_token

摘要:
当公众号调用每个接口_ token时,需要访问公众号可以使用AppID和AppSecret调用此接口来获取access_ token我们需要通过请求向微信公共平台传递三个参数。我们需要①将收到的结果转换为JSON格式②使用HttpClient发送HTTP请求,分别使用Get和Post请求URL。当我们直接请求URL而不传递参数时,我们可以使用Get请求。

       在前四期的文章中,我们分别学习了“环境搭建与开发接入”、“文本消息的接收与响应”、“被关注回复与关键词回复”、“图文消息的发送与响应”等环节。那么,从本篇博文开始,我们将进去更高级的开发层面,调用微信公众平台提供的各种接口。

       今天我们来学习一下微信公众平台最基础的一个接口——access_tokenaccess_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。

       当然,从本章开始,我们需要调用的各种接口,均需使用服务号开发。没有服务号的小伙伴,可以选择申请一个测试账号,详情查看系列博文第一篇<环境搭建与开发接入>

       、了解access_token

      正如前言所述access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

      公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得。且一个公众号每天获取access_token的次数上限为2000次。

     ① 接口调用请求地址

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

     ② 需要传递参数说明

使用Java语言开发微信公众平台(五)——获取access_token第1张

    ③ 返回参数说明

使用Java语言开发微信公众平台(五)——获取access_token第2张

     从上述请求地址以及参数和响应表格可以知道我们需要通过请求传递三个参数给微信公众平台分别是grant_type(获取access_token填写client_credential)、appidappsecret请求成功后公众平台会将access_token以及有效期返回给我们

    二组装请求access_token的工具类

    在了解了access_token之后我们开始组装一个工具类来向服务器发送请求获取access_token。在我们之前的Util包下,新建一个WeiXinUtil.java工具类

使用Java语言开发微信公众平台(五)——获取access_token第3张

    [剧透一下]由于在开发过程中我们需要将接收过来的结果转成JSON格式 ② 使用HttpClient发送HTTP请求,所以需要导入几个Jar包导入Jar包列表如下(其中,红色框为第①部分所需,蓝色框为第②部分所需):

使用Java语言开发微信公众平台(五)——获取access_token第4张

     Jar包导入完成后进入我们的代码实战环节打开我们的WeiXinUtil.java工具类封装三个常量分别是我们的APPIDAPPSECRET以及请求access_token的URL

使用Java语言开发微信公众平台(五)——获取access_token第5张

     接下来我们组装两个方法分别是使用Get和Post对我们的URL发起请求,当我们直接请求URL而不需要传递参数时,可使用Get请求,而当我们需要传递参数的时候,就需要使用Post请求,这两个请求的实现,均需借助我们导入HttpClient这两个Jar包:

    ① Get请求的实现(相关代码解释已在注释阐明)

使用Java语言开发微信公众平台(五)——获取access_token第6张

       ② Post请求的实现(相关代码解释已在注释阐明)

使用Java语言开发微信公众平台(五)——获取access_token第7张

       三、创建AccessToken实体类

      由第一部分返回结果说明我们可以知道,当我们执行请求URL,并且请求成功后公众平台会将access_token以及有效期返回给我们。所以我们需要新建一个AccessToken实体类用于组装返回结果实体类属性如下

使用Java语言开发微信公众平台(五)——获取access_token第8张

    、获取Access_Token并编写测试类

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

使用Java语言开发微信公众平台(五)——获取access_token第9张

       ② 编写测试类测试方法

使用Java语言开发微信公众平台(五)——获取access_token第10张

        ③ 运行测试类即可取到Access_Token及有效期

使用Java语言开发微信公众平台(五)——获取access_token第11张

      由于每个公众账号一天请求2000次Access_Token,在一些访问量大的公众号上显然是不够用的,因此我们可以将取到的Access_Token存到本地每次使用时判断是否过期如果没有过期就不要再发送请求啦~

      这个问题呢作为一个课后练习有能力的小伙伴可能自行尝试哦~

    【附】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请求的方法。但没有参数传递的时候,可以使用Get请求
     * 
     * @param url 需要请求的URL
     * @return 将请求URL后返回的数据,转为JSON格式,并return
     */
    public static JSONObject doGetStr(String url) throws ClientProtocolException, IOException {
        DefaultHttpClient client = new DefaultHttpClient();//获取DefaultHttpClient请求
        HttpGet httpGet = new HttpGet(url);//HttpGet将使用Get方式发送请求URL
        JSONObject jsonObject = null;
        HttpResponse response = client.execute(httpGet);//使用HttpResponse接收client执行httpGet的结果
        HttpEntity entity = response.getEntity();//从response中获取结果,类型为HttpEntity
        if(entity != null){
            String result = EntityUtils.toString(entity,"UTF-8");//HttpEntity转为字符串类型
            jsonObject = JSONObject.fromObject(result);//字符串类型转为JSON类型
        }
        return jsonObject;
    }
    
    /**
     * 编写Post请求的方法。当我们需要参数传递的时候,可以使用Post请求
     * 
     * @param url 需要请求的URL
     * @param outStr  需要传递的参数
     * @return 将请求URL后返回的数据,转为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方式发送请求URL
        JSONObject jsonObject = null;
        httpost.setEntity(new StringEntity(outStr,"UTF-8"));//使用setEntity方法,将我们传进来的参数放入请求中
        HttpResponse response = client.execute(httpost);//使用HttpResponse接收client执行httpost的结果
        String result = EntityUtils.toString(response.getEntity(),"UTF-8");//HttpEntity转为字符串类型
        jsonObject = JSONObject.fromObject(result);//字符串类型转为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中的两个参数替换掉
        JSONObject jsonObject = doGetStr(url);//使用刚刚写的doGet方法接收结果
        if(jsonObject!=null){ //如果返回不为空,将返回结果封装进AccessToken实体类
            token.setToken(jsonObject.getString("access_token"));//取出access_token
            token.setExpiresIn(jsonObject.getInt("expires_in"));//取出access_token的有效期
        }
        return token;
    }
}

免责声明:文章转载自《使用Java语言开发微信公众平台(五)——获取access_token》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tensorflow常用函数(一)Swift的排序算法总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android studio的一些常用快捷键

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E或者Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+...

python 安装新的模块

一、方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行:python setup.py install 三、 方法3:easy_install 方式  先下载ez_setup.py,运行python ez_setup 进行easy_install工具...

client intended to send too large body

2012/11/14 19:15:20 [error] 16038#0: *1281 client intended to send too large body: 1797176 bytes, client: 10.96.54.125, server: localhost, request: "PUT /svn/repos/!svn/txr/44-1i/...

Scrapy爬虫的暂停和启动

scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 方法一: 1、首先cd进入到scrapy项目里(当然你也可以通过编写脚本Python文件直接在pycharm中运行) 2、在scrapy项目里创建保存记录信息的文件夹 3、执行命令:   scrapy craw...

Android 手机灭屏流程分析详解

极力推荐文章:欢迎收藏Android 干货分享 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.前言 2.Power键灭屏 3.超时灭屏 4.PSensor灭屏 PowerManagerService 之前系列文章请参考如下 1.PowerManagerService分析(一)之PMS启动 2.Power...

influxdb 配置文件注释

### Welcome to the InfluxDB configuration file. # The values in this file override the default values used by the system if # a config option is not specified. The commented o...