✨ Introducing new features. 完善 微信模块功能

This commit is contained in:
冷冷 committed 2020-05-06 09:08:43 +08:00
1 parent a6f0bbd169
commit 25b172e7f6
3 files changed
+124 -18

No files matched your search

@@ -139,15 +139,15 @@ public class WxFansMsgController {
}
if (WxConsts.KefuMsgType.NEWS.equals(wxMsg.getRepType())) {
List<WxMpKefuMessage.WxArticle> list = new ArrayList<>();
JSONArray jSONArray = JSONUtil.parseObj(wxMsg.getContent()).getJSONArray("articles");
JSONArray articles = JSONUtil.parseObj(wxMsg.getContent()).getJSONArray("articles");
WxMpKefuMessage.WxArticle t;
for (Object object : jSONArray) {
JSONObject jSONObject = JSONUtil.parseObj(JSONUtil.toJsonStr(object));
for (Object object : articles) {
JSONObject obj = JSONUtil.parseObj(JSONUtil.toJsonStr(object));
t = new WxMpKefuMessage.WxArticle();
t.setTitle(jSONObject.getStr("title"));
t.setDescription(jSONObject.getStr("digest"));
t.setPicUrl(jSONObject.getStr("thumbUrl"));
t.setUrl(jSONObject.getStr("url"));
t.setTitle(obj.getStr("title"));
t.setDescription(obj.getStr("digest"));
t.setPicUrl(obj.getStr("thumbUrl"));
t.setUrl(obj.getStr("url"));
list.add(t);
}
wxMsg.setRepName(wxMsg.getRepName());
@@ -63,6 +63,15 @@ public class LogHandler extends AbstractHandler {
if (WxConsts.XmlMsgType.TEXT.equals(wxMessage.getMsgType())) {
wxMsg.setRepContent(wxMessage.getContent());
}
if (WxConsts.MenuButtonType.VIEW.equalsIgnoreCase(wxMessage.getEvent())) {
wxMsg.setRepUrl(wxMessage.getEventKey());
}
if (WxConsts.MenuButtonType.CLICK.equalsIgnoreCase(wxMessage.getEvent())) {
wxMsg.setRepName(wxMessage.getEventKey());
}
if (WxConsts.XmlMsgType.VOICE.equals(wxMessage.getMsgType())) {
wxMsg.setRepName(wxMessage.getMediaId() + "." + wxMessage.getFormat());
wxMsg.setRepContent(wxMessage.getRecognition());
@@ -1,36 +1,133 @@
package com.pig4cloud.pigx.mp.handler;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pig4cloud.pigx.mp.config.WxMpContextHolder;
import com.pig4cloud.pigx.mp.entity.WxMpMenu;
import com.pig4cloud.pigx.mp.mapper.WxMenuMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
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 me.chanjar.weixin.mp.bean.message.WxMpXmlOutNewsMessage;
import me.chanjar.weixin.mp.builder.outxml.*;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType;
/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Slf4j
@Component
@AllArgsConstructor
public class MenuHandler extends AbstractHandler {
private final WxMenuMapper wxMenuMapper;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService weixinService,
WxSessionManager sessionManager) {
WxSessionManager sessionManager) throws WxErrorException {
//组装菜单回复消息
return getWxMpXmlOutMessage(wxMessage);
}
String msg = String.format("type:%s, event:%s, key:%s",
wxMessage.getMsgType(), wxMessage.getEvent(),
wxMessage.getEventKey());
if (MenuButtonType.VIEW.equals(wxMessage.getEvent())) {
return null;
/**
* 组装菜单回复消息
*
* @param wxMessage
* @return
*/
public WxMpXmlOutMessage getWxMpXmlOutMessage(WxMpXmlMessage wxMessage) {
WxMpMenu wxMpMenu = wxMenuMapper.selectOne(Wrappers.<WxMpMenu>lambdaQuery()
.eq(WxMpMenu::getWxAccountAppid, WxMpContextHolder.getAppId()));
List<JSONObject> buttons = JSONUtil.parseObj(wxMpMenu.getMenu()).getJSONArray("button").toList(JSONObject.class);
String eventKey = wxMessage.getEventKey();
// 获取子集
List<JSONObject> buttonList = new ArrayList<>();
for (JSONObject button : buttons) {
JSONArray subButton = button.getJSONArray("sub_button");
if (subButton.isEmpty()) {
buttonList.add(button);
continue;
}
List<JSONObject> subButtonList = subButton.toList(JSONObject.class);
buttonList.addAll(subButtonList);
}
return WxMpXmlOutMessage.TEXT().content(msg)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
// 遍历规则
for (JSONObject button : buttonList) {
// 可以在这里进行自定义逻辑开发
if (!eventKey.equalsIgnoreCase(button.getStr("key"))) {
continue;
}
WxMpXmlOutMessage wxMpXmlOutMessage = null;
String repType = button.getStr("repType");
String repName = button.getStr("repName");
String repContent = button.getStr("repContent");
String repMediaId = button.getStr("repMediaId");
String repDesc = button.getStr("repDesc");
if (WxConsts.KefuMsgType.TEXT.equals(repType)) {
wxMpXmlOutMessage = new TextBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).content(repContent).build();
}
if (WxConsts.KefuMsgType.IMAGE.equals(repType)) {
wxMpXmlOutMessage = new ImageBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).mediaId(repMediaId).build();
}
if (WxConsts.KefuMsgType.VOICE.equals(repType)) {
wxMpXmlOutMessage = new VoiceBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).mediaId(repMediaId).build();
}
if (WxConsts.KefuMsgType.VIDEO.equals(repType)) {
wxMpXmlOutMessage = new VideoBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).mediaId(repMediaId)
.title(repName).description(repDesc).build();
}
if (WxConsts.KefuMsgType.MUSIC.equals(repType)) {
String repThumbMediaId = button.getStr("repThumbMediaId");
String repUrl = button.getStr("repUrl");
String repHqUrl = button.getStr("repHqUrl");
wxMpXmlOutMessage = new MusicBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.thumbMediaId(repThumbMediaId)
.title(repName).description(repDesc)
.musicUrl(repUrl).hqMusicUrl(repHqUrl).build();
}
if (WxConsts.KefuMsgType.NEWS.equals(repType)) {
String content = button.getStr("content");
List<WxMpXmlOutNewsMessage.Item> list = new ArrayList<>();
List<JSONObject> articles = JSONUtil.parseObj(content).getJSONArray("articles").toList(JSONObject.class);
WxMpXmlOutNewsMessage.Item t;
for (JSONObject jSONObject : articles) {
t = new WxMpXmlOutNewsMessage.Item();
t.setTitle(jSONObject.getStr("title"));
t.setDescription(jSONObject.getStr("digest"));
t.setPicUrl(jSONObject.getStr("thumbUrl"));
t.setUrl(jSONObject.getStr("url"));
list.add(t);
}
wxMpXmlOutMessage = new NewsBuilder().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).articles(list).build();
}
return wxMpXmlOutMessage;
}
return null;
}
}