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

今天,我们来学习一下微信公众平台最基础的一个接口——access_token,access_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

     ② 需要传递参数说明

    ③ 返回参数说明

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

    二组装请求access_token的工具类

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

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

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

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

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

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

       三、创建AccessToken实体类

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

     四、获取Access_Token并编写测试类

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

       ② 编写测试类测试方法

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

由于每个公众账号一天请求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方式发送请求URLJSONObject jsonObject = null;HttpResponse response = client.execute(httpGet);//使用HttpResponse接收client执行httpGet的结果HttpEntity entity = response.getEntity();//从response中获取结果,类型为HttpEntityif(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方式发送请求URLJSONObject 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_tokentoken.setExpiresIn(jsonObject.getInt("expires_in"));//取出access_token的有效期
        }return token;}
}

转载于:https://www.cnblogs.com/jerehedu/p/6760225.html

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

  1. java群发图文消息_使用Java语言开发微信公众平台(四)——图文消息的发送与响应...

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

  2. 使用Java语言开发微信公众平台(六)

    在上一节课程中,我们来学习了微信公众平台最基础的一个接口--access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的access_t ...

  3. 使用Java语言开发微信公众平台(三)——被关注回复与关键词回复

    在上一篇文章中,我们实现了文本消息的接收与响应.可以在用户发送任何内容的时候,回复一段固定的文字.本章节中,我们将对上一章节的代码进行适当的完善,同时实现[被关注回复与关键词回复]功能. 一.微信可提 ...

  4. 微信自定义菜单java_使用Java语言开发微信公众平台(八)——自定义菜单功能

    随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能.今天,我们来学习更加高大上,也更加重要的自定义菜单功能. 一.了解自定义菜单 自定义菜单是微信公众平台最常用也是最重要的功能之一.根据微信 ...

  5. java微信接收消息_使用Java开发微信公众平台(二)——消息的接收与响应

    上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分--环境搭建与开发接入.那么,本篇文章,我们将在此基础上,学习[消息的接收与响应].喜欢本文,请点击下方喜欢按钮呗!❤️ 当然,我们在 ...

  6. Java开发微信公众平台之浅谈微信(一)

    说起微信都不会陌生,每一部智能手机都有该APP也就是说 只要是使用智能手机的人都属于微信的用户,可想而知微信目前的使用人数.据16年数据统计微信的月活跃用户达到了8.06亿,什么概念,还没有算其余不是 ...

  7. 公众平台 java_java开发微信公众平台

    <java开发微信公众平台>由会员分享,可在线阅读,更多相关<java开发微信公众平台(31页珍藏版)>请在人人文库网上搜索. 1.java开发微信公众平台响应消息的基类同样, ...

  8. 使用Bmob云端代码开发微信公众平台(教程)

    使用Bmob云端代码开发微信公众平台(教程)           目录 一.简介...1 二.创建bmob应用...2 1.注册bmob账号...2 2. 创建应用...3 3. 数据的基本操作... ...

  9. .net开发微信公众平台

    (转自:fhx900808.blog.163.com/blog/static/2099660212013423113226312/) 一.说明:公众平台信息接口为开发者提供了一种新的消息处理方式,只有 ...

最新文章

  1. 【LeetCode】154. Find Minimum in Rotated Sorted Array II (3 solutions)
  2. linux设备驱动之pci设备的驱动架构
  3. aix系统java堆_浅谈AIX环境下的Java性能调优
  4. 单链表(不带头结点)
  5. 1_初识less引用变量作用域变量差值
  6. PHP define()的用法
  7. solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)
  8. 整合xfire与struts2 (一)
  9. paip输入法编程之生活用高频字,以及汉字分级
  10. VScode代码美化工具Beautify
  11. vc 星号密码查看方法
  12. 英特尔oneAPI—开拓
  13. Python第四天——requests实战
  14. android highcharts柱状图实例,Highcharts 基本柱形图
  15. 叉积 微分 恒等式_不等式(O):常见符号及恒等式
  16. js 根据身份证获取出生日期与年龄
  17. 荐书|《DBT技巧训练手册》:宝贝,你就是你活着的原因
  18. 正高职称 程序员_研究员级高级工程师和高级工程师有什么区别,副研究员与高级工程师有什么差别...
  19. Mac OS 如何让窗口显示在最前边,(用于录制屏幕提醒,以及屏幕分享,应用分享的UI窗口解决)
  20. Android 上面关于不受控制3RD原生代码崩溃问题

热门文章

  1. 导数与微分的知识点思维导图_高中物理思维导图,高中三年知识点一个不漏
  2. idea运行maven:No URLs will be polled as dynamic configuration sources
  3. 单元测试框架-Junit
  4. 新年计算机等级的决定的英语,新年决定英语对话及译文
  5. 零基础学sql要多久_成人零基础学习钢琴,要多久能学会?
  6. python数据库操作sqlite_Python3操作SQLite数据库
  7. android 是什么编码格式,在Android的JPG图像编码和解码
  8. mesh gradient的求法
  9. 如何算三角形的cotangent
  10. 基于分割和识别的服饰商品的自动推荐