前几天开发了微信公众号,趁今天有时间,总结一下。

注意几点:

1.服务器地址URL这是要配置你的域名加你验证Token的接口路径,记住,是完整路径!。如果是通过了穿透,那么就是127.0.0.1/端口/Controller路径/方法路径!

2.令牌Token问题,在微信公众号基本配置里面可以随意填写,但是在服务端,也就是你的后台接口程序中的Token必须对应!

3.消息加解密密钥,这个在公众号可以弄成自动生成32的密钥。

4.加解密方式,本人用的是明文。

5.Token每天获取数量有限制,每次获取有效期是7200,也就是2小时,记得用容器保存。可以存储在Redis,设置一个有效期7200!

以下是代码:

1.工具类Httprequests

public static String  sendGet (String url,String param) {String result ="";BufferedReader in  =null;try {String urlNameString = url +"?" +param;System.out.println("发送的链接请求:"+urlNameString);URL reaurl = new URL(urlNameString);URLConnection connection  = reaurl.openConnection();//设置通用connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//建立实际的连接connection.connect();Map<String, List<String>> map = connection.getHeaderFields();//定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求* @param url 发送请求的 URL* @param param 参数* @return String 所代表远程资源的响应结果*/public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!"+e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result;}/*** 拿到ip* @param req request作用域:* @return String*/public static String getRemoteIP(HttpServletRequest req) {String ip = req.getHeader("X-Real-IP");if (ip == null || ("").equals(ip)) {ip = req.getRemoteAddr() == null ? "127.0.0.1" : req.getRemoteAddr();}return ip;}/***  生成* @param num 参数* @return String*/public static String getPamens(Integer num){String base = "abcdefghijklmnopqrstuvwxyz0123456789";Random random = new Random();StringBuffer sb = new StringBuffer();for (int i = 0; i < num; i++) {int number = random.nextInt(base.length());sb.append(base.charAt(number));}return sb.toString();}

2.写一个Service接口,返回Map类型。

 /*** 获取微信Token* @return*/Map<String, Object> accessToken();

3.实现接口 lmpl

  /*** 拿到Token* @return*/@Overridepublic Map<String, Object> accessToken() {String param="grant_type="+ WxModel.grant_type+"&appid="+WxModel.appid+"&secret="+WxModel.wxspSecret;//获取接口凭证String sendGet= Httprequests.sendGet(WxModel.select_access_token,param);System.out.println("发送git请求的返回值:"+sendGet);JSONObject json = JSONObject.parseObject(sendGet);String access_token=json.getString("access_token"); //凭证System.out.println("获取的access_token:"+access_token);int expires_in= json.getInteger("expires_in"); //凭证有效时间,单位:秒System.out.println("有效的时间:"+expires_in);System.out.print("获取凭证成功");System.out.println("返回的数据:"+access_token);Map<String, Object> map = new HashMap<String, Object>();map.put("access_token", access_token);map.put("expires_in", expires_in);RedisUtil.setex("access_token",access_token,7200 );return map;}

4.关于WxModel,这个是要你公众号的grant_type,appid,wxspSecret,你可以登录你的公众号进行查看。在首页就可以看到

5 .Controller,如果运行报请求要用GET请求,那么就把POST换成GET。

/*** 验证token* @param request* @param response* @return*/@PostMapping(value= {"/getProcessRequest"})@ResponseBodypublic String getProcessRequest(HttpServletRequest request, HttpServletResponse response) {boolean isGet=request.getMethod().toLowerCase().equals("get");System.out.println(isGet);System.out.println("方法是-------"+isGet);// 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");PrintWriter out = null;try {out = response.getWriter();// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败if (SignUtil.checkSignature(signature, timestamp, nonce)) {System.out.println("成功");out.print(echostr);out.flush();  //必须刷新}} catch (IOException e) {e.printStackTrace();} finally {out.close();}}

总结完毕,在此要感谢我一个同学,他开发过这方面,让我少爬了很多坑。代码是完整的,希望可以帮助到大家。

不懂可以加QQ群: 914084240

微信公众号验证Token相关推荐

  1. 使用新浪SAE开发微信公众号 验证Token却一直失败

    最近这段刚刚学习微信公众号,在微信公众号平台中修改服务器设置时,使用微信Demo的PHP,刚开始一直验证token 失败. 解决办法 :在网站的头部最先添加header('content-type:t ...

  2. 微信公众号验证token+关注回复+关键字回复+单图文回复

    1. 首先登陆微信公众号开启开发者模式,配置基本信息 2. 验证token public function validToken() {$timestamp = $_GET['timestamp']; ...

  3. php 验证微信token_php之微信公众号验证token获取access_token

    实例 /医院 * Created by PhpStorm. * User: Administrator * Date: 2018/6/1 0001 * Time: 上午 9:52 */ namespa ...

  4. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  5. 微信公众号开发 - token获取(保证同一时间段内只请求一次)

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  6. 微信公众号 服务器配置 token 测试,微信公众号开发:基本配置Token验证简单事件回复...

    公众号配置的URL就是你自己服务器上验证TOKEN的方法的地址 比如我验证TOKEN的方法访问地址是http://www.aaa.cn/wx_api.php 那我公众号配置的URL就要填http:// ...

  7. 微信公众号服务器配置token验证失败问题及菜单创建失败问题小结

    如果微信公众号的菜单需要调用我们自己后台代码接口的话,那么公众号后台的基本信息配置这里要启用服务器配置,如图: 如果在修改配置时提示token验证失败时,需要从两方面查找问题: ①.查看我们服务器上的 ...

  8. 微信公众号服务器配置token验证失败的解决方法

    原因:修改了域名后,更换服务器地址失败.原来是可以验证通过的,代码没有变动过. 查找了很多解决方法都没有成功解决,通过APIPost测试也是正常返回原来的"echostr",但是死 ...

  9. 微信公众号配置token失败

    为什么80%的码农都做不了架构师?>>>    今天公司需要开发微信登陆,利用微信服务号做,刚开始配置微信公众号的时候,token一直验证失败 解决: 1:查看token是否与服务端 ...

最新文章

  1. 从Varchar转换为 datetime
  2. kfold_机器学习gridsearchcv(网格搜索)和kfold validation(k折验证)
  3. mysql 创建用户并授权_教你MySQL-8.0.x数据库授权
  4. token会被截取吗_新手剪辑:如何截取视频的某个片段?
  5. linux opendir路径_Linux C/C++ ----目录文件的操作(opendir,readdir,closedir)
  6. oracle数据库运行进程数,如何看ORACLE系统自身的进程数是多少?
  7. 百度开放平台-快递物流解决方案
  8. 「好书推荐」《边城》沈从文的乡土情怀代表作,汪曾祺、林徽因、曹文轩等真情推荐!
  9. 《封号码罗》python爬虫之企某科技网站js逆向(十四)
  10. [TED]丹·吉尔伯特:我们为什么快乐?
  11. 【翻译】四种类型的为什么:产品背后的驱动力是什么?
  12. 棋盘覆盖(java实现)
  13. 你见过最赞或最搞笑字幕组翻译有哪些?
  14. Java后台+PDF.js 实现pdf分页加载的后端实现
  15. 乐谱播放器 android,光遇乐谱 免费版
  16. 中国蚁剑下载、安装、使用教程
  17. 直播平台源码关于服务器聊天实现示列
  18. virsh日常管理命令
  19. 爱奇艺海外业务增长迅猛,飞书深诺与其携手共助出海品牌新增长
  20. 反馈式神经网络之HNN

热门文章

  1. 基于 nRF SDK17.2,Nordic NFC 读写的实现。
  2. Html div 打印自动分页,网页打印自动分页
  3. 百度无人驾驶网约车起步价16元;美团回应共享单车涨价;谷歌公开抨击苹果阻碍跨平台交流|极客头条
  4. 致敬!烈日下的测绘者,请为他们点赞!
  5. CSS基础10-单行/多行文本溢出省略
  6. 微信公众号使用:微信公众平台企业类型的微信认证申请流程
  7. 设计模式(十三) 代理模式和Java动态代理
  8. ListView+Fragment实现导航栏
  9. 笔记本电脑切换不到投影仪 问题 解决方法
  10. 使用python画简单的图