微信小程序配置服务器提示验证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 相关文章推荐
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
Sep 02 Javascript
javascript元素动态创建实现方法
May 13 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
javascript js 操作数组 增删改查的简单实现
Jun 20 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
Three.js利用顶点绘制立方体的方法详解
Sep 27 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
Jan 30 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
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文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP中的use关键字概述
2014/07/23 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
简单的js分页脚本
2009/05/21 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
python 数据加密代码
2008/12/24 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
django ajax json的实例代码
2018/05/29 Python
Django models文件模型变更错误解决
2020/05/11 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
证婚人经典证婚词
2014/01/09 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
管理失职检讨书
2014/02/12 职场文书
主题教育活动总结
2014/05/05 职场文书
物业管理工作方案
2014/05/10 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
清洁工岗位职责
2015/02/13 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL