using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Text; namespace LYFZ.Weixin.SDK { [System.Runtime.Serialization.DataContract] public class MenuModel { public MenuModel() { } public MenuModel(WXMenuType _type, string _name, string _Key = "", string _Url = "", string _Media_id = "", string _appid="", string _pagepath="") { this.type = _type; this.name = _name; this.key = _Key; this.url = _Url; this.media_id = _Media_id; this._appid = _appid; this._pagepath = _pagepath; } public override string ToString() { string tempString = ""; string tempSub_button = ""; if (this.sub_buttons.Count > 0) { for (int i = 0; i < 5; i++) { if (i < this.sub_buttons.Count) { MenuModel button = this.sub_buttons[i]; tempSub_button += button.ToString() + ","; } else { break; } } tempSub_button = tempSub_button.Trim(','); tempString = "{" + "\"name\": \"" + this.name + "\"," + "\"sub_button\":[" + tempSub_button + "]" + "}"; } else { tempString = "{" + "\"type\":\"" + this.type.ToString() + "\"," + "\"name\":\"" + this.name + "\"," + GetKey_Url_Media_id() + "}"; } return tempString; } /// /// 获取Key_Url_Media_id /// /// string GetKey_Url_Media_id() { string myKey_Url_Media_id = ""; switch (this.type) { case WXMenuType.click: case WXMenuType.location_select: myKey_Url_Media_id = "\"key\": \"" + this.key + "\""; break; case WXMenuType.view: myKey_Url_Media_id = "\"url\": \"" +System.Web.HttpUtility.UrlEncode(this.url) + "\""; break; case WXMenuType.miniprogram: myKey_Url_Media_id = "\"url\": \"" + System.Web.HttpUtility.UrlEncode(this.url) + "\"" + ",\"appid\":\""+this._appid+"\"" + ",\"pagepath\":\"" + this._pagepath + "\""; break; case WXMenuType.view_limited: case WXMenuType.media_id: myKey_Url_Media_id = "\"media_id\": \"" + this.media_id + "\""; break; case WXMenuType.scancode_waitmsg: case WXMenuType.scancode_push: case WXMenuType.pic_sysphoto: case WXMenuType.pic_photo_or_album: case WXMenuType.pic_weixin: myKey_Url_Media_id = "\"key\": \"" + this.key + "\"," + "\"sub_button\": [ ]"; break; case WXMenuType.sub_button: break; default: goto case WXMenuType.click; // break; } return myKey_Url_Media_id; } public string ToXml(bool isSub_btuuon=false) { string tempString = ""; string tempSub_button = ""; if (this.sub_buttons.Count > 0) { for (int i = 0; i < 5; i++) { if (i < this.sub_buttons.Count) { MenuModel button = this.sub_buttons[i]; tempSub_button += button.ToXml(true); } else { break; } } tempString = ""; } else { tempString = "" + this.type.ToString() + "" + "" + this.name + "" + GetKey_Url_Media_id_Xml(); if (isSub_btuuon) { tempString = "" + tempString + ""; } else { tempString = ""; } } return tempString; } /// /// 获取Key_Url_Media_id /// /// string GetKey_Url_Media_id_Xml() { string myKey_Url_Media_id = ""; switch (this.type) { case WXMenuType.click: case WXMenuType.location_select: myKey_Url_Media_id = "" + this.key + ""; break; case WXMenuType.view: myKey_Url_Media_id = "" + System.Web.HttpUtility.UrlEncode(this.url) + ""; break; case WXMenuType.miniprogram: myKey_Url_Media_id = "" + System.Web.HttpUtility.UrlEncode(this.url) + "" + "" + System.Web.HttpUtility.UrlEncode(this.url) + "" + "" + System.Web.HttpUtility.UrlEncode(this.url) + ""; break; case WXMenuType.view_limited: case WXMenuType.media_id: myKey_Url_Media_id = "" + this.media_id + ""; break; case WXMenuType.scancode_waitmsg: case WXMenuType.scancode_push: case WXMenuType.pic_sysphoto: case WXMenuType.pic_photo_or_album: case WXMenuType.pic_weixin: myKey_Url_Media_id = "" + this.key + ""; break; case WXMenuType.sub_button: break; default: goto case WXMenuType.click; // break; } return myKey_Url_Media_id; } string name = ""; /// /// 必填 菜单标题,不超过16个字节,子菜单不超过40个字节 /// [DataMember(IsRequired = true)] public string Name { get { return name; } set { name = value; } } WXMenuType type = WXMenuType.click; /// /// 必填 菜单的响应动作类型 /// public WXMenuType Type { get { return type; } set { type = value; } } string key = ""; /// /// click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节 /// public string Key { get { return key; } set { key = value; } } string url = ""; /// /// view类型必须 网页链接,用户点击菜单可打开链接,不超过256字节 /// public string Url { get { return url; } set { url = value; } } string media_id = ""; /// /// media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id /// public string Media_id { get { return media_id; } set { media_id = value; } } private string _appid = ""; /// /// 小程序的appid(仅认证公众号可配置) /// public string Appid { get { return _appid; } set { _appid = value; } } string _pagepath = ""; /// /// 小程序的页面路径 /// public string Pagepath { get { return _pagepath; } set { _pagepath = value; } } List sub_buttons = new List(); /// /// 二级菜单数组,个数应为1~5个 /// public List Sub_buttons { get { return sub_buttons; } set { sub_buttons = value; } } } /// /// 自定义菜单 MenuModel 类型 /// public enum WXMenuType { /// /// 含有子菜单 /// sub_button, /// /// 点击推事件 /// 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; /// click, /// /// 跳转URL ///用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。 /// view, /// /// 扫码推事件 /// 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。 /// scancode_push, /// /// 扫码推事件且弹出“消息接收中”提示框 /// 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。 /// scancode_waitmsg, /// /// 弹出系统拍照发图 ///用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。 /// pic_sysphoto, /// /// 弹出拍照或者相册发图 ///用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。 /// pic_photo_or_album, /// /// 弹出微信相册发图器 ///用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。 /// pic_weixin, /// /// 弹出地理位置选择器 ///用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。 /// location_select, /// /// 下发消息(除文本消息) ///用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。 /// media_id, /// /// 跳转图文消息URL ///用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。 /// view_limited, /// /// 小程序 /// appid 小程序的appid(仅认证公众号可配置) pagepath 小程序的页面路径 /// miniprogram, } /// /// 自定义菜单 类型 /// public enum CustomWXMenuType { /// /// 含有子菜单 /// [Description("含有子菜单|sub_button")] Sub_button, /// /// 触发关键词 /// [Description("触发关键词|click")] Click, /// /// 跳转URL ///用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。 /// [Description("跳转URL|view")] View, /// /// 小程序 /// [Description("链接小程序|miniprogram")] miniprogram, /* /// /// 手机APP /// [Description("手机APP|view")] LYFZ_MobileAPP, /// /// 订单查询 /// [Description("订单查询|click")] LYFZ_OrderQuery, /// /// 会员查询 /// [Description("会员查询|click")] LYFZ_MemberQuery, /// /// 帐号绑定 /// [Description("帐号绑定|click")] LYFZ_AccountBonding, /// /// 帐号解除绑定 /// [Description("帐号解除绑定|click")] LYFZ_JCBDZH,*/ } }