微信公众平台开发之token验证和消息处理的示例分析
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要介绍了微信公众平台开发之token验证和消息处理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。/** * * @
千家信息网最后更新 2024年11月17日微信公众平台开发之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安全错误
数据库的锁怎样保障安全
工行软件开发的笔试题
工程数据库系统结构
盛安网络技术
系统软件开发大概要多少钱
聚思互联网科技有限公司
网络安全特长怎么填
淮北电力软件开发公司哪家好
影视数据库网页设计
优秀网络安全安全公益广告
vfp数据库程序设计二级考试
网络安全协议的风险
像小学生宣传网络安全的图片
人力资源平台sql数据库
Sql如何将表加到数据库
2003网络安全设置
宿州通信软件开发费用
红客网络安全工作
乐陵软件开发加盟
软件开发风险和机遇
互联网大会上的科技成果
苹果电脑连接服务器怎么改用户
国内电脑软件开发公司排名
上海手机软件开发定做
上海专业汽车软件开发
文件夹如何导入数据库
intel双路通用平台服务器
举例回答什么是数据库
软件开发风险和机遇
英雄联盟浙江的服务器虚拟主机
网络安全和信息化调查报告