这篇文章介绍微信公众平台开发之token验证和消息处理的方法
/** * * @Description: 微信消息处理以及用户分组 * @author zhangjun * @date 2014-1-7 上午10:51:51 */ public class WeiXinMessageAction extends BaseAction{ /** * */ private static final long serialVersionUID = 1L; private IFeWeiXinMessageService weiXinExternalService; private String wxNo; public String responseMessgaeInfo(){ Boolean isGet = request.getMethod().equalsIgnoreCase("GET"); if(isGet){ validateSignature(); }else{ saveWxMessage(); } return null; } /** * * @Description: 接收post保存接受的消息 只保存MsgType类型为text信息 * @param * @return void * @throws */ private void saveWxMessage(){ InputStream inputStream; try { request.setCharacterEncoding("UTF-8"); Document doc = null; SAXReader reader = new SAXReader(); inputStream = request.getInputStream(); doc = reader.read(inputStream); Element root = doc.getRootElement(); String toUserName = root.element("ToUserName").getTextTrim(); String fromUserName = root.element("FromUserName").getTextTrim(); String content = root.element("Content").getTextTrim(); String msgType=root.element("MsgType").getTextTrim(); String msgId=root.element("MsgId").getTextTrim(); String createTime=root.element("CreateTime").getTextTrim(); //只保存文本消息 //时间 System.out.println("接收消息内容:"+content+"-----------------msgType:"+msgType); if(WeiXinMsgType.TEXT.type.equals(msgType)){ weiXinExternalService.addWxMessage(toUserName, fromUserName, content, msgType, msgId, formatTime(createTime)); } } catch (Exception e) { e.printStackTrace(); } } /** * * @Description: 传入的CreateTime转换成long类型 * @param @param createTime * @param @return * @return Date * @throws */ private Date formatTime(String createTime) { long msgCreateTime = Long.parseLong(createTime) * 1000L; return new Date(msgCreateTime); } /** * * @Description: 校验微信签名 * @param * @return void * @throws */ private void validateSignature(){ PrintWriter out = null; try { String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); out = response.getWriter(); if (checkSignature(signature, timestamp, nonce)) { out.print(request.getParameter("echostr")); } } catch (Exception e) { e.printStackTrace(); } finally { out.close(); out = null; } } /** * * @Description: 判断token是否合法 * @param @param signature * @param @param timestamp * @param @param nonce * @param @return * @return boolean * @throws */ private boolean checkSignature(String signature, String timestamp, String nonce) { //根据微信账号获取token并校验 Map<String,Object> map=new HashMap<String,Object>(); map.put("wxNo", wxNo); WeiXinMasterConfig masterConfig= weiXinExternalService.selectWeiXinMasterConfig(map); if(masterConfig==null){ return false; } String[] arr = new String[] {masterConfig.getWxToken(), 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"); byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } // 将字节转换为十六进制字符串 private static String byteToHexStr(byte ib) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] ob = new char[2]; ob[0] = Digit[(ib >>> 4) & 0X0F]; ob[1] = Digit[ib & 0X0F]; String s = new String(ob); return s; } // 将字节数组转换为十六进制字符串 private static String byteToStr(byte[] bytearray) { String strDigest = ""; for (int i = 0; i < bytearray.length; i++) { strDigest += byteToHexStr(bytearray[i]); } return strDigest; }
以上是微信公众平台开发之token验证和消息处理的方法的详细内容。更多信息请关注PHP中文网其他相关文章!
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
Windows 11 KB5054979中的新功能以及如何解决更新问题
3 周前ByDDD
如何修复KB5055523无法在Windows 11中安装?
2 周前ByDDD
Inzoi:如何申请学校和大学
4 周前ByDDD
如何修复KB5055518无法在Windows 10中安装?
2 周前ByDDD
Roblox:Dead Rails - 如何召唤和击败Nikola Tesla
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具