/// <summary>
        /// 发送文本信息
        /// </summary>
        /// <param name="msgType"></param>
        /// <param name="content"></param>
        /// <param name="mediaID"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static dynamic BuildMsg(PubMsgType msgType, string content, string mediaID, string title, string description, dynamic data)
        {
            switch (msgType)
            {
            case PubMsgType.image:
                data.msgtype = "image";
                data.image   = new { media_id = mediaID }; break;

            case PubMsgType.mpnews:
                data.msgtype = "mpnews";
                data.mpnews  = new { media_id = mediaID }; break;

            case PubMsgType.text:
                data.msgtype = "text";
                data.text    = new { content = content }; break;

            case PubMsgType.video:
                data.msgtype = "video";
                data.video   = new { media_id = mediaID, title = title, description = description }; break;

            case PubMsgType.voice:
                data.msgtype = "voice";
                data.voice   = new { media_id = mediaID }; break;

            case PubMsgType.wxcard:
                data.msgtype = "wxcard";
                data.wxcard  = new { media_id = mediaID }; break;

            default:
                break;
            }
            return(data);
        }
        /// <summary>
        /// 群发消息
        /// </summary>
        /// <param name="openIDs"></param>
        /// <param name="msgType"></param>
        /// <param name="content"></param>
        /// <param name="mediaID"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        public static PubMsgResult SendMsg(List <string> openIDs, PubMsgType msgType, string content, string mediaID, string title, string description)
        {
            var     url  = string.Format(USER_SEND_NEWS_URL, PubInterface.AccessToken);
            dynamic data = new ExpandoObject();

            data.filter = new { touser = openIDs };
            BuildMsg(msgType, content, mediaID, title, description, data);
            return(WebApiHelper.PostAsync <PubMsgResult>(url, data));
        }
        /// <summary>
        /// 群发消息
        /// </summary>
        /// <param name="groupID">isToAll为true时间groupID无效,isToAll默认为false</param>
        /// <param name="msgType"></param>
        /// <param name="content"></param>
        /// <param name="mediaID"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <param name="isToAll">isToAll为true时间groupID无效,isToAll默认为false</param>
        /// <returns></returns>
        public static PubMsgResult SendMsg(int groupID, PubMsgType msgType, string content, string mediaID, string title, string description, bool isToAll = false)
        {
            var     url  = string.Format(GROUP_SEND_NEWS_URL, PubInterface.AccessToken);
            dynamic data = new ExpandoObject();

            data.filter = new { is_to_all = isToAll, group_id = groupID };
            BuildMsg(msgType, content, mediaID, title, description, data);
            return(WebApiHelper.PostAsync <PubMsgResult>(url, data));
        }
        /// <summary>
        /// 预览消息 每天限100次
        /// </summary>
        /// <param name="openID"></param>
        /// <param name="msgType"></param>
        /// <param name="content"></param>
        /// <param name="mediaID"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        public static PubMsgResult PreViewMsg(string openID, PubMsgType msgType, string content, string mediaID, string title, string description)
        {
            dynamic data = new ExpandoObject();

            data.touser = openID;
            BuildMsg(msgType, content, mediaID, title, description, data);
            var url = string.Format(PREVIEW_NEWS_URL, PubInterface.AccessToken);

            return(WebApiHelper.PostAsync(url, data));
        }
        /// <summary>
        /// 如果需要以某个客服帐号来发消息(在微信6.0.2及以上版本中显示自定义头像),则需在JSON数据包的后半部分加入customservice参数.
        /// 即kf_account不为空时,添加customservice
        /// </summary>
        /// <param name="data"></param>
        /// <param name="type"></param>
        /// <param name="openID"></param>
        /// <param name="kf_account"></param>
        /// <returns></returns>
        public static PubApiResult SendMsg(dynamic data, PubMsgType type, string openID, string kf_account = null)
        {
            data.touser  = openID;
            data.msgtype = type.ToString();
            if (!string.IsNullOrEmpty(kf_account))
            {
                data.customservice = new { kf_account = kf_account };
            }

            return(SendMsg(data));
        }