Просмотр исходного кода

[event处理][修改]:再整理

release
Stormeye Wu 7 лет назад
Родитель
Сommit
b12f001815
21 измененных файлов: 321 добавлений и 20 удалений
  1. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java
  2. +109
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java
  3. +17
    -0
      mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java
  4. +24
    -0
      mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java
  5. +25
    -0
      mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java
  6. +1
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/AbstractHandler.java
  7. +2
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/KfSessionHandler.java
  8. +2
    -2
      mallinkService/src/main/java/com/iformall/service/wechat/handler/LocationHandler.java
  9. +2
    -2
      mallinkService/src/main/java/com/iformall/service/wechat/handler/LogHandler.java
  10. +2
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/MenuHandler.java
  11. +2
    -2
      mallinkService/src/main/java/com/iformall/service/wechat/handler/MsgHandler.java
  12. +1
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/NullHandler.java
  13. +3
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/ScanHandler.java
  14. +2
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/StoreCheckNotifyHandler.java
  15. +4
    -3
      mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java
  16. +2
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java
  17. +104
    -0
      mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java
  18. +1
    -1
      mallinkService/src/main/java/com/iformall/service/wechat/utils/JsonUtils.java
  19. +7
    -0
      mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml
  20. +8
    -1
      mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java
  21. +1
    -1
      mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java

+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java Просмотреть файл

@@ -13,6 +13,8 @@ public interface WxAuthorizerInfoMapper extends CommonMapper<WxAuthorizerInfo, L

WxAuthorizerInfo findWeChatMp(WxAuthorizerInfo wxAuthorizerInfo);

WxAuthorizerInfo findByAppid(String appId);

int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo);

int updateRefreshToken(WxAuthorizerInfo wxAuthorizerInfo);


+ 109
- 1
mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java Просмотреть файл

@@ -2,8 +2,13 @@ package com.iformall.service.wechat;

import com.iformall.config.WechatRedisProperies;
import com.iformall.config.WechatOpenProperties;
import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.enums.EnumAppType;
import com.iformall.mapper.WxAuthorizerInfoMapper;
import com.iformall.mapper.WxComponentVerifyTicketMapper;
import com.iformall.service.wechat.handler.*;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.constant.WxMpEventConstants;
import me.chanjar.weixin.open.api.impl.WxOpenMessageRouter;
import me.chanjar.weixin.open.api.impl.WxOpenServiceImpl;
import org.slf4j.Logger;
@@ -33,6 +38,26 @@ public class FmOpenService extends WxOpenServiceImpl {
@Autowired
private WxAuthorizerInfoMapper authorizerInfoMapper;

@Autowired
protected NullHandler nullHandler;
@Autowired
protected KfSessionHandler kfSessionHandler;
@Autowired
protected StoreCheckNotifyHandler storeCheckNotifyHandler;
@Autowired
protected LocationHandler locationHandler;
@Autowired
protected MenuHandler menuHandler;
@Autowired
protected MsgHandler msgHandler;
@Autowired
protected UnsubscribeHandler unsubscribeHandler;
@Autowired
protected SubscribeHandler subscribeHandler;

@Autowired
protected WeappAuditHandler weappAuditHandler;

private static JedisPool pool;
private WxOpenMessageRouter wxOpenMessageRouter;

@@ -46,9 +71,92 @@ public class FmOpenService extends WxOpenServiceImpl {
setWxOpenConfigStorage(configStorage);
wxOpenMessageRouter = new WxOpenMessageRouter(this);
wxOpenMessageRouter.rule().handler((wxMpXmlMessage, map, wxMpService, wxSessionManager) -> {
logger.info("\n接收到 {} 公众号请求消息,内容:{}", wxMpService.getWxMpConfigStorage().getAppId(), wxMpXmlMessage);
String appId = wxMpService.getWxMpConfigStorage().getAppId();
WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.findByAppid(appId);
String appType;
if(authorizerInfo.getType() <= EnumAppType.C.getCode()) {
appType = "小程序";
} else {
appType = "公众号";
}
logger.info("\n接收到{}{}请求消息,内容:{}", appId, appType, wxMpXmlMessage);
return null;
}).next();

// 接收客服会话管理事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxMpEventConstants.CustomerService.KF_CREATE_SESSION)
.handler(this.kfSessionHandler).end();
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxMpEventConstants.CustomerService.KF_CLOSE_SESSION)
.handler(this.kfSessionHandler).end();
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxMpEventConstants.CustomerService.KF_SWITCH_SESSION)
.handler(this.kfSessionHandler).end();

// 门店审核事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxMpEventConstants.POI_CHECK_NOTIFY)
.handler(this.storeCheckNotifyHandler).end();

