微信小程序配置服务器提示验证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 面向对象编程 function也是类
Sep 17 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
js实现字符串转日期格式的方法
May 20 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
微信小程序入门教程
Nov 18 Javascript
微信小程序入门之广告条实现方法示例
Dec 05 Javascript
Vue获取页面元素的相对位置的方法示例
Feb 05 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
vue vant中picker组件的使用
Nov 03 Javascript
vue中如何自定义右键菜单详解
Dec 08 Vue.js
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+ajax无刷新上传图片实例代码
2015/11/17 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
php之可变变量的实例详解
2017/09/12 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
js转义字符介绍
2013/11/05 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
python通过文件头判断文件类型
2015/10/30 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python logging日志模块原理及操作解析
2019/10/12 Python
wxPython实现文本框基础组件
2019/11/18 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
运动会演讲稿300字
2014/08/25 职场文书
学生个人总结范文
2015/02/15 职场文书
驻村工作简报
2015/07/20 职场文书
爱国教育主题班会
2015/08/14 职场文书
干部理论学习心得体会
2016/01/21 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL