微信小程序配置服务器提示验证token失败的解决方法


Posted in Javascript onApril 03, 2019

最近在学习微信小程序,遇到的第一个问题就是需要配置服务器

微信小程序配置服务器提示验证token失败的解决方法

微信小程序配置服务器提示验证token失败的解决方法

关于这个服务器的配置我也是绕了好多弯路,说白了腾讯就是想通过你填的这个URL和Token去验证你有一个自己的服务器(外网可以访问的服务器),其实就是想让你证明你是你自己,呵呵....

关于这个token随便填不要纠结,下面直接看JAVA代码

package com.base.action;

import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/wechat")
@Controller
public class WechatController {
 private static Logger logger = Logger.getLogger(WechatController.class);
  
 private static String token = "xuejp";
 
 @RequestMapping(value = "/wx.do")
 public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {
  System.out.println("========WechatController========= ");
  logger.info("-----来自微信的请求----");
 
  Enumeration pNames = request.getParameterNames();
  while (pNames.hasMoreElements()) {
   String name = (String) pNames.nextElement();
   String value = request.getParameter(name);
   //查看微信的请求都带了哪些参数
   String log = "name =" + name + "  value =" + value;
   logger.error(log);
  }
 
  String signature = request.getParameter("signature");/// 微信加密签名
  String timestamp = request.getParameter("timestamp");/// 时间戳
  String nonce = request.getParameter("nonce"); /// 随机数
  String echostr = request.getParameter("echostr"); // 随机字符串
  PrintWriter out = response.getWriter();
 
  if (checkSignature(signature, timestamp, nonce)) {
   out.print(echostr);
  }
 
  out.print(token);
 
  out.close();
  out = null;
 
 }
 
 /**
  * 校验签名
  */
 public static boolean checkSignature(String signature, String timestamp, String nonce) {
  System.out.println("signature:" + signature + "timestamp:" + timestamp + "nonc:" + nonce);
  String[] arr = new String[] { token, timestamp, nonce };
  // 将token、timestamp、nonce三个参数进行字典序排序
  Arrays.sort(arr);
  StringBuilder content = new StringBuilder();
  for (int i = 0; i < arr.length; i++) {
   content.append(arr[i]);
  }
  MessageDigest md = null;
  String tmpStr = null;
 
  try {
   md = MessageDigest.getInstance("SHA-1");
   // 将三个参数字符串拼接成一个字符串进行sha1加密
   byte[] digest = md.digest(content.toString().getBytes());
   tmpStr = byteToStr(digest);
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
 
  content = null;
  // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
  System.out.println(tmpStr.equals(signature.toUpperCase()));
  return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
 }
 
 /**
  * 将字节数组转换为十六进制字符串
  * 
  * @param byteArray
  * @return
  */
 private static String byteToStr(byte[] byteArray) {
  String strDigest = "";
  for (int i = 0; i < byteArray.length; i++) {
   strDigest += byteToHexStr(byteArray[i]);
  }
  return strDigest;
 }
 
 /**
  * 将字节转换为十六进制字符串
  * 
  * @param mByte
  * @return
  */
 private static String byteToHexStr(byte mByte) {
  char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  char[] tempArr = new char[2];
  tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
  tempArr[1] = Digit[mByte & 0X0F];
 
  String s = new String(tempArr);
  return s;
 }
}

将以上代码部署到服务器上就可以了,在微信配置界面点击提交就会显示提交成功了,提交成功后一定要点击右上方的启用按钮

微信小程序配置服务器提示验证token失败的解决方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js创建数据共享接口——简化框架之间相互传值
Oct 23 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 Javascript
JS获取DropDownList的value值与text值的示例代码
Jan 07 Javascript
js字符串完全替换函数分享
Dec 03 Javascript
jQuery简单实现隐藏以及显示特效
Feb 26 Javascript
javascript实现的简单的表单验证
Jul 10 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
JS实现简单的浮动碰撞效果示例
Dec 28 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
javascript 构建模块化开发过程解析
Sep 11 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 Javascript
js前端面试之同步与异步问题详解
Apr 03 #Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 #Javascript
es6 filter() 数组过滤方法总结
Apr 03 #Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 #Javascript
javascript实现小型区块链功能
Apr 03 #Javascript
vue插槽slot的理解和使用方法
Apr 03 #Javascript
react写一个select组件的实现代码
Apr 03 #Javascript
You might like
令PHP初学者头疼十四条问题大总结
2008/11/12 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
php入门教程 精简版
2009/12/13 PHP
php流量统计功能的实现代码
2012/09/29 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
实用求职信范文分享
2013/12/25 职场文书
三查三看党性分析材料
2014/02/18 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
通知范文怎么写
2015/04/16 职场文书
Python实现byte转integer
2021/06/03 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
详解JAVA的控制语句
2021/11/11 Java/Android