WxMpConfiguration.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package vip.xiaonuo.weixin.gongzhong.config;
  2. import lombok.RequiredArgsConstructor;
  3. import lombok.SneakyThrows;
  4. import lombok.extern.slf4j.Slf4j;
  5. import me.chanjar.weixin.common.api.WxConsts;
  6. import me.chanjar.weixin.common.error.WxErrorException;
  7. import me.chanjar.weixin.common.session.WxSessionManager;
  8. import me.chanjar.weixin.mp.api.WxMpMessageHandler;
  9. import me.chanjar.weixin.mp.api.WxMpMessageRouter;
  10. import me.chanjar.weixin.mp.api.WxMpService;
  11. import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
  12. import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
  13. import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
  14. import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
  15. import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
  16. import org.springframework.context.annotation.Bean;
  17. import org.springframework.context.annotation.Configuration;
  18. import vip.xiaonuo.coldchain.modular.alarmuser.entity.AlarmUser;
  19. import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
  20. import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
  21. import vip.xiaonuo.dev.modular.config.service.DevConfigService;
  22. import vip.xiaonuo.weixin.gongzhong.service.WxMenuService;
  23. import java.util.Map;
  24. import java.util.Objects;
  25. /**
  26. * WxJava 公众号配置
  27. */
  28. @Slf4j
  29. @Configuration
  30. @RequiredArgsConstructor
  31. public class WxMpConfiguration {
  32. private final PushConfigure properties;
  33. private final WxMenuService wxMenuService;
  34. private final AlarmUserService alarmUserService;
  35. private final DevConfigService devConfigService;
  36. @SneakyThrows
  37. @Bean
  38. public WxMpService wxMpService() {
  39. WxMpDefaultConfigImpl configStorage = new WxMpMapConfigImpl();
  40. configStorage.setAppId(properties.getAppId());
  41. configStorage.setSecret(properties.getSecret());
  42. configStorage.setUseStableAccessToken(true);
  43. WxMpService service = new WxMpServiceImpl();
  44. service.setWxMpConfigStorage(configStorage);
  45. String updateMenu = devConfigService.getValueByKey("wx_update_menu");
  46. if (Boolean.parseBoolean(updateMenu)) {
  47. //创建菜单
  48. service.getMenuService().menuCreate(wxMenuService.createMenu());
  49. }
  50. return service;
  51. }
  52. @Bean
  53. public WxMpMessageRouter wxMpMessageRouter() {
  54. WxMpMessageRouter router = new WxMpMessageRouter(wxMpService());
  55. // 关注事件
  56. router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT).event(WxConsts.EventType.SUBSCRIBE)
  57. .handler(new WxMpMessageHandler() {
  58. @Override
  59. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
  60. log.info("用户关注 {}", wxMessage);
  61. AlarmUser alarmUser = alarmUserService.subscribe(wxMessage.getFromUser());
  62. String msg;
  63. //用户已授权
  64. if (alarmUser != null && !Objects.equals("-1", alarmUser.getCreateOrg())) {
  65. msg = devConfigService.getValueByKey("wx_authed_content");
  66. } else {
  67. msg = devConfigService.getValueByKey("wx_not_auth_content").replace("authUrl", wxMenuService.getAuthUrl());
  68. }
  69. return WxMpXmlOutMessage.TEXT()
  70. .content(msg)
  71. .fromUser(wxMessage.getToUser())
  72. .toUser(wxMessage.getFromUser())
  73. .build();
  74. }
  75. })
  76. .end();
  77. // 取消关注事件
  78. router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT).event(WxConsts.EventType.UNSUBSCRIBE)
  79. .handler(new WxMpMessageHandler() {
  80. @Override
  81. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
  82. log.info("用户取消关注 {}", wxMessage);
  83. alarmUserService.unsubscribe(wxMessage.getFromUser());
  84. return null;
  85. }
  86. })
  87. .end();
  88. // 点击菜单事件
  89. router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT).event(WxConsts.EventType.CLICK)
  90. .handler(new WxMpMessageHandler() {
  91. @Override
  92. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
  93. log.info("用户点击 {}", wxMessage);
  94. //点击了关于我们
  95. if (wxMessage.getEventKey().equals("aboutUs")) {
  96. return WxMpXmlOutMessage.TEXT()
  97. .content(devConfigService.getValueByKey("wx_about_us"))
  98. .fromUser(wxMessage.getToUser())
  99. .toUser(wxMessage.getFromUser())
  100. .build();
  101. }
  102. return null;
  103. }
  104. })
  105. .end();
  106. // 点击view事件
  107. router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT).event(WxConsts.EventType.VIEW)
  108. .handler(new WxMpMessageHandler() {
  109. @Override
  110. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
  111. log.info("用户打开view {}", wxMessage);
  112. return null;
  113. }
  114. })
  115. .end();
  116. // 发送文字事件
  117. router.rule().async(false).msgType(WxConsts.XmlMsgType.TEXT)
  118. .handler(new WxMpMessageHandler() {
  119. @Override
  120. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
  121. log.info("用户发送文字事件 {}", wxMessage);
  122. log.info("用户[{}]发送了:{}", wxMessage.getFromUser(), wxMessage.getContent());
  123. return null;
  124. }
  125. })
  126. .end();
  127. return router;
  128. }
  129. }