package com.ynxbd.wx.wxfactory.utils; import com.ynxbd.wx.wxfactory.bean.event.WxEvent; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; @Slf4j public class WxEventHelper { /** * 过滤内容可以直接返回 * * @param wxEvent 事件 */ public static boolean filter(WxEvent wxEvent) { String event = wxEvent.getEvent(); if (event != null) { event = event.toUpperCase(); } String msgType = wxEvent.getMsgType(); if (msgType != null) { msgType = msgType.toUpperCase(); } if ("VIEW".equals(event) && "EVENT".equals(msgType)) { // 点击菜单 return true; } if ("TEMPLATESENDJOBFINISH".equals(event)) { // 模板发送作业完成-->直接返回success log.warn("[公众号]模板消息推送 fromUserName={}, msgType={}, eventKey={}, event={}", wxEvent.getFromUserName(), msgType, wxEvent.getEventKey(), event); return true; } return false; } /** * 消息验签 * * @param request request * @param wxToken wxToken */ public static boolean verifyEventSign(HttpServletRequest request, String wxToken) { String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String[] array = new String[]{wxToken, timestamp, nonce}; Arrays.sort(array); StringBuilder sb = new StringBuilder(); for (String s : array) { sb.append(s); } return DigestUtils.sha1Hex(sb.toString()).equals(request.getParameter("signature")); } }