[3]java微信开发-获取access_token
来源:互联网 发布:台风战斗机知乎 编辑:程序博客网 时间:2024/06/06 23:43
什么是access_token?
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
access_token有什么用?
access_token 作为公众号唯一的接口调用凭据,顾名思义就公众号调用微信提供的接口时都需要提供access_token,否则无法正常调用微信提供的接口。比如创建自定义菜单接口,获取微信服务器ip以及后面的JS-SDK 中获取api_ticket等等接口都会用到access_token。
怎么获取access_token?
通过GET请求接口:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
来获取access_token.
接口参数说明
从表格可看出,调用获取access_token的接口需要三个参数,第一个参数用client_credential就行。第二、三个参数对应“微信公众平台-开发-基本配置”微信公众号的AppID和AppSecret(开发者测试账号中测试号信息中的AppID和AppSecret)。
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
参数说明
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):
返回码说明
获取access_token代码实现
1、实现X509TrustManager信任管理器。
https请求用到SSL技术,需要添加一个信任管理器。至于为什么,这里不做详细解释。感兴趣的童鞋可以自己去学习相关知识。
import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.X509TrustManager;/** * 描述:HTTPS证书信任管理器,实现X509TrustManager接口 * @author pwu * 创建日期:2017-6-15 */public class MyX509TrustManager implements X509TrustManager { //验证客户端证书 @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } //验证服务端证书 @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } //返回被信任的证书数组 @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; }}
2、https请求代码实现
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ConnectException;import java.net.URL;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import com.alibaba.fastjson.JSONObject;import com.carwash.modules.wechat.common.MyX509TrustManager;public class HttpsUtils { /** * 描述: 发起https请求并获取结果 * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET、POST) * @param outputStr 提交的数据 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; StringBuffer buffer = new StringBuffer(); try { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); httpsConn.setSSLSocketFactory(ssf); httpsConn.setDoOutput(true); httpsConn.setDoInput(true); httpsConn.setUseCaches(false); // 设置请求方式(GET/POST) httpsConn.setRequestMethod(requestMethod); // 当有数据需要提交时 if (null != outputStr) { OutputStream outputStream = httpsConn.getOutputStream(); // 注意编码格式,防止中文乱码 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 将返回的输入流转换成字符串 InputStream inputStream = httpsConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // 释放资源 inputStream.close(); inputStream = null; httpsConn.disconnect(); jsonObject = JSONObject.parseObject(buffer.toString()); } catch (ConnectException ce) { System.err.println("连接超时:"+ce); } catch (Exception e) { System.err.println("https请求异常:"+e); } return jsonObject; }}
3、获取access_token实现
import com.alibaba.fastjson.JSONObject;import com.carwash.modules.wechat.common.Globle;import com.carwash.modules.wechat.entity.WxAccessToken;/** * 描述:微信access_token工具类 * @author pwu * 创建时间:2017-6-15 * @version V1.0 */public class AccessTokenUtils { // 获取access_token的接口地址(GET) 限2000(次/天) public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; public static WxAccessToken getAccessToken(){ //TODO 持久化token WxAccessToken token = null; //向微信请求access_token的url,由appid和appsecret组合微信请求接口构成 //Globle.appid和Globle.appsecret即为自己的appid和appsecret String requestUrl = access_token_url.replace("APPID", Globle.appid).replace("APPSECRET", Globle.appsecret); //发起https GET请求获取凭证json JSONObject jsonObject = HttpsUtils.httpsRequest(requestUrl, "GET", null); if(jsonObject != null){ token = new WxAccessToken(); token.setAccessToken(jsonObject.getString("access_token")); token.setExpiresIn(jsonObject.getIntValue("expires_in")); } return token; }}
结语
至此,微信access_token的获取完成,文章凭借的是网上查找资料及个人理解整理出来的,可能比较粗糙,如果有不对的地方,希望大家指出来,我及时改正避免误导其他人。如有看完这篇博客还不知道怎么获取access_token的朋友,欢迎留言或私信给我,我会及时解答。
- [3]java微信开发-获取access_token
- 微信&java 开发4 access_token获取
- java 微信开发获取access_token
- 微信java开发3——获取access_token
- 微信开发-获取access_token
- 微信公众号开发之获取access_token[java版]
- 微信开发的access_token的获取
- 微信access_token的获取开发示例
- 微信开发获取access_token函数库
- 微信公众号开发获取access_token
- 微信开发专题---4获取access_token
- 微信开发,access_token定时获取
- 微信开发之access_token获取
- 微信公众号开发-获取access_token
- java微信公众平台获取access_token
- 微信获取Access_token
- 微信 获取 access_token
- 微信获取 access_token
- caffe 学习之 Fine-tune
- C++静态成员变量和静态成员函数的使用方法总结
- Android5.0新控件CardView的介绍和使用
- Storm单机环境部署文档
- 解决Springboot中Interceptor拦截器中依赖注入失败
- [3]java微信开发-获取access_token
- HDU 5221 树链剖分
- mysql ERROR 1045 (28000): 错误解决办法
- 【算法】 初等数论 一些总结
- BZOJ 3038: 上帝造题的七分钟2
- C# 调用C++回调函数
- 18.play依赖管理
- jquery 复制插件
- gulp-写一份gulp常用配置文件,构建前端工作流