微信微公众平台自定义菜单单在线留言怎么设置

注册会员, 积分 126, 距离下一级还需 74 积分
注册时间最后登录阅读权限20积分126精华0帖子
查看: 13940|
本帖最后由 梦幻之恋 于
20:07 编辑
我想把&点击这里&这四个字变成超链接。
19:39 上传
注册会员, 积分 126, 距离下一级还需 74 积分
注册时间最后登录阅读权限20积分126精华0帖子
在礼品登记处填写好内容提交后24小时内会有工作人员与您沟。礼品详情点击这里&& 这是我要加的超链接,求高手帮忙
注册会员, 积分 126, 距离下一级还需 74 积分
注册时间最后登录阅读权限20积分126精华0帖子
在礼品登记处填写好内容提交后24小时内会有工作人员与您沟。礼品详情点击这里&& 这是我要加的超链接,求高手帮忙
腾微软件旗下网站
旗下网站:当前位置: >
如何设置微信公众号自定义菜单
如果你是一个刚刚步入微信领域的行业小白,如果你也想在微信领域有一番大的作为,那么,首席君今天所写的这篇文章,希望能帮助,从零开始的你。
如何设置微信公众号自定义菜单,是微信领域里的一个基础,但是,万丈高楼平地起,再高大尚,再高逼格的东西,也要有扎实的基础,才能走的更远。
不惧行业小白,只是怕你没有那颗永远前行的心。
微信公众号自定义菜单的主要作用就是便于用户更加直观快捷找到自己想要的东西,引导用户点击选择;当用户接触到一个陌生的公众号时,往往会觉得无从下手,而自定义菜单就能起到一个良好的引导作用,这好比是去逛一个玲琅满目的综合市场。
市场所售商品应有尽有,但若没有一个明确的指向标,我们就会迷失方向。有了自定义菜单的引导,用户不仅能在第一时间找到他们想要观看的文章与视频,另一方面,我们也能丰富微信公众号的内涵,利用自身的力量,吸引更多粉丝。
那么接下来,首席君就以首席微课堂的微信公众号为例,跟大家聊一聊,微信公众号自定义菜单的设置教程吧!
第一步,登录自己的微信公众号平台,点击页面左侧的&添加功能插件&选项。
第二步,看到自定义菜单之后,点击进入。
第三步,进入界面之后,在页面左侧上方就能看到&自定义菜单&选项了,第一次使用需要我们开通,但我们这里当前已经为开通状态了。
第四步,点击&自定义菜单&选项之后,我们就能看到这样的界面。
第五步,在菜单名称旁的空格中,输入4个汉字或8个英文字母,随际点击&发送消息&,然后再点击&从素材中选择&这一小框。
第六步,随后便出现了一个&综合界面&,里面汇集了之前推送过的文章、视频,以及语音等,勾选一篇,你想编辑的文章,然后点击它,再按下确定,就可以了。
第七步,选中文章之后,如果想观看效果,可点击预览,在手机菜单栏中再按下&首席微课堂&,就能预览整篇文章,如果你想将所预览文章,设置在微信公众号&首席微课堂&这一菜单栏中,即可点击保存并发送。
第八步,之前我们点击的是&从素材中选择&,这一白色小框,这个小框的主要功能,就是上传我们的视频,语音,以及文章等;接下来,首席君要说的是,手机自定义菜单栏中的&微信课程&
首先,在菜单栏中填写微信课程,以它为名之后,点击跳转网页,在页面地址旁复制你想让用户观看的视频或文章的网址链接,然后再点击预览。
第九步,点击预览之后,在手机菜单栏中按下&微信课程&,就能预览到我之前复制的网址链接。
第十步,很多设置自定义菜单的工作人员,都喜欢在一个菜单栏中建立多个子菜单名称,其实,子菜单名称最多只能建立5个,如上图所示,在菜单名称这一栏中,里面的原创精品、视频教程、以及运营思维等;
都是该菜单名称的子菜单名称,只要点击任意一个子菜单名称,就能看到对应的文章或视频。当然如果你建立了5个子菜单名称之后,又想删除其中一部分,即可点击图中的删除菜单键,就能清除了。
微信公众号自定义菜单的设置教程,说到这里,大家是不是学会了呢?其实,首席君在讲解教程的过程中,自己也受益良多,毕竟技多不压身,只有学到手的东西,才是自己的宝贵财富,很高兴能与大家一起学习。
作者:首席君
互传微商学堂
首席微课堂
财神大咖会
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
Copyright &
网站备案号:
互传网络 版权所有微信公众号的自定义菜单该设置什么内容?
趁早上挤地铁的时间扒了扒微信里关注的公众号。205个!一天有205篇新文章要看,看1篇平均5分钟,17个小时才能看完。还有7小时留来睡觉。这么算,一天啥事不用干,光看文章就行了!花了点时间抽取了其中的53个经常更新的来分析下它们的自定义菜单功能都如何设置。我把它们的菜单项归纳为7种类型,如下:1、自我介绍:关于我、我们2、活动:招聘会、考察、交流、培训班3、合作:投稿、联系我们、设计咨询4、电商:商城、店铺、5、文章:精选、近期、历史、推荐、资讯6、社群:互动社区、论坛、微信群7、广告:推书籍、推作品、推公众号8、空格:菜单为空。这53个公众号,共有159个菜单项,1个没有设置置底的菜单。5个只用了2个菜单项。现在还有没设置菜单的公众号,这公号是有多懒。统计后,占比见下图:文章分类遥遥领先竟然还有浪费菜单项的,直接空的合作的需求很大活动跟电商有不少了社群还没有受到重视打广告的还算比较少下面具体看看这几种类型的作用:一、文章分类:改善阅读体验出现这种类型的原因应该是微信公众号缺少分类功能,更符合碎片化阅读的场景。读者查看时需要在历史记录里翻阅这么多文章,一篇篇往前翻,多费劲,而且还只能按时间来排序,缺少个提纲挈领的目录。所以大小公众号往往为了避免碎片化阅读的弊端,吸取结构化阅读的优点,用菜单功能做了分类文章的功能,具体用“往期文章、必读、导读、精选、好文、最新资讯”来实现索引功能。我们PK下结构化阅读与碎片化阅读。结构化阅读就像看一本书,有前言、提纲、章节。碎片化阅读其实一直都有,比如报纸,一篇篇文章直接的关联性不是很强,经典的著作《论语》也是碎片化的。2者各有利弊,结构化是系统性的、可以深入阅读,碎片化是随机的,灵活的、快速的。碎片化更符合当前时代。除了用菜单功能实现文章分类外,还有设置链接到一个轻应用的方式。可选的有白鹭引擎最近上线的一款青雀的产品,有赞也不错,罗辑思维用的就是它。还有未来微信即将上线的应用号也是值得期待的。二、合作:备选项寻求合作类,期望着粉丝主动联系。大部分是企业公众号采用的形式,这种形式适应于粉丝特别活跃,公号威信十足的情况。但是粉丝想联系自然会留言,更何况微信置底自带留言啊,完全没必要在这里浪费一栏。把合作这类型用在菜单栏里的公号还不少。建议此项功能仅作为备选项,可以不单独占据一个菜单项,还是腾出点空间放其他更有价值的功能吧!三、活动:变现方式一这边主要是线下活动、培训班类。公众号组织线下活动,让粉丝们互动,认识行业大牛,提升技能。此类活动有免费的跟收费两类,免费的公众号大概是个人兴趣,纯公益,多见于个人公众号。收费的当然是抱着盈利的目的了,垂直领域里蛮多的各类培训班、交流会议、专业考察。活动,易于打通线下线上,粉丝也较为活跃,而且还帮助公号变现了,再开开脑洞,从活动衍生出其他产品也是可能的!四、电商:变现方式二卖卖卖,以内容为主的公号似乎对这个并不感冒,比例还是比较低。这是微信公众号的标准变现方式吗?对大号来说,是的!看看罗辑思维的玩法,卖卖卖,啥都能卖,开脑洞地卖!第一栏是推荐书籍,第二栏是商城,最近在推papi酱。连介绍如何拍卖papi酱的处女广告植入都可以收个8000的门票费。玩得真high,其实我比较期待到底哪个土豪最后成功在papi酱打广告!土豪的广告效果如何?对于小号,做着玩的公号们,还是专心经营内容,适度地探索下电商模式也是可以的。五、广告:变现方式三书籍推荐、作品推荐、公众号推荐,还是举罗辑思维的例子,它是直接留了一栏专门推荐书籍,再如一些设计类公号留了一栏推荐一些设计项目,还有一些公号推广其他公众号的。对于公众号互推这种形式,跟刷淘宝信誉一样,对整个生态链不一定是个好事。当然,打广告的前提也是得有大流量啊!所以,没大流量之前,广告的变现方式适度尝试即可。六、社群:潜力股这个做的还比较少,大概是需要借助外部链接,还有论坛等来实现吧。推荐下兴趣部落。微信公众号无须额外开发,便能将相对应的兴趣部落配置到微信公众号中,并且支持微信用户登录,用户可以点击跳转到与该公众号相关联的兴趣部落,直接进行查看、回复话题等操作。兴趣部落与微信公众号打通后,微信公众号不再只如以往般向用户推送消息,还能为其粉丝提供与拥有共同兴趣的用户聚集及互动的平台社群的潜力还是很大的,拭目以待。七、自我介绍:备选项这个感觉没必要,关注微信公众号时的页面就有关于本公号的简要介绍,用户没留意到也可以去翻阅历史文章大致了解。完全没必要在菜单栏这么明显写个“关于我”,占据一个好位置。我比较欣赏高级点的做法,把本号的特色融入菜单项的名称里,让氛围说话。1、比较好的例子是:动画学术趴:理论透写、提笔创作、记忆失真。没有一个字是自我介绍的,但看菜单就能知道这号很学术。2、还有一种是个性类型的,像坑甲方设计帮:坑人、坑己、坑社会。一直在强调“坑”。当然,实在想不出招了,就老实点直白点来个“关于我”或者直接链接到官方主页。八、其他个人公众号可以用个性的方式表达。如黄的世界,“约见”功能,真叫卢梭的地产观的来聊天功能。还可以是一些指南、教程功能,个人文章目录等。个人公众号与企业公众号菜单项的区别:企业多活动、培训、卖卖卖、多图文、原创+转载、领域不限个人多研究、教程、单图文、原创、重垂直领域想开个人公众号,都可以学学:动画学术趴:理论透写、提笔创作、记忆失真。真叫卢梭的地产观:做买卖、干活了、来聊天。黄的世界:最热文章、约见老黄。InsLab:编程指南、绘画指南、资源索引。Iris喵星球:绘画类、宠物名牌。自在园:新景观、编程教程、关于我。建筑八卦女:软妹的文、同城活动、奇怪的人。坑甲方设计帮:坑人、坑己、坑社会。最后,用张图总结下我所关注的53个公号的菜单特点:附上本文研究的公众号清单:文章来源:微信号自在园
注:相关网站建设技巧阅读请移步到频道。
看过本文的人还看过
最新图文推荐
最新专栏文章
大家感兴趣的内容
&&<a rel="nofollow" class="red" href="" target="_blank" color="red新版网站排行榜
===全新上线===
网友热评的文章微信公众平台开发教程(五)自定义菜单(含实例源码) - 停留的风 - 博客园
posts - 232, comments - 1201, trackbacks - 5, articles - 27
微信公众平台开发教程(五)自定义菜单
请尊重作者版权,如需转载,请标明出处。
应大家强烈要求,将自定义菜单功能课程提前。
一、概述:
如果只有输入框,可能太简单,感觉像命令行。自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯。在一个小小的微信对话页面,可以实现更多的功能。菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可。
注意:自定义菜单,只有服务号才有此功能
如何注册,见第一章:
效果如下,
接着我们详细介绍,如何实现自定义菜单?
二、详细步骤:
1、首先获取access_token&
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在开发模式中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。
接口调用请求说明
http请求方式: GET
参数是否必须说明
grant_type
获取access_token填写client_credential
第三方用户唯一凭证
第三方用户唯一凭证密钥,既appsecret
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
access_token
获取到的凭证
expires_in
凭证有效时间,单位:秒
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):
{"errcode":40013,"errmsg":"invalid appid"}&
2、创建自定义菜单
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:
目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以&...&代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
目前自定义菜单接口可实现两种类型按钮,如下:
用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。
接口调用请求说明
http请求方式:POST(请使用https协议)&
"button":[
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
"type":"click",
"name":"歌手简介",
"key":"V1001_TODAY_SINGER"
"name":"菜单",
"sub_button":[
"type":"view",
"name":"搜索",
"type":"view",
"name":"视频",
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
参数是否必须说明
一级菜单数组,个数应为1~3个
sub_button
二级菜单数组,个数应为1~5个
菜单的响应动作类型,目前有click、view两种类型
菜单标题,不超过16个字节,子菜单不超过40个字节
click类型必须
菜单KEY值,用于消息接口推送,不超过128字节
view类型必须
网页链接,用户点击菜单可打开链接,不超过256字节
正确时的返回JSON数据包如下:
{"errcode":0,"errmsg":"ok"}
错误时的返回JSON数据包如下(示例为无效菜单名长度):
{"errcode":40018,"errmsg":"invalid button name size"}
3、查询菜单
使用接口创建自定义菜单后,开发者还可使用接口查询自定义菜单的结构。
http请求方式:GET
对应创建接口,正确的Json返回结果:
{"menu":{"button":[{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC","sub_button":[]},{"type":"click","name":"歌手简介","key":"V1001_TODAY_SINGER","sub_button":[]},{"name":"菜单","sub_button":[{"type":"view","name":"搜索","url":"","sub_button":[]},{"type":"view","name":"视频","url":"","sub_button":[]},{"type":"click","name":"赞一下我们","key":"V1001_GOOD","sub_button":[]}]}]}}
4、删除菜单
使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。
http请求方式:GET
对应创建接口,正确的Json返回结果:
{"errcode":0,"errmsg":"ok"}
5、事件处理
用户点击自定义菜单后,如果菜单按钮设置为click类型,则微信会把此次点击事件推送给开发者,注意view类型(跳转到URL)的菜单点击不会上报。
推送XML数据包示例:
&ToUserName&&![CDATA[toUser]]&&/ToUserName&
&FromUserName&&![CDATA[FromUser]]&&/FromUserName&
&CreateTime&&/CreateTime&
&MsgType&&![CDATA[event]]&&/MsgType&
&Event&&![CDATA[CLICK]]&&/Event&
&EventKey&&![CDATA[EVENTKEY]]&&/EventKey&
参数说明:
ToUserName
开发者微信号
FromUserName
发送方帐号(一个OpenID)
CreateTime
消息创建时间 (整型)
消息类型,event
事件类型,CLICK
事件KEY值,与自定义菜单接口中KEY值对应
三、实例讲解
还接着上一篇文章讲。
我们将在上一篇文章基础上,添加自定义菜单功能。
1、获取access_token
首先需要得到AppId和AppSecret
当你成为开发者后,自然能够在,开发者模式,便可看到这两个值,可以重置。
然后调用按照二.1中所示,进行操作。
注意:access_token有过期时间,如果过期,需要重新获取。
代码如下:
private static DateTime GetAccessToken_T
/// &summary&
/// 过期时间为7200秒
/// &/summary&
private static int Expires_Period = 7200;
/// &summary&
/// &/summary&
private static string mAccessT
/// &summary&
/// &/summary&
public static string AccessToken
//如果为空,或者过期,需要重新获取
if (string.IsNullOrEmpty(mAccessToken) || HasExpired())
mAccessToken = GetAccessToken(AppID, AppSecret);
return mAccessT
/// &summary&
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="appSecret"&&/param&
/// &returns&&/returns&
private static string GetAccessToken(string appId, string appSecret)
string url = string.Format("https://api./cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret);
string result = HttpUtility.GetData(url);
XDocument doc = XmlUtility.ParseJson(result, "root");
XElement root = doc.R
if (root != null)
XElement access_token = root.Element("access_token");
if (access_token != null)
GetAccessToken_Time = DateTime.N
if (root.Element("expires_in")!=null)
Expires_Period = int.Parse(root.Element("expires_in").Value);
return access_token.V
GetAccessToken_Time = DateTime.MinV
return null;
/// &summary&
/// 判断Access_token是否过期
/// &/summary&
/// &returns&bool&/returns&
private static bool HasExpired()
if (GetAccessToken_Time != null)
//过期时间,允许有一定的误差,一分钟。获取时间消耗
if (DateTime.Now & GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-60))
return true;
return false;
2、设置菜单
菜单需根据需要,按照实际要求进行设定。
这里我们提供天气查询功能,将常用的城市列出来,点击即可查询。
然后还提供了友情链接,这里提供了view类型的菜单,直接可以跳转至URL页面,为跳转做个好的演示。
具体菜单如下:
"button": [
"name": "链接",
"sub_button": [
"type": "view",
"name": "搜索",
"url": "/"
"type": "view",
"name": "视频",
"url": "/"
"type": "click",
"name": "赞一下我们",
"key": "BTN_GOOD"
"name": "查询天气",
"sub_button": [
"type": "click",
"name": "武汉",
"key": "BTN_TQ_WUHAN"
"type": "click",
"name": "上海",
"key": "BTN_TQ_SHANGHAI"
"type": "click",
"name": "北京",
"key": "BTN_TQ_BEIJING"
"type": "click",
"name": "帮助",
"key": "BTN_HELP"
3、管理菜单
因为菜单的变更没有那么频繁,因此通过txt文件来设置菜单,并通过管理界面来管理菜单。
主要的管理功能:
1)从文件加载菜单
2)创建菜单。即将菜单通知微信服务端,并更新至微信客户端
3)查询菜单。获取当前系统的菜单。
4)删除菜单。从微信服务器删除菜单,也可以删除后再创建。&
实现代码如下:
public class MenuManager
/// &summary&
/// 菜单文件路径
/// &/summary&
private static readonly string Menu_Data_Path = System.AppDomain.CurrentDomain.BaseDirectory + "/Data/menu.txt";
/// &summary&
/// 获取菜单
/// &/summary&
public static string GetMenu()
string url = string.Format("https://api./cgi-bin/menu/get?access_token={0}", Context.AccessToken);
return HttpUtility.GetData(url);
/// &summary&
/// 创建菜单
/// &/summary&
public static void CreateMenu(string menu)
string url = string.Format("https://api./cgi-bin/menu/create?access_token={0}", Context.AccessToken);
//string menu = FileUtility.Read(Menu_Data_Path);
HttpUtility.SendHttpRequest(url, menu);
/// &summary&
/// 删除菜单
/// &/summary&
public static void DeleteMenu()
string url = string.Format("https://api./cgi-bin/menu/delete?access_token={0}", Context.AccessToken);
HttpUtility.GetData(url);
/// &summary&
/// 加载菜单
/// &/summary&
/// &returns&&/returns&
public static string LoadMenu()
return FileUtility.Read(Menu_Data_Path);
4、基本方法
上面的代码,其实我们对一些公共功能做了封装。如进行get请求、POST提交等操作,读取文件等。
这里我们提供进行get、Post提交的方法案例代码,如果使用,建议优化。
using System.IO;
using System.N
using System.T
using System.W
namespace Yank.WeiXin.Robot.Utility
/// &summary&
/// Http帮助类
/// &/summary&
class HttpUtility
/// &summary&
/// 发送请求
/// &/summary&
/// &param name="url"&Url地址&/param&
/// &param name="data"&数据&/param&
public static string SendHttpRequest(string url, string data)
return SendPostHttpRequest(url,"application/x-www-form-urlencoded",data);
/// &summary&
/// &/summary&
/// &param name="url"&&/param&
/// &returns&&/returns&
public static string GetData(string url)
return SendGetHttpRequest(url,"application/x-www-form-urlencoded");
/// &summary&
/// 发送请求
/// &/summary&
/// &param name="url"&Url地址&/param&
/// &param name="method"&方法(post或get)&/param&
/// &param name="method"&数据类型&/param&
/// &param name="requestData"&数据&/param&
public static string SendPostHttpRequest(string url,string contentType,string requestData)
WebRequest request = (WebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
byte[] postBytes = null;
request.ContentType = contentT
postBytes = Encoding.UTF8.GetBytes(requestData);
request.ContentLength = postBytes.L
using (Stream outstream = request.GetRequestStream())
outstream.Write(postBytes, 0, postBytes.Length);
string result = string.E
using (WebResponse response = request.GetResponse())
if (response != null)
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
result = reader.ReadToEnd();
/// &summary&
/// 发送请求
/// &/summary&
/// &param name="url"&Url地址&/param&
/// &param name="method"&方法(post或get)&/param&
/// &param name="method"&数据类型&/param&
/// &param name="requestData"&数据&/param&
public static string SendGetHttpRequest(string url, string contentType)
WebRequest request = (WebRequest)HttpWebRequest.Create(url);
request.Method = "GET";
request.ContentType = contentT
string result = string.E
using (WebResponse response = request.GetResponse())
if (response != null)
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
result = reader.ReadToEnd();
using System.Xml.L
using Newtonsoft.J
namespace Yank.WeiXin.Robot.Utility
class XmlUtility
/// &summary&
/// &/summary&
/// &param name="json"&&/param&
/// &param name="rootName"&&/param&
/// &returns&&/returns&
public static XDocument ParseJson(string json,string rootName)
return JsonConvert.DeserializeXNode(json, rootName);
5、事件处理
设置了菜单,这下需要处理事件了。跟我们之前设计ASPX或者WinForm一样,都要绑定按钮的事件。这里只是通过XML消息将请求传递过来。
通过&2、设置菜单"中具体的菜单内容,我们便已经知道需要进行哪些事件处理了。对于按钮类型为view的,无须处理,它会自动跳转至指定url.
需要处理的点击事件:
2)查询某城市的天气,北京、上海、武汉
这个还要沿用上章中的事件处理器EventHandler来扩展处理。
具体的实现代码吧:
using System.Collections.G
using System.L
using System.T
using Yank.WeiXin.Robot.M
namespace Yank.WeiXin.Robot.Handlers
class EventHandler : IHandler
/// &summary&
/// 请求的xml
/// &/summary&
private string RequestXml { get; set; }
/// &summary&
/// 构造函数
/// &/summary&
/// &param name="requestXml"&&/param&
public EventHandler(string requestXml)
this.RequestXml = requestX
/// &summary&
/// 处理请求
/// &/summary&
/// &returns&&/returns&
public string HandleRequest()
string response = string.E
EventMessage em = EventMessage.LoadFromXml(RequestXml);
if (em != null)
switch (em.Event.ToLower())
case ("subscribe"):
response = SubscribeEventHandler(em);
case "click":
response = ClickEventHandler(em);
/// &summary&
/// &/summary&
/// &param name="em"&&/param&
/// &returns&&/returns&
private string SubscribeEventHandler(EventMessage em)
//回复欢迎消息
TextMessage tm = new TextMessage();
tm.ToUserName = em.FromUserN
tm.FromUserName = em.ToUserN
tm.CreateTime = Common.GetNowTime();
tm.Content = "欢迎您关注***,我是大哥大,有事就问我,呵呵!\n\n";
return tm.GenerateContent();
/// &summary&
/// 处理点击事件
/// &/summary&
/// &param name="em"&&/param&
/// &returns&&/returns&
private string ClickEventHandler(EventMessage em)
string result = string.E
if (em != null && em.EventKey != null)
switch (em.EventKey.ToUpper())
case "BTN_GOOD":
result = btnGoodClick(em);
case "BTN_TQ_BEIJING":
result = searchWeather("beijing", em);
case "BTN_TQ_SHANGHAI":
result = searchWeather("shanghai", em);
case "BTN_TQ_WUHAN":
result = searchWeather("wuhai", em);
case "BTN_HELP":
result = btnHelpClick(em);
/// &summary&
/// 赞一下
/// &/summary&
/// &param name="em"&&/param&
/// &returns&&/returns&
private string btnGoodClick(EventMessage em)
//回复欢迎消息
TextMessage tm = new TextMessage();
tm.ToUserName = em.FromUserN
tm.FromUserName = em.ToUserN
tm.CreateTime = Common.GetNowTime();
tm.Content = @"谢谢您的支持!";
return tm.GenerateContent();
/// &summary&
/// &/summary&
/// &param name="em"&&/param&
/// &returns&&/returns&
private string btnHelpClick(EventMessage em)
//回复欢迎消息
TextMessage tm = new TextMessage();
tm.ToUserName = em.FromUserN
tm.FromUserName = em.ToUserN
tm.CreateTime = Common.GetNowTime();
tm.Content = @"查询天气,输入tq 城市名称\拼音\首字母";
return tm.GenerateContent();
/// &summary&
/// 查询天气
/// &/summary&
/// &param name="cityName"&&/param&
/// &param name="em"&&/param&
/// &returns&&/returns&
private string searchWeather(string cityName, EventMessage em)
TextMessage tm = new TextMessage();
tm.Content = WeatherHelper.GetWeather(cityName);
//进行发送者、接收者转换
tm.ToUserName = em.FromUserN
tm.FromUserName = em.ToUserN
tm.CreateTime = Common.GetNowTime();
return tm.GenerateContent();
终于大工告成,最后来看下效果图吧
请尊重作者版权,如需转载,请标明出处。
&下一章计划:
微信公众平台开发教程(六)获取个性二维码}

我要回帖

更多关于 微信公众平台留言板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信