package com.jeecg.p3.weixin.service.impl;
import com.jeecg.p3.baseApi.util.EmojiFilter;
import com.jeecg.p3.commonweixin.entity.MyJwWebJwid;
import com.jeecg.p3.commonweixin.util.DateUtils;
import com.jeecg.p3.message.entity.WeixinGroupMessageSendDetail;
import com.jeecg.p3.message.service.WeixinGroupMessageSendDetailService;
import com.jeecg.p3.qrcode.entity.WeixinQrcode;
import com.jeecg.p3.qrcode.entity.WeixinQrcodeScanRecord;
import com.jeecg.p3.qrcode.service.WeixinQrcodeScanRecordService;
import com.jeecg.p3.qrcode.service.WeixinQrcodeService;
import com.jeecg.p3.system.service.MyJwWebJwidService;
import com.jeecg.p3.weixin.entity.*;
import com.jeecg.p3.weixin.service.*;
import com.jeecg.p3.weixin.util.MessageUtil;
import com.jeecg.p3.weixin.util.WeiXinConstants;
import com.jeecg.p3.weixin.util.WeixinUtil;
import com.jeecg.p3.weixin.vo.WeixinMessageDTO;
import com.jeecg.p3.weixin.vo.resp.Article;
import com.jeecg.p3.weixin.vo.resp.NewsMessageResp;
import com.jeecg.p3.weixin.vo.resp.TextMessageResp;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtil;
import org.jeecgframework.p3.core.util.oConvertUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
/**
* 微信消息处理
* @author LeeShaoQing
* @since 20180723
*/
@Service("wechatService")
public class WechatServiceImpl implements WechatService {
public final static Logger log = LoggerFactory.getLogger(WechatServiceImpl.class);
@Autowired
private WeixinAutoresponseService weixinAutoresponseService;
@Autowired
private WeixinTexttemplateService weixinTexttemplateService;
@Autowired
private WeixinNewstemplateService weixinNewstemplateService;
@Autowired
private WeixinNewsitemService weixinNewsitemService;
@Autowired
private MyJwWebJwidService myJwWebJwidService;
@Autowired
private WeixinAutoresponseDefaultService weixinAutoresponseDefaultService;
@Autowired
private WeixinMenuService weixinMenuService;
@Autowired
private WeixinSubscribeService weixinSubscribeService;
@Autowired
private WeixinReceivetextService weixinReceivetextService;
@Autowired
private WeixinGzuserService weixinGzuserService;
@Autowired
private WeixinQrcodeService weixinQrcodeService;
@Autowired
private WeixinQrcodeScanRecordService weixinQrcodeScanRecordService;
@Autowired
private WeixinGroupMessageSendDetailService weixinGroupMessageSendDetailService;
@Override
public String coreService(HttpServletRequest request) {
log.info(" ------------接受微信客户端消息,进入逻辑处理开始------------");
String respMessage = "";
try {
// xml请求解析
Map<String, String> requestMap = MessageUtil.parseXml(request);
log.info(" ---------解析微信客户端消息完成-----MessageUtil.parseXml-------");
//消息存储-非事件消息
if(!MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(requestMap.get("MsgType"))) {
log.info(" ---------保存微信客户端消息进数据库-------");
saveReceiveMessage(requestMap);
}
log.info(" -----微信客户端消息------: {}", requestMap.toString());
//写入通用DTO类中方便传递参数
WeixinMessageDTO weixinMessageDTO = new WeixinMessageDTO();
// 发送方帐号(OpenId)
weixinMessageDTO.setFromUserName(requestMap.get("FromUserName"));
// 公众帐号(JWID)
weixinMessageDTO.setToUserName(requestMap.get("ToUserName"));
// 消息类型
weixinMessageDTO.setMsgType(requestMap.get("MsgType"));
//消息ID
weixinMessageDTO.setMsgId(requestMap.get("MsgId"));
//消息内容
weixinMessageDTO.setContent(requestMap.get("Content"));
//多媒体ID
weixinMessageDTO.setMediaId(requestMap.get("MediaId"));
//菜单key
weixinMessageDTO.setKey(requestMap.get("EventKey"));
//Event(事件)
weixinMessageDTO.setEvent(requestMap.get("Event"));
//【微信触发类型】文本消息
if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
respMessage = doTextResponse(weixinMessageDTO, request);
}
//【微信触发类型】图片消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
respMessage = doImageResponse(weixinMessageDTO, request);
}
//【微信触发类型】地理位置消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
respMessage = doLocationeResponse(weixinMessageDTO, request);
}
//【微信触发类型】链接消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
respMessage = doLinkResponse(weixinMessageDTO, request);
}
//【微信触发类型】音频消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
respMessage = doVoiceResponse(weixinMessageDTO, request);
}
//【微信触发类型】视频消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.RESP_MESSAGE_TYPE_VIDEO)) {
respMessage = doVideoResponse(weixinMessageDTO, request);
}
//【微信触发类型】小视频消息
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_SHORTVIDEO)) {
respMessage = doShortVideoResponse(weixinMessageDTO, request);
}
//【微信触发类型】事件推送
else if (weixinMessageDTO.getMsgType().equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
// 事件类型
String eventType = weixinMessageDTO.getEvent();
// 订阅
if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
try {
respMessage = doSubscribeEventResponse(weixinMessageDTO, request);
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理订阅事件异常:--------------"+e.toString());
}
//扫描二维码
}else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){
try {
//update-begin--Author:sunkai Date:20180904 for:扫码关注事件--------------------
String sceneId = weixinMessageDTO.getKey();
respMessage = doScanEventResponse(weixinMessageDTO,sceneId, request);
//update-end--Author:sunkai Date:20180904 for:扫码关注事件--------------------
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理扫描二维码事件异常:--------------"+e.toString());
}
}
// 取消订阅
else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
try {
respMessage = doUnsubscribeEventResponse(weixinMessageDTO, request);
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理取消订阅事件异常:--------------"+e.toString());
}
}
//上报地理位置事件
else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){
try {
respMessage = doLocationEventResponse(weixinMessageDTO, request);
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理上报地理位置事件异常:--------------"+e.toString());
}
}
// 自定义菜单点击事件(Click)
else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
try {
respMessage = doMyMenuEventResponse(weixinMessageDTO, request);
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理微信请求[Click]事件异常:--------------"+e.toString());
}
}
// 自定义菜单点击事件(VIEW)
else if (eventType.equals(MessageUtil.EVENT_TYPE_VIEW)) {
try {
respMessage = doMyMenuViewEventResponse(weixinMessageDTO, request);
} catch (Exception e) {
e.printStackTrace();
log.error("-----处理微信请求[View]事件异常:--------------"+e.toString());
}
}
// 其他事件
else {
try {
respMessage
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
















收起资源包目录





































































































共 2010 条
- 1
- 2
- 3
- 4
- 5
- 6
- 21
资源评论


xyq2024
- 粉丝: 3534
- 资源: 6897
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 华为AI应用实践中的人工智能赋能与自动化转型
- 后端常见面试题总结 - Java并发
- 算法设计-最长上升子序列问题
- 今日头条内容推荐算法详析:多维特征融合与优化策略
- 后端常见面试问题总结 - Redis基础
- 数学建模中的炮灰模型应用于女性择偶策略优化
- 电网能量管理:需求规格说明书与系统设计概述
- Flask 基本用户身份验证
- 智慧平安城市综合服务平台需求规格说明书 - 多元化信息服务与安全管理
- 金融支付平台货币基金集成需求:余额宝理财产品支付、提现与安全管理方案
- nvm全英文也叫node.js version management,是一个nodejs的版本管理工具 nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容
- 用户权限管理系统:基于B/S架构的应用设计与功能需求分析
- 电力营销远程实时费控应用:需求规格说明书与功能实现(版本1.0)
- 资金管理系统需求分析文档模板及企业财务管理解决方案
- 金融信息系统:银行储蓄系统需求分析及实现要点解析
- 教育信息化建设中的成绩管理系统详细设计方案
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
