微信公众号开发-----接送事件推送之关注/取消关注

2024-01-10 22:48

本文主要是介绍微信公众号开发-----接送事件推送之关注/取消关注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要实现的功能包括

  1. 关注/取消关注事件

阅读本文之前请先认真阅读微信公众号技术文档之接受事件推送

需注意的是:验证消息的确来自微信服务器和接收事件时微信服务器都会发送请求到填写的服务器地址URL上,也就是同一个URL,区别在于请求方式不同:

  • 验证消息的确来自微信服务器(具体实现可参考微信公众号开发-----验证消息的确来自微信服务器(明文模式下),开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上

  • 接收普通事件推送和接收消息事件推送,微信服务器将POST消息的XML数据包到开发者填写的URL上

**

关注/取消关注事件

**
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。
微信服务器推送的数据如图:
在这里插入图片描述
根据消息类型MsgType为event以及事件类型Event为subscribe和unsubscribe来确定该推送消息属于关注/取消关注事件

实现步骤:

  1. 常量类
public class WechartConst {/*** 消息类型*/public class MsgType {public static final String TEXT = "text";public static final String EVENT = "event";}/*** 事件类型*/public class Event {public static final String SUBSCRIBE = "subscribe";//订阅事件public static final String UNSUBSCRIBE = "unsubscribe";//取消订阅事件}}
  1. xml工具类
/*** xml处理工具类*/
public class XmlUtil {/*** xml转map*/public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {HashMap<String, String> map = new HashMap<String,String>();SAXReader reader = new SAXReader();InputStream ins = request.getInputStream();Document doc = reader.read(ins);Element root = doc.getRootElement();@SuppressWarnings("unchecked")List<Element> list = (List<Element>)root.elements();for(Element e:list){map.put(e.getName(), e.getText());}ins.close();return map;}
}
  1. 事件推送处理
public class EntryController extends Controller {public void accept() throws IOException {String method = getRequest().getMethod();if ("GET".equals(method)) {doGet();//开发者模式验证}else {doPost();//接收消息}}/** 响应post请求,微信中消息和菜单交互都是采用post请求*/private void doPost()throws IOException {try {//把微信返回的xml信息转义成mapMap<String, String> map = XmlUtil.xmlToMap(getRequest());String fromUserName = map.get("FromUserName");//消息来源用户标识(一个OpenID)String toUserName = map.get("ToUserName");//消息目的用户标识String msgType = map.get("MsgType");//消息类型String content = map.get("Content");//消息内容if (msgType.equals(WechartConst.MsgType.EVENT)) {  //事件类型String event = map.get("Event");if (event.equals(WechartConst.Event.SUBSCRIBE)) { //处理订阅事件MessageService.subscribeForText(toUserName, fromUserName);} else if (event.equals(WechartConst.Event.UNSUBSCRIBE)) {  //处理取消订阅事件MessageService.unsubscribe(toUserName, fromUserName);}}} catch (DocumentException e) {e.printStackTrace();}renderNull();}
}
/*** 微信推送消息事件处理类*/
public class MessageService {/** 响应订阅事件*/public static void subscribeForText(String toUserName,String fromUserName){System.out.println("用户:"+ fromUserName +"关注了公众号");}/** 响应取消订阅事件*/public static void unsubscribe(String toUserName,String fromUserName){//可以进行取关后的其他后续业务处理System.out.println("用户:"+ fromUserName +"取消关注~");}}

这篇关于微信公众号开发-----接送事件推送之关注/取消关注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/592329

相关文章

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建