SpringCloud Alibaba 开发微信公众号 (事件处理)

简介: SpringCloud Alibaba 开发微信公众号 (事件处理)

上篇讲了使用策略模式处理复杂的消息,除了消息类型在微信用户和公众号产生交互的过程中,用户的一些操作(如:点击、关注/取消关注、扫描带参数二维码、上报地理位置等)微信服务器回通过事件的形式进行通知到我们的开发服务器,而开发者可以在某些事件推送后进行相应的处理回复。本篇就讲事件如何处理。

根据各种事件类型,创建EventType枚举类,定义各种事件类型的枚举值,

/**
 * 事件类型枚举
 */
public enum EventType {
    /**
     * 关注
     */
    SUBSCRIBE,
    /**
     * 取消关注
     */
    UNSUBSCRIBE,
    /**
     * 用户已关注时的事件推送
     */
    SCAN,
    /**
     * 上报地理位置事件
     */
    LOCATION,
    /**
     * 自定义菜单事件(点击菜单拉取消息时的事件推送)
     */
    CLICK,
    /**
     * 点击菜单跳转链接时的事件推送
     */
    VIEW,
    /**
     * 推送模版消息
     */
    TEMPLATESENDJOBFINISH;
    /**
     * 根据名称获取事件类型枚举对象
     *
     * @param eventType 事件名称
     * @return
     */
    public static EventType eventType(String eventType) {
        for (EventType type : EventType.values()) {
            if (type.name().toLowerCase().equals(eventType.toLowerCase())) {
                return type;
            }
        }
        return CLICK;
    }
}
复制代码

创建事件接口Event,增加获取事件源、获取事件处理的数据、执行回调方法

import java.util.Map;
/**
 * 事件接口
 */
public interface Event {
    /**
     * 获取事件源
     *
     * @return
     */
    Object getSource();
    /**
     * 获取事件处理的数据
     *
     * @return
     */
    Map<String, Object> getMessage();
    /**
     * 执行回调
     *
     * @param message 回调消息
     * @return
     */
    String callback(String message);
}
复制代码

创建事件源接口EventSource

/**
 * 事件源接口
 */
public interface EventSource {
    /**
     * 增加事件监听器
     *
     * @param eventListener 事件监听
     */
    void addListener(EventListener eventListener);
    /**
     * 通知事件监听器
     */
    void notifyListener();
}
复制代码

创建事件监听接口EventListener

import com.ctsi.sddx.constants.EventType;
/**
 * 事件监听接口
 */
public interface EventListener {
    /**
     * 事件处理方法
     *
     * @param event 事件
     * @return
     */
    String handleEvent(Event event);
    /**
     * 获取事件类型
     *
     * @return
     */
    EventType getEvent();
}
复制代码

以关注事件为例子,创建关注事件处理类,当event是subscribe关注时文字回复“欢迎关注XXX公众号!!!”

import com.ctsi.sddx.bean.message.TextMessage;
import com.ctsi.sddx.constants.EventType;
import com.ctsi.sddx.event.Event;
import com.ctsi.sddx.event.EventListener;
import java.util.Map;
/**
 * @Author : lizzu
 * @create 2022/10/3 20:01
 * 关注事件处理类
 */
public class SubscribeListener implements EventListener {
    @Override
    public String handleEvent(Event event) {
        Map<String, Object> message = event.getMessage();
        String eventType = message.get("Event").toString();
        if (EventType.eventType(eventType) == EventType.SUBSCRIBE) {
            return TextMessage.ofSendMsg(message, "欢迎关注XXX公众号!!!").toXml();
        }
        return "success";
    }
    @Override
    public EventType getEvent() {
        return EventType.SUBSCRIBE;
    }
}
复制代码

事件源处理类

/**
 * 事件源接口
 */
public interface EventSource {
    /**
     * 增加事件监听器
     *
     * @param eventListener 事件监听
     */
    void addListener(EventListener eventListener);
    /**
     * 通知事件监听器
     */
    void notifyListener();
}
复制代码

事件消息处理service类EventMessageService 实现IMessage接口。

import cn.org.spring.wechar.event.MessageSource;
import cn.org.spring.wechar.event.listener.ClickListener;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
 * 事件消息处理service类
 */
@Service
public class EventMessageService implements IMessage {
    @Override
    public String handler(Map<String, Object> param) {
        MessageSource source = new MessageSource();
        //其他事件进行add处理即可
        source.addListener(new ClickListener());
        source.addListener(new SubscribeListener());        
        return source.setParam(param);
    }
}
复制代码

增加事件处理配置

import com.ctsi.sddx.constants.MessageType;
import com.ctsi.sddx.context.ContextMessageFactory;
import com.ctsi.sddx.service.message.EventMessageService;
import com.ctsi.sddx.service.message.ImageMessageService;
import com.ctsi.sddx.service.message.TextMessageService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Author : lizzu
 * @create 2022/10/3 13:50
 * 消息配置类
 */
@Configuration
public class MessageConfig {
    private ApplicationContext applicationContext;
    public MessageConfig(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
    @Bean
    public ContextMessageFactory getContextMessageFactory() {
        ContextMessageFactory contextMessageFactory = new ContextMessageFactory();
        contextMessageFactory.builder(MessageType.IMAGE, applicationContext.getBean(ImageMessageService.class))
                .builder(MessageType.TEXT, applicationContext.getBean(TextMessageService.class))
                .builder(MessageType.EVENT, applicationContext.getBean(EventMessageService.class));//增加事件处理
        return contextMessageFactory;
    }
}
复制代码

测试:

网络异常,图片无法展示
|

到此事件处理基本操作已经讲完,后面可以根据需要增加对应的事件监听操作即可。

下一篇:

模板消息管理


相关文章
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
114 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
5月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1200 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
|
4月前
|
监控 数据可视化 数据处理
微信养号脚本,全自动插件,AUTOJS开发版
这是一套自动化微信养号工具,包含主脚本`wechat_auto.js`与配置文件`config.json`。主脚本实现自动浏览朋友圈、随机阅读订阅号文章及搜索指定公众号三大功能,支持自定义滚动次数、阅读时长等参数。代码通过随机化操作间隔模拟真实用户行为,具备完善的错误处理和日志记录功能。配套UI模块提供可视化操作界面,可实时监控任务状态与运行日志,便于调整参数设置。控制器部分扩展了批量数据处理能力,如学生信息的增删改查操作,适用于多场景应用。下载地址:https://www.pan38.com/share.php?code=n6cPZ 提取码:8888(仅供学习参考)。
|
7月前
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
2093 11
技术小白如何利用DeepSeek半小时开发微信小程序?
|
6月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
6月前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
7月前
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
2537 11
|
7月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
8月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。

热门文章

最新文章