微信小程序配置服务器提示验证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 相关文章推荐
更换select下拉菜单背景样式的实现代码
Dec 20 Javascript
带左右箭头图片轮播的JS代码
Dec 18 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
JS判断时间段的实现代码
Jun 14 Javascript
原生JS+Canvas实现五子棋游戏实例
Jun 19 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
JavaScript组合继承详解
Nov 07 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桌面中心(二) 数据库写入
2007/03/11 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
Python中的作用域规则详解
2015/01/30 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python 产生token及token验证的方法
2018/12/26 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
软件测试题目
2013/02/27 面试题
公益广告宣传方案
2014/02/28 职场文书
读书活动总结
2014/04/28 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
入队仪式主持词
2015/07/04 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang