微信公众平台开发之token验证和消息处理的示例分析
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要介绍了微信公众平台开发之token验证和消息处理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。/** * * @
千家信息网最后更新 2024年11月18日微信公众平台开发之token验证和消息处理的示例分析
这篇文章主要介绍了微信公众平台开发之token验证和消息处理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
/** * * @Description: 微信消息处理以及用户分组 */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并校验 Mapmap=new HashMap (); 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验证和消息处理的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
消息
篇文章
处理
公众
平台
示例
分析
开发
验证
类型
合法
价值
信息
兴趣
内容
十六进制
同时
字符
字符串
字节
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络教程技术与数据库
电信服务器维护费用
阿里云服务器移植
计算机网络技术项目建设
sql2000数据库工具
湖北综合软件开发零售价格
大渡口区一站式软件开发流程售价
数据库可以设置列值为null吗
网络安全部涉及的范围是
服务器玩英雄联盟为什么会卡
自动化网络安全问题病毒防护
修改数据库类型长度
甲方软件开发人员
非关系型数据库软件
危害网络安全的犯罪有那些
网络安全专题讲座新闻稿
广东项目软件开发公司
会考网络技术应用
剑网3服务器开服时间
日本有打车软件开发
网络安全宣讲主题词
uniapp 图片存储数据库
软件开发属于专利权吗
asp聊天室数据库源码
网络安全技术基础配伍题
计算机网络技术 三级 题库
软件开发项目预算都有哪些
数据库会话事务
观唐互联网科技公司
在哪可以培训pkpm软件开发