You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							58 lines
						
					
					
						
							1.8 KiB
						
					
					
				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"));
 | 
						|
    }
 | 
						|
}
 | 
						|
 |