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