微信小程序配置服务器提示验证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 国际象棋棋盘 实现代码
Jun 26 Javascript
19个很有用的 JavaScript库推荐
Jun 27 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
jQuery焦点图插件SaySlide
Dec 21 Javascript
JavaScript类型系统之正则表达式
Jan 05 Javascript
webpack+vue.js实现组件化详解
Oct 12 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
php数据库密码的找回的步骤
2011/01/12 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
Node.js模块加载详解
2014/08/16 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
在Django中创建第一个静态视图
2015/07/15 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
造型师求职自荐信
2013/09/27 职场文书
高中生期末评语
2014/01/28 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
Python实现简繁体转换
2021/06/07 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Python安装使用Scrapy框架
2022/04/12 Python