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,*/
}
}