微信小程序配置服务器提示验证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 相关文章推荐
关于取不到由location.href提交而来的上级页面地址的解决办法
Jul 30 Javascript
js图片自动切换效果处理代码
May 07 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
Aug 12 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
基于javascript实现仿百度输入框自动匹配功能
Jan 03 Javascript
jQuery序列化表单成对象的简单实现
Nov 29 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 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
Zerg剧情介绍
2020/03/14 星际争霸
php将时间差转换为字符串提示
2011/09/07 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
php报错502badgateway解决方法
2019/10/11 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Python iter()函数用法实例分析
2018/03/17 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python 多线程重启方法
2019/02/18 Python
python绘制多个子图的实例
2019/07/07 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年老干部工作总结
2014/11/21 职场文书
匿名检举信范文
2015/03/02 职场文书