feat:通知

This commit is contained in:
苏竹红
2025-10-14 15:10:54 +08:00
parent 7752433027
commit 89a14766ae
6 changed files with 193 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
package com.cool.store.handler;
import com.cool.store.dto.wechat.CallbackMessageDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @Author suzhuhong
* @Date 2025/10/14 14:56
* @Version 1.0
*/
@Component
@Slf4j
public class WeChatHandler {
public String processMessage(CallbackMessageDTO message) {
String msgType = message.getMsgType();
switch (msgType) {
case "event":
return handleEvent(message);
// case "text":
// return handleTextMessage(message);
//
// case "image":
// return handleImageMessage(message);
default:
// 其他类型的消息直接回复success
return buildSuccessReply(message.getFromUserName(), message.getToUserName());
}
}
private String handleEvent(CallbackMessageDTO message) {
String event = message.getEvent();
switch (event) {
case "subscribe":
// 关注事件 - 绑定用户
return handleSubscribeEvent(message);
case "unsubscribe":
// 取消关注事件 - 解绑用户
return handleUnsubscribeEvent(message);
default:
return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
}
}
private String handleSubscribeEvent(CallbackMessageDTO message) {
String openId = message.getFromUserName();
try {
//userBindingService.bindOfficialAccountUser(openId);
// 立即回复欢迎消息
return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
} catch (Exception e) {
// 即使处理失败也要返回success
return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
}
}
/**
* 处理取消关注事件
*/
private String handleUnsubscribeEvent(CallbackMessageDTO message) {
String openId = message.getFromUserName();
// 异步处理用户解绑
//userBindingService.unbindOfficialAccountUser(openId);
return "success";
}
private String buildSuccessReply(String fromUser, String toUser) {
return String.format(
"<xml>" +
"<ToUserName><![CDATA[%s]]></ToUserName>" +
"<FromUserName><![CDATA[%s]]></FromUserName>" +
"<CreateTime>%d</CreateTime>" +
"<MsgType><![CDATA[text]]></MsgType>" +
"<Content><![CDATA[success]]></Content>" +
"</xml>",
fromUser, toUser, System.currentTimeMillis() / 1000
);
}
private String buildWelcomeReply(String fromUser, String toUser) {
return String.format(
"<xml>" +
"<ToUserName><![CDATA[%s]]></ToUserName>" +
"<FromUserName><![CDATA[%s]]></FromUserName>" +
"<CreateTime>%d</CreateTime>" +
"<MsgType><![CDATA[text]]></MsgType>" +
"<Content><![CDATA[欢迎关注!您已成功绑定通知服务,可以接收小程序的重要消息通知。]]></Content>" +
"</xml>",
fromUser, toUser, System.currentTimeMillis() / 1000
);
}
}