600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 自定义菜单 微信公众平台开发教程(2)

自定义菜单 微信公众平台开发教程(2)

时间:2019-12-13 21:58:05

相关推荐

自定义菜单 微信公众平台开发教程(2)

自定义菜单

Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的开发套件(C# SDK)。

自定义菜单开发时,需要使用到Token, 关于Token获取 微信是有限制的。 所以SDK里面对Token进行了缓存的。为了方便开发,我们可以在全局里面注册:

AccessTokenContainer.Register(“AppID”,”AppSecret”);

参数说明

参数 是否必须 说明

button 是 一级菜单数组,个数应为1~3个

sub_button 否 二级菜单数组,个数应为1~5个

type 是 菜单的响应动作类型

name 是 菜单标题,不超过16个字节,子菜单不超过40个字节

key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节

url view类型必须 网页链接,用户点击菜单可打开链接,不超过1024字节

media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id

matchrule 是 菜单匹配规则

group_id 否 用户分组id,可通过用户分组管理接口获取

sex 否 性别:男(1)女(2),不填则不做匹配

client_platform_type 否 客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配

country 否 国家信息,是用户在微信中设置的地区,具体请参考地区信息表

province 否 省份信息,是用户在微信中设置的地区,具体请参考地区信息表

city 否 城市信息,是用户在微信中设置的地区,具体请参考地区信息表

language 否 语言信息,是用户在微信中设置的语言,具体请参考语言表:

1、简体中文 “zh_CN” 2、繁体中文TW “zh_TW” 3、繁体中文HK “zh_HK” 4、英文 “en” 5、印尼 “id” 6、马来 “ms” 7、西班牙 “es” 8、韩国 “ko” 9、意大利 “it” 10、日本 “ja” 11、波兰 “pl” 12、葡萄牙 “pt” 13、俄国 “ru” 14、泰文 “th” 15、越南 “vi” 16、阿拉伯语 “ar” 17、北印度 “hi” 18、希伯来 “he” 19、土耳其 “tr” 20、德语 “de” 21、法语 “fr”

matchrule共六个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。 country、province、city组成地区信息,将按照country、province、city的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息也必填并且匹配,城市信息可以不填。 例如 “中国 广东省 广州市”、“中国 广东省”都是合法的地域信息,而“中国 广州市”则不合法,因为填写了城市信息但没有填写省份信息。 地区信息表请点击下载。

获取菜单

var result = CommonApi.GetMenu("appID");

添加菜单

public ActionResult Create(){ButtonGroup bg = new ButtonGroup();//只存在一级菜单bg.button.Add(new SingleViewButton(){name = "一个平台",url = "url"});//存在二级菜单var subButton = new SubButton(){name = "服务中心", };subButton.sub_button.Add(new SingleViewButton(){url = "url",name = "服务1"});subButton.sub_button.Add(new SingleViewButton(){url = "url",name = "服务2",});subButton.sub_button.Add(new SingleViewButton(){url = "url",name = "服务3",});bg.button.Add(subButton);//存在二级菜单var three = new SubButton(){name = "其他",};three.sub_button.Add(new SingleViewButton(){url = "url",name = "绑定会员"});//事件按扭three.sub_button.Add(new SingleClickButton(){key= "SubClickRoot_News", //触发自动回复里面的事件name = "关于平台",type= "click" //默认click事件});bg.button.Add(three);var results = CommonApi.CreateMenu("appid", bg);return View("Index");}

删除菜单

CommonApi.DeleteMenu("AppID");

个性化菜单

官方说明

开发者可以通过以下条件来设置用户看到的菜单:

1、用户分组(开发者的业务需求可以借助用户分组来完成)

2、性别

3、手机操作系统

4、地区(用户在微信客户端设置的地区)

5、语言(用户在微信客户端设置的语言)

个性化菜单接口说明:

1、个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Android 6.2.4以上。

2、菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

3、普通公众号的个性化菜单的新增接口每日限制次数为2000次,删除接口也是2000次,测试个性化菜单匹配结果接口为20000次

4、出于安全考虑,一个公众号的所有个性化菜单,最多只能设置为跳转到3个域名下的链接

5、创建个性化菜单之前必须先创建默认菜单(默认菜单是指使用普通自定义菜单创建接口创建的菜单)。如果删除默认菜单,个性化菜单也会全部删除

个性化菜单匹配规则说明:

当公众号创建多个个性化菜单时,将按照发布顺序,由新到旧逐一匹配,直到用户信息与matchrule相符合。如果全部个性化菜单都没有匹配成功,则返回默认菜单。

例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。

根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑API,开发者需要更新菜单时,需将完整配置重新发布一轮。

添加个性菜单

public JsonResult Add(){ GetMenuResultFull resultFull = new GetMenuResultFull();MenuMatchRule menuMatchRule = new MenuMatchRule(); menuMatchRule.country = "中国";menuMatchRule.province = "广州";List<MenuFull_RootButton> bg = new List<MenuFull_RootButton>();bg.Add(new MenuFull_RootButton() { name = "一级", url = "", type= "VIEW" });List<MenuFull_ConditionalButtonGroup> gexi = new List<MenuFull_ConditionalButtonGroup>();gexi.Add(new MenuFull_ConditionalButtonGroup() { button = bg, matchrule = menuMatchRule });resultFull.menu = new MenuFull_ButtonGroup() { button=bg};resultFull.conditionalmenu = gexi;var useAddCondidionalApi =true;var apiName = string.Format("使用接口:{0}。", (useAddCondidionalApi ? "个性化菜单接口" : "普通自定义菜单接口"));try{//重新整理按钮信息WxJsonResult result = null;IButtonGroupBase buttonGroup = null;if (useAddCondidionalApi){LogHelper.WriteLog(null, "进入个性化菜单2");//个性化接口 buttonGroup = Senparc.monApi.GetMenuFromJsonResult(resultFull, new ConditionalButtonGroup()).menu;var addConditionalButtonGroup = buttonGroup as ConditionalButtonGroup;addConditionalButtonGroup.matchrule = menuMatchRule; result = Senparc.monApi.CreateMenuConditional("wx64a07fabd01d0a43", addConditionalButtonGroup); apiName += string.Format("menuid:{0}。", (result as CreateMenuConditionalResult).menuid); }else{//普通接口buttonGroup = Senparc.monApi.GetMenuFromJsonResult(resultFull, new ButtonGroup()).menu;result = Senparc.monApi.CreateMenu("wx64a07fabd01d0a43", buttonGroup);}var json = new{Success = result.errmsg == "ok",Message = "菜单更新成功。" + apiName};return Json(json);}catch (Exception ex){var json = new { Success = false, Message = string.Format("更新失败:{0}。{1}", ex.Message, apiName) };return Json(json);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。