mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-11 21:29:02 +08:00
✨ Introducing new features. 完善 微信模块功能
This commit is contained in:
1 parent
a6f0bbd169
commit
25b172e7f6
3 files changed
+124
-18
No files matched your search
+7
-7
@@ -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());
|
||||
|
||||
+9
@@ -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());
|
||||
|
||||
+108
-11
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user