微信小程序配置服务器提示验证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 相关文章推荐
Ajax同步与异步传输的示例代码
Nov 21 Javascript
js 鼠标移动显示图片的简单实例
Dec 25 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
js实现延时加载Flash的方法
Nov 26 Javascript
6种javascript显示当前系统时间代码
Dec 01 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
Jun 04 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP中比较时间大小实例
2014/08/21 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python动态加载包的方法小结
2016/04/18 Python
python字符类型的一些方法小结
2016/05/16 Python
Python yield与实现方法代码分析
2018/02/06 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
python多进程并行代码实例
2019/09/30 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
建筑文秘专业个人求职信范文
2013/12/28 职场文书
田径运动会通讯稿
2014/09/13 职场文书
学校运动会报道稿
2014/09/23 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
公司规章制度范本
2015/08/03 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android