微信小程序配置服务器提示验证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 白痴级入门教程
Nov 11 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
jquery分页对象使用示例
Apr 01 Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
微信小程序 登录的简单实现
Apr 19 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
vue与django集成打包的实现方法
Nov 11 Javascript
原生js+canvas实现下雪效果
Aug 02 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学习 字符串课件
2008/06/15 PHP
PHP面向对象法则
2012/02/23 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
javascript入门基础之私有变量
2010/02/23 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
JS hashMap实例详解
2016/05/26 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
python动态监控日志内容的示例
2014/02/16 Python
Python装饰器基础详解
2016/03/09 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
Python实现常见的回文字符串算法
2018/11/14 Python
Python 如何测试文件是否存在
2020/07/31 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
上课睡觉检讨书
2014/01/28 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
护士节活动总结
2014/08/29 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang