java微信开发-token验证
来源:互联网 发布:数据库实训总结 编辑:程序博客网 时间:2024/06/05 20:10
1、配置springMVC环境。
这里就不贴代码了。不知道的朋友,可以去看我的博客。
2、验证token
说明:在微信公众号测试平台中填写了正确的url、token后,微信会向填写的url地址发送一条get请求。该请求带有signature、timestamp、nonce、echostr参数。服务端返回echostr参数,则表示token验证成功。
@Controllerpublic class HelloWorldController { /** * 微信消息接收和token验证 * @param model * @param request * @param response * @throws IOException */ @RequestMapping("/hello") public void hello(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(); } } }
请求校验工具类
public class CheckoutUtil { // 与接口配置信息中的Token要一致 private static String token = "Javen"; /** * 验证签名 * * @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; } } } }}
3、在微信公众号测试平台中,填写url、token
注:
1、url为项目路径且必须可以通过外网80端口访问
2、token必须和项目中token一致
2 0
- java微信开发-token验证
- java微信开发-token验证
- java微信开发-token验证
- java 微信开发token验证失败的一种情况
- nodejs微信开发--验证路径token
- 微信token验证失败Java解决办法
- 微信Token验证
- 微信token验证
- 微信token验证
- 微信公众平台开发(1)验证TOKEN源码
- 微信公众平台开发——token验证失败
- 微信公众号开发验证服务器Token失败
- 阿里云服务器微信接口开发TOKEN验证失败
- asp.net 微信开发入门级Token验证
- 微信开发 修改url配置后token验证失败
- 微信开发token验证失败怎么办的解决办法
- node.js微信公众平台开发之Token验证
- 微信公众号开发之token验证
- Apple Pay接入详细教程
- 深度学习傻瓜教程(1)
- css:position 与 z-index 问题(1)
- python 函数式编程
- UITextField加密输入属性
- java微信开发-token验证
- Nim Game---292
- weibo爬虫计划,以及普适爬虫框架的搭建
- java 中类加载过程
- 原IOS CGContextSetLineWidth无法设置1像素线宽?
- java.lang.OutOfMemoryError: PermGen space
- viewpager+fragment
- 解决RadioGroup的RadioButton图片、文字无法居中
- Android px、dp、sp之间相互转换