微信小程序配置服务器提示验证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 相关文章推荐
javascript显示隐藏层比较不错的方法分析
Sep 30 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
Oct 21 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
Aug 21 Javascript
JavaScript实现自定义媒体播放器方法介绍
Jan 03 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
Apr 15 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 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 mcrypt可逆加密算法分析
2011/07/19 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
开展警示教育活动总结
2015/05/09 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android