package com.bofeng.wx; import com.bofeng.support.WeChatProperties; import lombok.val; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpQrcodeService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.impl.WxMpQrcodeServiceImpl; import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(WeChatProperties.class) public class WxAutoConfiguration { private final WeChatProperties weChatProperties; private final LogHandler logHandler; private final NullHandler nullHandler; private final MenuHandler menuHandler; private final MsgHandler msgHandler; private final UnsubscribeHandler unsubscribeHandler; private final SubscribeHandler subscribeHandler; private final ScanHandler scanHandler; @Autowired public WxAutoConfiguration(WeChatProperties weChatProperties, LogHandler logHandler, NullHandler nullHandler, MenuHandler menuHandler, MsgHandler msgHandler, UnsubscribeHandler unsubscribeHandler, SubscribeHandler subscribeHandler, ScanHandler scanHandler) { this.weChatProperties = weChatProperties; this.logHandler = logHandler; this.nullHandler = nullHandler; this.menuHandler = menuHandler; this.msgHandler = msgHandler; this.unsubscribeHandler = unsubscribeHandler; this.subscribeHandler = subscribeHandler; this.scanHandler = scanHandler; } @Bean public WxMpService wxMpService() { WxMpInMemoryConfigStorage configStorage = new WxMpInMemoryConfigStorage(); configStorage.setAppId(weChatProperties.getAppID()); configStorage.setSecret(weChatProperties.getAppsecret()); configStorage.setToken(weChatProperties.getToken()); configStorage.setAesKey(weChatProperties.getAesKey()); val service = new WxMpServiceImpl(); service.setWxMpConfigStorage(configStorage); return service; } @Bean public WxMpQrcodeService wxMpQrcodeService(WxMpService wxMpService) { return new WxMpQrcodeServiceImpl(wxMpService); } @Bean public WxMpMessageRouter wxMpMessageRouter(WxMpService wxMpService) { final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); // 记录所有事件的日志 (异步执行) newRouter.rule().handler(this.logHandler).next(); // 关注事件 newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) .event(WxConsts.EventType.SUBSCRIBE).handler(this.subscribeHandler) .end(); // 取消关注事件 newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) .event(WxConsts.EventType.UNSUBSCRIBE) .handler(this.unsubscribeHandler).end(); // 扫码事件 newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) .event(WxConsts.EventType.SCAN).handler(this.scanHandler).end(); // 自定义菜单事件 newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) .event(WxConsts.MenuButtonType.CLICK).handler(this.menuHandler).end(); // 点击菜单连接事件 newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) .event(WxConsts.MenuButtonType.VIEW).handler(this.nullHandler).end(); // 默认 newRouter.rule().async(false).handler(this.msgHandler).end(); return newRouter; } }