java微信开发-token验证
来源:互联网 发布:knn算法 matlab 编辑:程序博客网 时间:2024/06/05 19:51
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一致
转:http://lib.csdn.net/article/wechat/46003
阅读全文
0 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验证
- Android Studio 使用教程(十一)之AndroidStudio怎样导入jar包
- Android 源码导入Eclipse技巧(Ubuntu)
- 关于集合的简单整理总结
- app按home键退到后台后,再次点击程序图标重新启动程序的解决办法
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- java微信开发-token验证
- [php_11]PHP之Mysql操作
- unity 读取PC剪贴板(粘贴板)的数据缓存
- js核算输入是否为金额
- flume开发--自定义Sink
- Git远程操作详解
- ubuntu14.04安装JDk1.8
- 教你如何恢复iPhone上删除的数据及iCloud和iTunes备份
- Jeesite单点登录集成Cas另加自定义登录验证