微信小程序配置服务器提示验证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 相关文章推荐
Expandable &quot;Detail&quot; Table Rows
Aug 29 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
Mar 17 Javascript
Angular的事件和表单详解
Dec 26 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
JS变量提升原理与用法实例浅析
May 22 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/28 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
zend framework重定向方法小结
2016/05/28 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
python list排序的两种方法及实例讲解
2017/03/20 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
python执行使用shell命令方法分享
2017/11/08 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
国贸专业求职信
2014/06/28 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL