问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

微信公众平台自定义菜单设定

发布网友 发布时间:2022-05-19 11:00

我来回答

2个回答

懂视网 时间:2022-05-19 15:21

用户自定义菜单制作时,需要用到access_token,我们直接使用前面讲解的IsExistAccess_Token()函数。我理解的微信公共平台里面菜单分为button和sub_button,即菜单和子菜单,这些菜单都有一个name的属性,类别分为click和view,click类有key属性;而view类有url属性,含有子菜单的菜单没有key属性也没有url属性。这些情况可以从下面的例子看出来。

 public void MyMenu()
 {
 string weixin1 = "";
 weixin1 = @" {
 ""button"":[
 { 
 ""type"":""click"",
 ""name"":""你好!"",
 ""key"":""Hello""
 },
 {
 ""type"":""view"",
 ""name"":""公司简介"",
 ""url"":""http://www.4ugood.net""
 },
 {
 ""name"":""产品介绍"",
 ""sub_button"":[
 {
 ""type"":""click"",
 ""name"":""产品1"",
 ""key"":""P1""
 },
 {
 ""type"":""click"",
 ""name"":""产品2"",
 ""key"":""P2""
 }]
 }]
 }
";

 string access_token = IsExistAccess_Token();
 string i = GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+access_token, weixin1);
 Response.Write(i);
 }

在你页面的 Page_Load 函数中调用这个MyMenu(),就可以显示出来了。
既然显示出来了,菜单的时间如何出发呢?我们已经了解到了如果类型为view的话,他有url属性,这个不需要处理,点击后会直接跳转到你设定的url的页面,下面我来看看如何触发click吧,按照微信的文档可以用(!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "CLICK")来判断,我把之前的代码改造一下,同时把在GetWxMessage()方法中把EventKey的值附上,wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText;  

protected void Page_Load(object sender, EventArgs e)
 {
 
 MyMenu();
 wxmessage wx = GetWxMessage();
 string res = "";

 if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "subscribe")
 {
 string content = "";
 content = "/:rose欢迎北京永杰友信科技有限公司/:rose
直接回复“你好”";
 res = sendTextMessage(wx, content);
 }
 else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "CLICK")
 {
 if(wx.EventKey=="Hello")
 res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!");
 if(wx.EventKey=="P1")
 res = sendTextMessage(wx, "你好,点击了产品1");
 if(wx.EventKey=="P2")
 res = sendTextMessage(wx, "你好,点击了产品2");
 }
 else
 {
 if (wx.MsgType == "text" && wx.Content == "你好")
 {
 res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!");
 }
 else if (wx.MsgType == "voice")
 {
 res = sendTextMessage(wx, wx.Recognition);
 }
 else
 {
 res = sendTextMessage(wx, "你好,未能识别消息!");
 }
 }

 Response.Write(res);
 }



 private wxmessage GetWxMessage()
 {
 wxmessage wx = new wxmessage();
 StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8);
 XmlDocument xml = new XmlDocument();
 xml.Load(str);
 wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText;
 wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText;
 wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText;
 if (wx.MsgType.Trim() == "text")
 {
 wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText;
 }
 if (wx.MsgType.Trim() == "event")
 {
 wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText;
 wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText;
 }
 if (wx.MsgType.Trim() == "voice")
 {
 wx.Recognition = xml.SelectSingleNode("xml").SelectSingleNode("Recognition").InnerText;
 }
 
 return wx;
 }




/// <summary> 
 /// 发送文字消息 
 /// </summary> 
 /// <param name="wx">获取的收发者信息</param> 
 /// <param name="content">内容</param> 
 /// <returns></returns> 
 private string sendTextMessage(wxmessage wx, string content)
 {
 string res = string.Format(@"<xml>
  <ToUserName><![CDATA[{0}]]></ToUserName>
  <FromUserName><![CDATA[{1}]]></FromUserName>
  <CreateTime>{2}</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[{3}]]></Content>
  </xml> ",
 wx.FromUserName, wx.ToUserName, DateTime.Now, content);
 return res;
 }

 这样就可以相应你的菜单事件了,我上面的代码写的有很多可以优化的地方,这里主要以简介为主,以后我们会逐渐搭建起一个微信公共平台的.net框架,什么菜单类,消息类等等。 

热心网友 时间:2022-05-19 12:29

你可以考虑对接第三方平台系统 来实现开发模式的功能 比如掌动无限微管家
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
幼儿园大班科学活动教学反思 《水的三态变化》大班教案 大班科学教案水的变化 奥特曼传奇英雄手机刷钻石奥奇传说刷钻石bug 奥特曼传奇英雄 奥特曼传奇英雄如何免费获得雷杰多? 失火除了跳楼没地方藏的时候,怎么办? 4k电视宽带多少 4k电视宽带多少合适 4k高清电视要多少宽带 送17个柠檬味的棒棒糖代表什么意思 耽美广播剧MP3(虐)完整下载。 电台或者广告背景音乐 寻找一个电台的公益广告的音频 跪求湖北交通广播FM92.7 王楠说书明朝那些事儿 音频下载! 求广播广告的背景音乐 旺旺老翁凉茶音乐下载 旺仔牛奶广告广播篇铃声 哪里可以下到广播广告的音频 双色球AC值指的是什么 成本理论。 1.AC曲线是由( )决定的。 A.TFC曲线的斜率。 B. 202060后事业单位改革有编工勤岗怎么安置? ac曲线是由什么决定的!(微观经济学) 事业单位的工勤会不会取消编制,取消了怎么安排这些人? 请问现在改革的全额拨款的事业单位工勤人员还有机会转成干部身份吗?国家有*吗?帮帮忙吧! 微观经济学ac什么意思 机构改革中工勤人员如何改,岗位聘用制管理后工勤人员还存在吗? 得了疣怎么办 得了跖疣了怎么办啊?医生说要挖掉??? 得了跖疣怎么办 得了足底疣怎么办 得了寻常疣怎么办啊.哪里哪个针打啊 南京过滤香烟一盒多少根 求教一个由真实照片(人像)生成素描图画的软件…… 中国工商银行预约的贺岁纪念币可以提前兑换吗? 工商银行网上银行2017年如何预约贺岁纪念币预约的最新相关信息 男性出现逆行射精的原因是什么 会引起男性逆行射精的原因是什么? 什么原因会导致男性逆行射精 交通事故,对方起诉我,我如何申请把保险公司一起告,我买的是全险 我看到保险公司违规了怎样来告他? 本人次责,主责没钱赔,我该怎么办可以起诉保险公司吗 珠穆朗玛峰在哪里个城市 珠穆朗玛峰在中国的那个省 朱穆狼马峰是在哪个省? 珠穆朗玛峰在哪个省? 珠穆朗玛峰在什么地方? 珠峰位于哪个省级行政区?对了奖励200分! 珠穆朗玛峰位于那个省?? 珠穆朗玛峰在哪个省,7k7k小游戏 电脑上横线输入内容后怎样让线条一样长? 显示器屏幕熄屏过段时间打开后会出现很多类条纹的线一直闪动是什么问题?(一直亮屏就不会出现)