微信公众号中当用户手动点击了按钮,微信公众号会被动的向用户发送文字消息或者图文消息。

通过C#微信公众号开发 -- (五)自定义菜单创建 我们知道了如何将CLICK类型的按钮添加到自己的微信公众平台上面

通过C#微信公众号开发 -- (三)用户关注之后自动回复 我们知道了通过用户触发事件来被动向用户发送消息

那么自定义菜单的CLICK事件点击触发也就是这两者的完美结合,以点击今日歌曲为例

首先我们在WXOpera() 方法下添加一个CLICK事件的判断:

 else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "CLICK")
{
string key = wx.EventKey;
switch (key)
{
case "V1001_TODAY_MUSIC":
res = TodayMusic(wx);
HttpContext.Current.Response.Write(res);
HttpContext.Current.Response.End();
break;
}
}

这里的V1001_TODAY_MUSIC 其实就是自定义菜单中CLICK按钮的key

添加TodayMusic() 方法:

/// <summary>
/// 加载今日歌曲
/// </summary>
/// <param name="wx"></param>
/// <returns></returns>
private string TodayMusic(wxmessage wx)
{
//获取推送的今日歌曲
return sendPicTextMessage(wx, "今日歌曲推荐", "今天点击率最高,播放次数最高的歌曲!",
"http://musicdata.baidu.com/data2/pic/a5c79cf978eb5302edca415cabf744f1/260983581/260983581.jpg",
"http://www.cnblogs.com/HappyAnt/"); //?openid= + wx.FromUserName }

这里要说明的是sendPicTextMessage其实是将微信提供的发送消息代码的封装,其中五个参数分别表示:wxmessage对象,图文消息的标题,图文消息的内容,图文消息的图片,点击图文消息将要跳转的页面(这里依我的主页为例)。特别需要注意的是第五个参数,如果想要在跳转到的页面上获取微信用户的openid信息,只需要在链接地址后面加上:?openid= + wx.FromUserName 就可以了。
sendPicTextMessage 封装微信提供的发送图文消息代码:

 /// <summary>
/// 发送图文消息
/// </summary>
/// <param name="_mode">微信发送用户信息包</param>
/// <param name="title">标题</param>
/// <param name="description">内容</param>
/// <param name="picurl">图片地址</param>
/// <param name="url">跳转地址</param>
/// <returns></returns>
private string sendPicTextMessage(wxmessage _mode, string title, string description, string picurl, string url)
{
string res = string.Format(Message_PicText,
_mode.FromUserName, _mode.ToUserName, DateTime.Now, title, description, picurl, url);
return res;
} /// <summary>
/// 图文消息
/// </summary>
private static string Message_PicText
{
get
{
return @"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[{3}]]></Title>
<Description><![CDATA[{4}]]></Description>
<PicUrl><![CDATA[{5}]]></PicUrl>
<Url><![CDATA[{6}]]></Url>
</item>
</Articles>
</xml>";
}
}

到这里一个简单的CLICK事件的应用就完成了,点击"今日歌曲"看看会有怎样的效果吧  ~\(≧▽≦)/~

C#微信公众号开发 -- (六)自定义菜单事件之CLICK的更多相关文章

  1. node微信公众号开发--设置自定义菜单

    var request = require("request"); const querystring = require("querystring"); re ...

  2. 微信公众号开发——创建自定义菜单(PHP版)

    <?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...

  3. .NET开发微信公众号之创建自定义菜单

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

  4. Java微信公众平台开发_04_自定义菜单

    一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 2.数据传输格式—JSON 自定义菜单中请求包的数据是Json字符串格式的,请参见:  Java_数据 ...

  5. 微信公众平台开发(99) 自定义菜单获取OpenID

    关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html 在这篇微信 ...

  6. tp6微信公众号开发者模式自定义菜单

    1,参考上篇博客,获取access_token https://www.cnblogs.com/xiaoyantongxue/p/15803334.html 2:控制器写以下代码 /* * 获取普通a ...

  7. 微信公众号开发者模式自定义菜单 node

    纯属分享 var config = require('./admin/wx/config/config'); var API = require('wechat-api'); var api = ne ...

  8. 微信公众号开发中遇到的几个bug

    一.测试自定义菜单接口时中文菜单名显示为null 设置的中文菜单名,中文未经过编码和解码过程,设置的中文菜单名在最后的微信服务器返回的json格式数据中显示为null. 解决办法:将中文先用uneco ...

  9. .NET微信公众号开发-2.0创建自定义菜单

    一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin ...

随机推荐

  1. JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

    分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用 ...

  2. date命令--修改linux系统时间

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  3. HDU 3416 Marriage Match IV dij+dinic

    题意:给你n个点,m条边的图(有向图,记住一定是有向图),给定起点和终点,问你从起点到终点有几条不同的最短路 分析:不同的最短路,即一条边也不能相同,然后刚开始我的想法是找到一条删一条,然后光荣TLE ...

  4. Codeforces 650C Table Compression (并查集)

    题意:M×N的矩阵 让你保持每行每列的大小对应关系不变,将矩阵重写,重写后的最大值最小. 思路:离散化思想+并查集,详见代码 好题! #include <iostream> #includ ...

  5. 利用JDBC连接Eclipse和mySQL5.1.26数据库

    初学JDBC,看了看书,自己动手的时候还是有很多地方有问题,最终终于解决了实现了数据库的连接.现将整个步骤描述如下: 环境:mySQL5.1.26(win 32bit), Eclipse JavaEE ...

  6. 【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递

    突然想到这个问题,然后做了下实验,下面以Integer来讲解,其他的忽略: import java.util.Iterator; /** * Created by lili on 15/9/24. * ...

  7. HUD-4602 Partition 排列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 把n等效为排成一列的n个点,然后就是取出其中连续的k个点.分两种情况,一种是不包含两端,2^( ...

  8. Grails教程之--我的理解

    最近工作中接触到了Grails,对于这门技术,网上的资料不算太多,有的基本也是大同小异.我打算边学边写一些东西,毕竟是一个学习的过程,写的东西如果有错误或者理解不正确的地方,还希望大家能指出来.帮助我 ...

  9. python 探索(四) Python CookBook 系统管理

    看CookBook就像看小说,挑感兴趣的先学习. 所以继<文本>之后,开始<系统管理>. 同样,请善用目录. 发现一个cookbook:好地址 生成随机密码 from rand ...

  10. ios 好去处

    1.王巍的博客(我们都叫它喵神,他很萌哒) 链接:http://onevcat.com/ (难度指数:※※※※※)理由:他的swift的新书讲解的非常好,但不适合入门,进阶的话这是很适合的一本书.其他 ...