// 自定义菜单事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.CLICK)
.handler(this.menuHandler).end();

// 点击菜单连接事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.VIEW)
.handler(this.nullHandler).end();

// 关注事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE)
.handler(this.subscribeHandler).end();

// 取消关注事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(this.unsubscribeHandler).end();

// 上报地理位置事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.LOCATION)
.handler(this.locationHandler).end();

// 接收地理位置消息
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.LOCATION)
.handler(this.locationHandler).end();

// 扫码事件
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SCAN)
.handler(this.nullHandler).end();

// 小程序 审核通过
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.WEAPP_AUDIT_SUCCESS)
.handler(this.weappAuditHandler).end();
// 小程序 审核失败
wxOpenMessageRouter.rule().async(false)
.msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.WEAPP_AUDIT_FAIL)
.handler(this.weappAuditHandler).end();

// 默认
wxOpenMessageRouter.rule().async(false).handler(this.msgHandler).end();
}

public WxOpenMessageRouter getWxOpenMessageRouter() {


+ 17
- 0
mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java Просмотреть файл

@@ -0,0 +1,17 @@
package com.iformall.service.wechat.builder;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Stormeye
*/
public abstract class AbstractBuilder {
protected final Logger logger = LoggerFactory.getLogger(getClass());

public abstract WxMpXmlOutMessage build(String content,
WxMpXmlMessage wxMessage, WxMpService service);
}

+ 24
- 0
mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java Просмотреть файл

@@ -0,0 +1,24 @@
package com.iformall.service.wechat.builder;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public class ImageBuilder extends AbstractBuilder {

@Override
public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage,
WxMpService service) {

WxMpXmlOutImageMessage m = WxMpXmlOutMessage.IMAGE().mediaId(content)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();

return m;
}

}

+ 25
- 0
mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java Просмотреть файл

@@ -0,0 +1,25 @@
package com.iformall.service.wechat.builder;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public class TextBuilder extends AbstractBuilder {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Override
public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage,
WxMpService service) {
WxMpXmlOutTextMessage m = WxMpXmlOutMessage.TEXT().content(content)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return m;
}

}

mlWechatOpen/src/main/java/com/iformall/mp/handler/AbstractHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/AbstractHandler.java Просмотреть файл

@@ -1,4 +1,4 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import org.slf4j.Logger;

mlWechatOpen/src/main/java/com/iformall/mp/handler/KfSessionHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/KfSessionHandler.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.service.wechat.handler.AbstractHandler;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

mlWechatOpen/src/main/java/com/iformall/mp/handler/LocationHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/LocationHandler.java Просмотреть файл

@@ -1,6 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.mp.builder.TextBuilder;
import com.iformall.service.wechat.builder.TextBuilder;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

mlWechatOpen/src/main/java/com/iformall/mp/handler/LogHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/LogHandler.java Просмотреть файл

@@ -1,6 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.mp.utils.JsonUtils;
import com.iformall.service.wechat.utils.JsonUtils;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

mlWechatOpen/src/main/java/com/iformall/mp/handler/MenuHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/MenuHandler.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.service.wechat.handler.AbstractHandler;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

mlWechatOpen/src/main/java/com/iformall/mp/handler/MsgHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/MsgHandler.java Просмотреть файл

@@ -1,6 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.mp.builder.TextBuilder;
import com.iformall.service.wechat.builder.TextBuilder;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;

mlWechatOpen/src/main/java/com/iformall/mp/handler/NullHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/NullHandler.java Просмотреть файл

@@ -1,4 +1,4 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;

mlWechatOpen/src/main/java/com/iformall/mp/handler/ScanHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/ScanHandler.java Просмотреть файл

@@ -1,4 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.service.wechat.handler.AbstractHandler;

/**
* @author Binary Wang(https://github.com/binarywang)

mlWechatOpen/src/main/java/com/iformall/mp/handler/StoreCheckNotifyHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/StoreCheckNotifyHandler.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.service.wechat.handler.AbstractHandler;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java Просмотреть файл

@@ -1,9 +1,9 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.mapper.WxAuthorizerInfoMapper;
import com.iformall.mp.builder.TextBuilder;
import com.iformall.service.WxCUserService;
import com.iformall.service.wechat.handler.AbstractHandler;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
@@ -53,7 +53,7 @@ public class SubscribeHandler extends AbstractHandler {
}
}

/*
WxMpXmlOutMessage responseResult = null;
try {
responseResult = this.handleSpecial(wxMessage);
@@ -70,6 +70,7 @@ public class SubscribeHandler extends AbstractHandler {
} catch (Exception e) {
this.logger.error(e.getMessage(), e);
}
*/

