feat:微信通知改造

This commit is contained in:
苏竹红
2025-10-15 10:32:48 +08:00
parent 211fc19499
commit ba6835a887
4 changed files with 165 additions and 5 deletions

View File

@@ -1,6 +1,8 @@
package com.cool.store.handler;
import com.cool.store.dto.wechat.CallbackMessageDTO;
import com.cool.store.dao.PartnerUserWechatBindDAO;
import com.cool.store.dto.wechat.WechatUserInfoDTO;
import com.cool.store.service.wechat.WechatTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
@@ -8,6 +10,7 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.annotation.Resource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
@@ -23,7 +26,10 @@ import java.util.Map;
@Slf4j
public class WeChatHandler {
@Resource
PartnerUserWechatBindDAO partnerUserWechatBindDAO;
@Resource
WechatTemplateService wechatTemplateService;
public Map<String, Object> parseXmlToMap(String xmlContent) throws Exception {
Map<String, Object> result = new HashMap<>();
@@ -88,8 +94,16 @@ public class WeChatHandler {
}
private String handleSubscribeEvent(String fromUserName,String toUserName) {
try {
//根据openId 获取用户信息
WechatUserInfoDTO userInfo = wechatTemplateService.getUserInfo(fromUserName, null);
//根据unionId 更新服务号ID
if (userInfo != null) {
partnerUserWechatBindDAO.updateByUnionId(userInfo.getUnionid(),fromUserName);
}
// 立即回复欢迎消息
return buildWelcomeReply(fromUserName, toUserName);

View File

@@ -116,8 +116,10 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService {
partnerUserWechatBindDAO.insertSelective(bindDO);
}else {
//维护unionId 针对老数据没有unionId
zlPartnerUserBindDO.setUnionId(unionId);
partnerUserWechatBindDAO.update(zlPartnerUserBindDO);
if (zlPartnerUserBindDO.getUnionId()==null){
zlPartnerUserBindDO.setUnionId(unionId);
partnerUserWechatBindDAO.update(zlPartnerUserBindDO);
}
}
BeanUtil.copyProperties(hyPartnerUserInfoDO, userInfoVO);
fillLineInfo(userInfoVO, hyPartnerUserInfoDO.getPartnerId());

View File

@@ -4,6 +4,7 @@ import com.cool.store.builder.TemplateMessageBuilder;
import com.cool.store.config.weixin.WechatMpProperties;
import com.cool.store.dto.wechat.AccessTokenDTO;
import com.cool.store.dto.wechat.WechatTemplateMessageDTO;
import com.cool.store.dto.wechat.WechatUserInfoDTO;
import com.cool.store.enums.wechat.WechatTemplateEnum;
import com.cool.store.utils.OkHttpUtil;
import com.cool.store.utils.poi.StringUtils;
@@ -59,6 +60,34 @@ public class WechatTemplateService {
return null;
}
public WechatUserInfoDTO getUserInfo(String openId, String lang) {
String accessToken = getAccessToken();
//默认中国
lang = StringUtils.isEmpty(lang)?"zh_CN":lang;
if (accessToken == null) {
log.error("获取access_token失败");
return null;
}
String url = String.format("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s",
accessToken, openId);
if (lang != null && !lang.trim().isEmpty()) {
url += "&lang=" + lang;
}
try {
String result = okHttpUtil.doGet(url);
log.debug("获取用户信息响应: {}", result);
WechatUserInfoDTO userInfo = objectMapper.readValue(result, WechatUserInfoDTO.class);
return userInfo;
} catch (IOException e) {
log.error("获取用户信息失败", e);
return null;
} catch (Exception e) {
log.error("解析用户信息响应失败", e);
return null;
}
}
public boolean sendNormalTemplate(String openId, WechatTemplateEnum template, Map<String, Object> data) {
WechatTemplateMessageDTO messageDTO = templateMessageBuilder.buildNormalTemplate(openId, template, data);
return sendTemplateMessage(messageDTO);