springboot微信公众号接入

配置:

wx.token.key=dev
wx.domain=
wx.appId=
wx.appsecret=
wx.token=
wx.aesKey=
wx.templateId=
wx.templateUrl=

定义基类:

Controller
public abstract class WxPortalController {
    
    private Logger logger = LoggerFactory.getLogger(WxPortalController.class);

    /**
     * 绑定微信服务器方法
     * 
     * @param sign
     * @return
     */
    @RequestMapping(method = RequestMethod.GET)
    public String checkSignature(WxSign sign) {
        if (SignUtil.checkSignature(getToken(), sign.getSignature(), sign.getTimestamp(), sign.getNonce())) {
            logger.info("接入成功");
            return sign.getEchostr();
        }
        logger.error("接入失败");
        return "";
    }

    /**
     * 处理微信服务器发来的请求方法
     * 
     * @param req
     * @return
     */
    @RequestMapping(method = RequestMethod.POST)
    public String post(HttpServletRequest req) {
        String respMessage = processRequest(req);
        return respMessage;
    }

    // 核心处理微信消息--子类可以重写
    public  String processRequest(HttpServletRequest request){
        String respMessage = null;
        try {
            // 默认返回的文本消息内容
            String respContent = "请求处理异常,请稍候尝试!";
            // xml请求解析
            Map<String, String> requestMap = MessageUtil.parseXml(request);
            // 发送方帐号(open_id)
            String fromUserName = requestMap.get("FromUserName");
            // 公众帐号
            String toUserName = requestMap.get("ToUserName");
            // 消息类型
            String msgType = requestMap.get("MsgType");
            // 点击菜单id
            String EventKey = requestMap.get("EventKey");
            // 接收文本消息内容
            String content = requestMap.get("Content");
            
            
            // 回复文本消息
            TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
            textMessage.setFuncFlag(0);
            
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                
            }// 图片消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
                respContent = "您发送的是图片消息!";
                textMessage.setContent(respContent);
                // 将文本消息对象转换成xml字符串
                respMessage = MessageUtil.textMessageToXml(textMessage);
            }
            // 地理位置消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
                respContent = "您发送的是地理位置消息!";
                textMessage.setContent(respContent);
                // 将文本消息对象转换成xml字符串
                respMessage = MessageUtil.textMessageToXml(textMessage);
            }
            // 链接消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
                respContent = "您发送的是链接消息!";
                textMessage.setContent(respContent);
                // 将文本消息对象转换成xml字符串
                respMessage = MessageUtil.textMessageToXml(textMessage);

            }
            // 音频消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
                respContent = "您发送的是音频消息!";
                textMessage.setContent(respContent);
                // 将文本消息对象转换成xml字符串
                respMessage = MessageUtil.textMessageToXml(textMessage);
            }// 事件推送
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
                // 事件类型
                String eventType = requestMap.get("Event");
                
                // 自定义菜单点击事件
                if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
                    
                } 
                // 点击菜单转网页
                else if (eventType.equals(MessageUtil.EVENT_TYPE_VIEW)) {
                }

                // 订阅
                else if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
                    StringBuffer buffer = new StringBuffer();
                    buffer.append("您好,欢迎关注");
                    respContent = String.valueOf(buffer);
                    textMessage.setContent(respContent);
                    respMessage = MessageUtil.textMessageToXml(textMessage);
                } else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
                
                }
                // 取消订阅
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
                }
            }
            
        } catch (Exception e) {
            logger.error(e.getMessage().toString());
            e.printStackTrace();
        }

        return respMessage;    
        
    }

    /**
     * 子类提供token用于绑定微信公众平台
     *
     * @return token值
     */
    protected abstract String getToken();

    /**
     * 公众号APPID,使用消息加密模式时用户自行设置
     *
     * @return 微信公众平台提供的appid
     */
    protected String getAppId() {
        return null;
    }

    /**
     * 加密的密钥,使用消息加密模式时用户自行设置
     *
     * @return 用户自定义的密钥
     */
    protected String getAESKey() {
        return null;
    }

使用:

@RestController
@RequestMapping("/wechat/portal")
public class WeChatController extends WxPortalController{
    
    @Value("${wx.token}")
    private String TOKEN;

    @Override
    protected String getToken() {
        return TOKEN;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值