微信公众测试号使用Java Spring MVC,接口配置token验证。
来源:互联网 发布:易语言在线播放器源码 编辑:程序博客网 时间:2024/06/06 01:33
1.微信消息接收和token验证。
注:在微信公众号测试平台中填写了正确的url、token后,微信会向填写的url地址发送一条get请求。该请求带有signature、timestamp、nonce、echostr参数。服务端返回echostr参数,则表示token验证成功。
package com.Action;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.Util.CheckoutUtil;@Controllerpublic class WeChatAction { /** * 微信消息接收和token验证 * @param model * @param request * @param response * @throws IOException */ @RequestMapping("/weChatToken.do") public void weChat(Model model, HttpServletRequest request,HttpServletResponse response) throws IOException { boolean isGet = request.getMethod().toLowerCase().equals("get"); PrintWriter print; if (isGet) { // 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) { try { print = response.getWriter(); print.write(echostr); print.flush(); } catch (IOException e) { e.printStackTrace(); } } } }}
2.工具类。
package com.Util;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class CheckoutUtil { // 与接口配置信息中的Token要一致 private static String token = "jesse"; /** * 验证签名 * * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { String[] arr = new String[] { token, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典序排序 // Arrays.sort(arr); 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对比,标识该请求来源于微信 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; } public static void sort(String a[]) { for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[j].compareTo(a[i]) < 0) { String temp = a[i]; a[i] = a[j]; a[j] = temp; } } } }}
阅读全文
1 0
- 微信公众测试号使用Java Spring MVC,接口配置token验证。
- 微信公众号开发 配置服务器URL,验证Token
- 微信公众号服务器配置--验证token
- Java验证微信公众号token、url
- 微信测试接口token验证失败
- 微信公众号token验证
- 微信公众号 验证token
- 微信公众号配置token出错
- Java开发微信公众号-接口测试帐号接口配置及Java源代码
- 微信公众平台开发者中心配置--token验证失败
- 自己的服务器通过微信公众号Token验证测试的代码(Python版)
- 微信公众号开发者中心配置 Token验证失败 终极解决方案
- 阿里云服务器开发微信公众号,配置的时候总是TOKEN验证失败
- 微信公众号开发,分享功能,java,spring mvc
- 微信公众号token验证不过解决方法
- 微信公众号提交开发者提示token验证失败
- 微信公众号开发验证服务器Token失败
- 微信公众号一直出现token验证失败
- Unique Binary Search Trees
- Spring集成Mybatis
- 完成端口 IOCP
- C++类定义对构造和析构的调用的区别
- NIO 使用的简单例子
- 微信公众测试号使用Java Spring MVC,接口配置token验证。
- php加密函数和解密函数,原字符串输出
- 有关极光推送的列子
- nagular1的summernote的使用总结
- C#期末大作业 消消乐
- 最方便的自定义带点击效果的圆角背景按钮
- 【Spring之旅】Spring学习常见问题汇总
- PHP 多进程和多线程的优缺点
- 两数组的交