return null;
}

mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java → mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java Просмотреть файл

@@ -1,8 +1,9 @@
package com.iformall.mp.handler;
package com.iformall.service.wechat.handler;

import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.mapper.WxAuthorizerInfoMapper;
import com.iformall.service.WxCUserService;
import com.iformall.service.wechat.handler.AbstractHandler;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

+ 104
- 0
mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java Просмотреть файл

@@ -0,0 +1,104 @@
package com.iformall.service.wechat.handler;

import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxWeappAuditStatus;
import com.iformall.enums.EnumAppType;
import com.iformall.enums.EnumWeappAuditStatus;
import com.iformall.service.MailService;
import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxWeappAuditStatusService;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class WeappAuditHandler extends AbstractHandler {

@Autowired
private WxWeappAuditStatusService weappAuditStatusService;

@Autowired
private WxAppinfoService appinfoService;

@Autowired
private String fmAuditEmails;

@Autowired
private MailService mailService;

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
String appId = wxMpService.getWxMpConfigStorage().getAppId();
if(wxMessage.getEvent().equalsIgnoreCase(WxConsts.EventType.WEAPP_AUDIT_SUCCESS)) {
updateAuditStatus(appId, true, null);
} else if(wxMessage.getEvent().equalsIgnoreCase(WxConsts.EventType.WEAPP_AUDIT_SUCCESS)) {
updateAuditStatus(appId, false, wxMessage.getReason());
}
return null;
}

private void updateAuditStatus(String appId, boolean success, String reason) {
WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
if (auditStatus != null) {
if (success) {
auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
auditStatus.setAuditErrCode("");
} else {
auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
auditStatus.setAuditErrCode(reason);
}
auditStatus.setAuditTime(new Date());
weappAuditStatusService.updateStatus(auditStatus);
}

// 发邮件
WxAppinfo appinfo = appinfoService.getByAppId(appId);
if (appinfo != null) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

StringBuilder titleSB = new StringBuilder();
if (appinfo.getType().equals(EnumAppType.C.getCode())) {
titleSB.append("C端小程序");
} else if (appinfo.getType().equals(EnumAppType.B.getCode())) {
titleSB.append("B端小程序");
} else if (appinfo.getType().equals(EnumAppType.MP_S.getCode())) {
titleSB.append("公众号-服务号");
} else if (appinfo.getType().equals(EnumAppType.MP_P.getCode())) {
titleSB.append("公众号-订阅号");
}
titleSB.append(appinfo.getName());
if (success) {
titleSB.append("审核通过");
} else {
titleSB.append("审核未通过");
}

StringBuilder sb = new StringBuilder();
sb.append(df.format(new Date())).append("\n");
if (success) {
sb.append("审核通过\n");
} else {
sb.append("审核未通过\n").append("原因").append(reason);
}

String[] receivers = fmAuditEmails.split(",");

//发送邮件
mailService.sendSimpleMail(receivers, titleSB.toString(), sb.toString());
}
}

}

mlWechatOpen/src/main/java/com/iformall/mp/utils/JsonUtils.java → mallinkService/src/main/java/com/iformall/service/wechat/utils/JsonUtils.java Просмотреть файл

@@ -1,4 +1,4 @@
package com.iformall.mp.utils;
package com.iformall.service.wechat.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

+ 7
- 0
mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml Просмотреть файл

@@ -162,6 +162,13 @@
where `authorizer_appid` = #{authorizerAppid}
</select>

<select id="findByAppid" parameterType="string" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_authorizer_info
where `authorizer_appid` = #{value}
</select>

<resultMap id="VBaseResultMap" type="com.iformall.domain.vo.WxWeappInfo">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>


+ 8
- 1
mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java Просмотреть файл

@@ -219,7 +219,14 @@ public class WechatCalllbackController extends BaseController {
}

// 实际 消息 处理
handleCallbackMessage(appId, response, inMessage);
//handleCallbackMessage(appId, response, inMessage);
WxMpXmlOutMessage outMessage = openService.getWxOpenMessageRouter().route(inMessage, appId);
if(outMessage == null) {
PrintWriter printWriter = response.getWriter();
wechatWriteSuccess(printWriter);
}
PrintWriter printWriter = response.getWriter();
wechatWriteSuccess(printWriter);
}

/**


+ 1
- 1
mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java Просмотреть файл

@@ -1,7 +1,7 @@
package com.iformall.mp.manager;

import com.iformall.mp.handler.*;
import com.iformall.service.wechat.FmOpenService;
import com.iformall.service.wechat.handler.*;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.constant.WxMpEventConstants;


Загрузка…
Отмена
Сохранить