• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java微信公众平台开发(6) 微信开发中的token获取

Java微信公众平台开发(6) 微信开发中的token获取

作者:dapengniao 字体:[增加 减小] 来源:互联网 时间:2017-05-28

dapengniao 通过本文主要向大家介绍了微信公众平台token,java微信公众平台开发,java微信公众平台,微信公众平台登录,微信公众平台注册等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

(一)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

在微信公众平台【开发】——>【基本配置】中可以查看到我们需要的两个参数:

1.png

这里我们将他们定义到我们的配置文件【wechat.properties】中,大致代码为:

#获取到的appid
appid=wx7e32765bc24XXXX 
#获取到的AppSecret
AppSecret=d58051564fe9d86093f9XXXXX
</div>

②token获取并解析存储执行体的代码编写

由于在这里我们需要通过http的get请求向微信服务器获取时效性为7200秒的token,所以我在这里写了一个http请求的工具类,以方便我们的使用,如下:

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
     .readLine()) {
    lines = lines + line;
   }
   return lines; // 返回请求结果
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return "fail";
 }
 
 private static String getJsonStringFromGZIP(InputStream is) {
  String jsonString = null;
  try {
   BufferedInputStream bis = new BufferedInputStream(is);
   bis.mark(2);
   // 取前两个字节
   byte[] header = new byte[2];
   int result = bis.read(header);
   // reset输入流到开始位置
   bis.reset();
   // 判断是否是GZIP格式
   int headerData = getShort(header);
   // Gzip 流 的前两个字节是 0x1f8b
   if (result != -1 && headerData == 0x1f8b) {
    // LogUtil.i("HttpTask", " use GZIPInputStream ");
    is = new GZIPInputStream(bis);
   } else {
    // LogUtil.d("HttpTask", " not use GZIPInputStream");
    is = bis;
   }
   InputStreamReader reader = new InputStreamReader(is, "utf-8");
   char[] data = new char[100];
   int readSize;
   StringBuffer sb = new StringBuffer();
   while ((



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java微信公众平台开发(6) 微信开发中的token获取
  • Java微信公众平台开发(6) 微信开发中的token获取

相关文章

  • 2017-05-28C# 中Excel导入时判断是否被占用三种方法
  • 2017-05-28Spring中属性注入的几种方式以及复杂属性的注入详解
  • 2017-05-28JDK源码之PriorityQueue解析
  • 2017-05-28详解Mybatis的二级缓存配置
  • 2017-05-28java 创建线程的方法总结
  • 2017-05-28Java中的 FilterInputStream简介_动力节点Java学院整理
  • 2017-05-28JFileChooser实现对选定文件夹内图片自动播放和暂停播放实例代码
  • 2017-05-28详解java 单例模式及方法总结
  • 2017-05-28值得Java程序猿阅读的书籍
  • 2017-05-28Kotlin 基础语法详细介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解基于Spring Boot与Spring Data JPA的多数据源配置
    • Spring Web MVC框架学习之配置Spring Web MVC
    • java.lang.UnsatisfiedLinkError: %1 不是有效的Win32应用程序错误解决
    • SpringBoot中自定义注解实现控制器访问次数限制实例
    • Struts2的执行流程
    • Java中StringBuffer和StringBuilder_动力节点Java学院整理
    • Java中的vector类使用方法示例详解
    • java 中HttpClient传输xml字符串实例详解
    • 通过一个命令轻松切换Java的版本
    • 深入理解Java中的final关键字_动力节点Java学院整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有