微信小程序配置服务器提示验证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 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
Input 特殊事件onpopertychange和oninput
Jun 17 Javascript
Jquery选中或取消radio示例
Sep 29 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
Oct 20 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
js实现移动端轮播图
Dec 21 Javascript
详解Vue2 添加对scss的支持
Jan 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
python读写csv文件方法详细总结
2019/07/05 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
管理心得体会
2013/12/28 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
先进班集体申报材料
2014/12/26 职场文书
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技
A22国内电台短波广播频率表
2022/05/10 无线电