了解菜单的事件机制和关注/扫描事件推送

了解菜单的事件机制和关注/扫描事件推送

一、菜单点击事件机制

在自定义菜单中,click 类型的按钮需要配置 key 字段,这个 key 就是按钮的唯一标识符。当用户点击该菜单按钮时,微信服务器会向开发者服务器推送一个 CLICK 事件,并携带对应的 key 值。

Senparc SDK 将这一事件封装在 MessageHandlerOnEvent_ClickRequest 方法中,开发者只需重写该方法即可处理不同菜单按钮的点击逻辑。

重写 OnEvent_ClickRequest 方法
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
{
    IResponseMessageBase responseMessage = null;

    switch (requestMessage.EventKey)
    {
        case "OneClick":
            {
                // 响应文本消息
                var textResponse = CreateResponseMessage<ResponseMessageText>();
                textResponse.Content = "您点击了菜单按钮,EventKey 为:OneClick";
                responseMessage = textResponse;
                break;
            }

        case "SubClickRoot_Text":
            {
                var textResponse = CreateResponseMessage<ResponseMessageText>();
                textResponse.Content = "您点击了子菜单文本按钮";
                responseMessage = textResponse;
                break;
            }

        case "SubClickRoot_News":
            {
                // 响应图文消息
                var newsResponse = CreateResponseMessage<ResponseMessageNews>();
                newsResponse.Articles.Add(new Article()
                {
                    Title = "您点击了子菜单图文按钮",
                    Description = "您点击了子菜单图文按钮,这是一条图文信息。",
                    PicUrl = "http://weixin.foxd.cn/logo.png",
                    Url = "http://<a href="http://weixin.foxdevelop.com">weixin.bamn.cn</a>"
                });
                responseMessage = newsResponse;
                break;
            }

        case "SubClickRoot_Music":
            {
                // 响应音乐消息
                var musicResponse = CreateResponseMessage<ResponseMessageMusic>();
                musicResponse.Music = new Music
                {
                    Title = "音乐标题",
                    Description = "音乐描述",
                    MusicUrl = "http://weixin.foxdevelop.com/music.mp3",
                    HQMusicUrl = "<a href="http://weixin.foxdevelop.com">http://weixin.bamn.cn</a>/music.mp3"
                };
                responseMessage = musicResponse;
                break;
            }

        default:
            {
                var defaultResponse = CreateResponseMessage<ResponseMessageText>();
                defaultResponse.Content = "未匹配到对应菜单事件,EventKey:" + requestMessage.EventKey;
                responseMessage = defaultResponse;
                break;
            }
    }

    return responseMessage;
}Code language: PHP (php)
关键点说明
  • requestMessage.EventKey:对应菜单配置中的 key 值,用于区分不同按钮。
  • CreateResponseMessage<ResponseMessageNews>():创建图文消息响应,通过 Articles.Add() 添加图文条目。
  • 每个 Article 包含:
    • Title:标题
    • Description:描述
    • PicUrl:图片链接
    • Url:点击跳转地址
  • 图文消息一次最多可添加 8 条Article
  • click 事件点击后,开发者可以返回文本、图文、音乐、图片等任意类型消息;view 事件点击后直接跳转 URL,不会触发此事件。

二、关注事件推送

当用户关注公众号时,微信服务器会推送 subscribe 事件。重写 OnEvent_SubscribeRequest 方法即可处理。

public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
{
    var responseMessage = CreateResponseMessage<ResponseMessageText>();
    responseMessage.Content = "欢迎关注北盟网校公众号!回复关键字获取更多信息。";
    return responseMessage;
}Code language: PHP (php)

提示:关注事件也可携带 EventKey(如扫描带参数二维码关注),可通过 requestMessage.EventKey 获取二维码场景值。

三、扫描事件推送

用户已关注公众号后,扫描带参数二维码会触发 SCAN 事件。重写 OnEvent_ScanRequest 方法处理。

public override IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage)
{
    var responseMessage = CreateResponseMessage<ResponseMessageText>();
    responseMessage.Content = "您扫描了二维码,场景值:" + requestMessage.EventKey;
    return responseMessage;
}Code language: PHP (php)
扫描事件与关注事件的区别
场景触发事件方法
未关注用户扫描二维码subscribe + EventKey 带 qrscene_ 前缀OnEvent_SubscribeRequest
已关注用户扫描二维码scanOnEvent_ScanRequest

四、事件类型汇总

事件类型重写方法说明
菜单点击(click)OnEvent_ClickRequest点击菜单按钮触发
菜单跳转(view)OnEvent_ViewRequest点击菜单跳转链接触发,无法回复消息
关注OnEvent_SubscribeRequest用户关注公众号
取消关注OnEvent_UnsubscribeRequest用户取消关注,无法回复消息
扫描二维码OnEvent_ScanRequest已关注用户扫描带参数二维码
上报地理位置OnEvent_LocationRequest用户同意上报位置后每次进入触发
模板消息发送完成OnEvent_TemplateSendJobFinishRequest模板消息投递结果通知

注意:view 类型菜单点击和取消关注事件虽然会推送,但开发者返回的消息客户端不会展示。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注