feat:通知
This commit is contained in:
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user