Esempio n. 1
0
 /// <summary>
 /// 接收微信支付成功通知
 /// </summary>
 /// <param name="xmlContent">微信通知内容</param>
 /// <returns>通知处理结果</returns>
 public string WechatOrderPayNotify(string xmlContent)
 {
     string return_code = "", return_msg = "";
     try
     {
         WeChatApi weChatApi = new WeChatApi();
         WechatPayNotifyResponse response = weChatApi.PayNotify(xmlContent);
         if (response.IsSuccess)
         {
             return_code = "SUCCESS";
             return_msg = "OK";
         }
         else
         {
             return_code = "FAIL";
             return_msg = "FAIL";
         }
     }
     catch (Exception)
     {
         return_code = "FAIL";
         return_msg = "FAIL";
     }
     //返回通知处理结果
     return string.Format("<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg);
 }
Esempio n. 2
0
        /// <summary>
        /// 调用微信统一下单
        /// </summary>
        /// <param name="orderId">订单Id</param>
        /// <param name="studentId">学生Id</param>
        /// <param name="voucherIds">本次支付使用的优惠券Id列表</param>
        /// <param name="ip">用户IP</param>
        /// <param name="image">支付二维码图片</param>
        /// <param name="isFreeOrder">是否免费订单,如为0元购返回true</param>
        /// <returns>统一下单处理结果。</returns>
        public bool WechatOrderPay(int orderId, int studentId, int[] voucherIds, string ip, ref byte[] image, ref bool isFreeOrder)
        {
            decimal amount = 0;
            string orderNo = "";
            int batchId = Service.PreOrderPay(orderId, studentId, voucherIds, CashPayTypeEnum.微信);
            Service.OrderPay(orderId, studentId, voucherIds, CashPayTypeEnum.微信, batchId, out amount, out orderNo);

            if (batchId >= 1)//如果之前已经发起过微信支付,需要关闭之前的微信支付订单。如果关闭之前订单失败,本次支付仍然继续执行。
            {
                try
                {
                    WeChatApi weChatApi = new WeChatApi();
                    weChatApi.CloseOrder(orderId, GetOutTradeNo(orderNo, batchId));
                }
                catch (Exception ex)
                {
                    LogHelper.ErrorLog("", ex);
                }
            }

            if (amount > 0 && !string.IsNullOrEmpty(orderNo))
            {
                WechatPreOrderResponse response = new WeChatApi().CreatePreOrder(orderId, "大语文订单", GetOutTradeNo(orderNo, batchId + 1), amount, ip);
                image = QRCodeUtil.MakeImage(response.CodeUrl);
                return true;
            }
            else if (amount == 0 && !string.IsNullOrEmpty(orderNo))//如果本次不需要微信支付(课程价格是0或者使用的现金券金额>=课程金额)
            {
                Service.OrderPayOver(orderNo);
                isFreeOrder = true;
                return false;
            }

            return false;
        }
Esempio n. 3
0
        /// <summary>
        /// 获取所有关注用户(返回OpenId集合)
        /// </summary>
        /// <returns></returns>
        public FocusUserListModel GetFocusUserList()
        {
            var resp    = WeChatApi.GetFocusUserList();
            var openIds = JsonConvert.DeserializeObject <FocusUserListModel>(resp);

            return(openIds);
        }
Esempio n. 4
0
        /// <summary>
        /// 获取关注用户信息
        /// </summary>
        /// <param name="userList">OpenId列表</param>
        /// <returns></returns>
        public FocusUsersModel GetFocusUsers(string userList)
        {
            var resp2      = WeChatApi.BatchGetFocusUser(JsonConvert.SerializeObject(userList));
            var focusUsers = JsonConvert.DeserializeObject <FocusUsersModel>(resp2);

            return(focusUsers);
        }
Esempio n. 5
0
        /// <summary>
        /// 获取图文素材
        /// </summary>
        /// <param name="pageIndex">从全部素材的该偏移位置开始返回,0表示从第一个素材 返回</param>
        /// <param name="pageSize">返回素材的数量,取值在1到20之间</param>
        /// <returns></returns>
        public WeChatNewsResponse GetDataList(int pageIndex, int pageSize)
        {
            var result       = WeChatApi.BatchGetMaterial("news", pageIndex, pageSize);
            var materialList = JsonConvert.DeserializeObject <WeChatNewsResponse>(result);

            return(materialList);
        }
Esempio n. 6
0
        /// <summary>
        /// 添加图文素材
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="thumb_media_id">图文消息的封面图片素材id(必须是永久mediaID)</param>
        /// <param name="author">作者</param>
        /// <param name="digest">图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。</param>
        /// <param name="show_cover_pic">是否显示封面,0为false,即不显示,1为true,即显示</param>
        /// <param name="content">图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。</param>
        /// <param name="content_source_url">图文消息的原文地址,即点击“阅读原文”后的URL</param>
        /// <param name="need_open_comment">Uint32 是否打开评论,0不打开,1打开</param>
        /// <param name="only_fans_can_comment">Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论</param>
        public string CreateData(string title, string thumb_media_id, string author, string digest, bool show_cover_pic, string content, string content_source_url, bool need_open_comment, bool only_fans_can_comment)
        {
            var postData = new
            {
                articles = new List <object>()
                {
                    new
                    {
                        title,
                        thumb_media_id,
                        author,
                        digest,
                        show_cover_pic = show_cover_pic ? 1 : 0,
                        content        = new WeChatNewsMaterialService(Broker).ConvertLocalUrlToWeChatUrl(content),
                        content_source_url,
                        need_open_comment     = need_open_comment ? 1 : 0,
                        only_fans_can_comment = only_fans_can_comment ? 1: 0
                    }
                }
            };
            var result = WeChatApi.AddNews(JsonConvert.SerializeObject(postData));
            var data   = new wechat_news()
            {
                wechat_newsId  = result.media_id,
                media_id       = result.media_id,
                author         = author,
                html_content   = content,
                name           = title,
                digest         = digest,
                thumb_media_id = thumb_media_id
            };

            return(CreateData(data));
        }
Esempio n. 7
0
 public UploadForeverMediaResult UploadMedia(Wx_App app, string mediaUrl)
 {
     if (!mediaUrl.HasValue())
     {
         throw new AceException("上传的素材不存在!");
     }
     return(WeChatApi.UploadForeverMedia(app.AppId, mediaUrl));
 }
Esempio n. 8
0
 /// <summary>
 /// 删除图文素材
 /// </summary>
 /// <param name="ids"></param>
 public override void DeleteData(List <string> ids)
 {
     foreach (var item in ids)
     {
         var data = Broker.Retrieve <wechat_news>(item);
         WeChatApi.DeleteMaterial(data.media_id);
     }
     base.DeleteData(ids);
 }
Esempio n. 9
0
        public HttpResponseMessage Post()
        {
            try
            {
                Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
                byte[] requestByte = new byte[requestStream.Length];
                requestStream.Read(requestByte, 0, (int)requestStream.Length);

                string reqXml = Encoding.UTF8.GetString(requestByte);

                if (string.IsNullOrEmpty(reqXml))
                    return ResponseMessage("success");
                var wxXmlSerialize = new WxXmlSerialize(reqXml);
                WxXmlModel WxXmlModel = wxXmlSerialize.GetBaseModel();
                switch (WxXmlModel.MsgType)
                {
                    case "text"://文本
                        WxXmlModel.Content = wxXmlSerialize.GetValue("Content");
                        var xml = WxResponseMessage.GetText(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.Content);
                        return ResponseMessage(xml);
                    case "event"://事件
                        BaseEventEntity entity = new BaseEventEntity();
                        entity.FromUserName = WxXmlModel.FromUserName;
                        entity.ToUserName = WxXmlModel.ToUserName;
                        entity.CreateTime = long.Parse(WxXmlModel.CreateTime);
                        entity.MsgType = WxXmlModel.MsgType;

                        entity.Event = wxXmlSerialize.GetValue("Event");
                        entity.EventKey = wxXmlSerialize.GetValue("EventKey");
                        entity.Ticket = wxXmlSerialize.GetValue("Ticket");
                        //关注公众号
                        if (entity.Event == "subscribe")
                        {
                            WeChatUser chatUser = new WeChatUser();
                            chatUser.ToUserName = entity.ToUserName;
                            chatUser.OpenID = entity.FromUserName;
                            WeChatApi.AddWeiXinUser(chatUser);
                        }
                        //取消关注
                        else if (entity.Event == "unsubscribe")
                        {
                            WeChatApi.DeleteWeiXinUser(entity.FromUserName);
                        }
                        return ResponseMessage("success");
                    default:
                        return ResponseMessage("success");
                }
            }
            catch (Exception ex)
            {
                return ResponseMessage("success");
                throw;
            }
            //回复消息的时候也需要验证消息,这个很多开发者没有注意这个,存在安全隐患
            //微信中 谁都可以获取信息 所以 关系不大 对于普通用户 但是对于某些涉及到验证信息的开发非常有必要
            //接收消息
        }
Esempio n. 10
0
        private string GetWxHtml(Wx_App app, Wx_News news)
        {
            var html   = new HtmlDocument();
            var sysCfg = configService.GetConfig(app.Id);

            var content = news.Content.Replace(vars);
            var header  = sysCfg["header_html"];
            var footer  = sysCfg["footer_html"];
            var cover   = "<p><img src=\"" + news.ThumbWxUrl + "\" /></p>";

            html.LoadHtml("<div>" + header + cover + content + footer + "</div>");

            var nodes = html.DocumentNode.SelectNodes("./div/p | ./div/div");

            if (nodes != null)
            {
                foreach (HtmlNode item in nodes)
                {
                    item.InnerHtml = item.InnerHtml.Trim();
                    SetStyle(item, "padding:0.25em 0");

                    var subImgs = item.SelectNodes(".//img");
                    if (subImgs == null || subImgs.Count <= 0)
                    {
                        var attr = item.Attributes["style"];
                        if (attr == null || attr.Value.IndexOf("text-align:center") < 0)
                        {
                            SetStyle(item, "text-indent:2em");
                        }
                    }
                    if (!item.HasChildNodes)
                    {
                        item.Remove();
                    }
                }
            }

            var imgs = html.DocumentNode.SelectNodes("//img");

            if (imgs != null)
            {
                foreach (HtmlNode img in imgs)
                {
                    var src    = img.Attributes["src"].Value;
                    var result = WeChatApi.UploadImg(app.AppId, src);
                    if (result != null)
                    {
                        img.Attributes["src"].Value = result.url;
                    }
                    img.Attributes.Remove("width");
                    img.Attributes.Remove("height");

                    SetStyle(img, "width:100%!important;height:auto!important");
                }
            }
            return(html.DocumentNode.InnerHtml);
        }
Esempio n. 11
0
        /// <summary>
        /// 获取素材
        /// </summary>
        /// <param name="type">素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)</param>
        /// <param name="pageIndex">从全部素材的该偏移位置开始返回,0表示从第一个素材 返回</param>
        /// <param name="pageSize">返回素材的数量,取值在1到20之间</param>
        /// <returns></returns>
        public WeChatOtherMaterial GetMaterial(string type, int pageIndex, int pageSize)
        {
            var result       = WeChatApi.BatchGetMaterial(type, pageIndex, pageSize);
            var materialList = JsonConvert.DeserializeObject <WeChatOtherMaterial>(result);

            if (materialList == null || materialList.item == null || materialList.item.Count <= 0)
            {
                return(materialList);
            }

            materialList.item.Each(item =>
            {
                item.UpdateTime = item.update_time.ToDateTimeString();
            });
            return(materialList);
        }
Esempio n. 12
0
 private bool CheckWechatValidity(WeChatApi api)
 {
     if (!Application.isMobilePlatform)
     {
         YxMessageBox.Show("非移动设备暂时不支持分享!");
         return(false);
     }
     if (!api.IsInstalledWechat())
     {
         YxMessageBox.Show("您的设备没有安装微信,请安装后再分享!");
         return(false);
     }
     if (!api.IsCheckWechatApiLevel())
     {
         YxMessageBox.Show("您的设备上的微信版本不符合微信最低版本,\n请更新微信后再分享!");
         return(false);
     }
     return(true);
 }
Esempio n. 13
0
        /// <summary>
        /// 上传素材(已上传则直接返回)
        /// </summary>
        /// <param name="type"></param>
        /// <param name="fileId"></param>
        /// <returns></returns>
        public WeChatSuccessUploadResponse CreateData(MaterialType type, string fileId)
        {
            var file = new SysFileService().GetData(fileId);

            AssertUtil.CheckBoolean <SpException>(file == null, $"根据fileid:{fileId}未找到记录", "36B5F5C9-ED65-4CAC-BE60-712278056EA9");

            // 检查素材库是否已经上传
            var data = Broker.Retrieve <wechat_material>("select * from wechat_material where sys_fileid = @sys_fileid", new Dictionary <string, object>()
            {
                { "@sys_fileid", file.sys_fileId }
            });

            if (data != null)
            {
                return(new WeChatSuccessUploadResponse()
                {
                    media_id = data.media_id,
                    url = data.url
                });
            }

            // 获取文件流
            var config = StoreConfig.Config;
            var stream = ServiceContainer.Resolve <IStoreStrategy>(config?.Type).GetStream(fileId);
            var media  = WeChatApi.AddMaterial(type, stream, file.name, file.content_type);

            stream.Dispose();

            // 创建素材记录
            var material = new wechat_material()
            {
                wechat_materialId = Guid.NewGuid().ToString(),
                media_id          = media.media_id,
                url        = media.url,
                sys_fileid = fileId,
                local_url  = SysFileService.GetDownloadUrl(fileId),
                name       = file.name,
                type       = type.ToMaterialTypeString()
            };

            CreateData(material);
            return(media);
        }
Esempio n. 14
0
        /// <summary>
        /// 修改图文素材
        /// </summary>
        /// <param name="t"></param>
        public override void UpdateData(wechat_news t)
        {
            var model = new
            {
                media_id = t.media_id,
                index    = 0,
                articles = new
                {
                    title              = t.name,
                    thumb_media_id     = t.thumb_media_id,
                    author             = t.author,
                    digest             = t.digest,
                    show_cover_pic     = 1,
                    content            = new WeChatNewsMaterialService(Broker).ConvertLocalUrlToWeChatUrl(t.html_content),
                    content_source_url = ""
                }
            };

            WeChatApi.UpdateNews(JsonConvert.SerializeObject(model));
            base.UpdateData(t);
        }
Esempio n. 15
0
 public void Execute(PersistBrokerPluginContext context)
 {
     var entity = context.Entity as wechat_material;
     switch (context.Action)
     {
         case EntityAction.PreCreate:
         case EntityAction.PreUpdate:
             // 如果素材未上传到系统,则根据url请求图片保存
             if (string.IsNullOrEmpty(entity.sys_fileid))
             {
                 var result = HttpUtil.DownloadImage(entity.url, out var contentType);
                 var id = Guid.NewGuid().ToString();
                 var stream = StreamUtil.BytesToStream(result);
                 var hash_code = SHAUtil.GetFileSHA1(stream);
                 var config = StoreConfig.Config;
                 ServiceContainer.Resolve<IStoreStrategy>(config?.Type).Upload(stream, entity.name, out var filePath);
                 var sysImage = new sys_file()
                 {
                     sys_fileId = id,
                     name = entity.name,
                     real_name = entity.name,
                     hash_code = hash_code,
                     file_type = "wechat_material",
                     content_type = contentType,
                     objectId = entity.Id
                 };
                 new SysFileService(context.Broker).CreateData(sysImage);
                 entity.sys_fileid = id;
                 entity.local_url = SysFileService.GetDownloadUrl(id);
             }
             break;
         case EntityAction.PreDelete:
             WeChatApi.DeleteMaterial(entity.GetAttributeValue<string>("media_id"));
             context.Broker.Delete("sys_file", entity.GetAttributeValue<string>("sys_fileid"));
             break;
         default:
             break;
     }
 }
        /// <summary>
        /// 创建图文消息素材
        /// </summary>
        /// <param name="fileid"></param>
        /// <returns></returns>
        public string CreateData(string fileid)
        {
            var file = Broker.Retrieve <sys_file>(fileid);
            var data = Broker.Retrieve <wechat_news_material>("SELECT * FROM wechat_news_material WHERE fileid = @id", new Dictionary <string, object>()
            {
                { "@id", fileid }
            });

            if (data == null)
            {
                var stream = ServiceContainer.Resolve <IStoreStrategy>(StoreConfig.Config.Type).GetStream(fileid);
                data = new wechat_news_material()
                {
                    Id     = Guid.NewGuid().ToString(),
                    fileid = fileid
                };
                data.media_url = WeChatApi.UploadImg(stream, file.name, file.content_type)?.url;
                data.local_url = SysFileService.GetDownloadUrl(fileid, false);
                CreateData(data);
            }
            return(data.media_url);
        }
Esempio n. 17
0
        public ActionResult LoginByWeiXin(string code, string state = null)
        {
            string returnresultstr = string.Empty;
            int    returncode      = 0;
            //Func<string, string, ActionResult> error = (content, detail) =>
            //{
            //    return this.ToError("错误", detail, Url.Action("Login", "Account"));
            //};


            IConfig           config = new ConfigWeChatWork();
            WeChatApi         wechat = new WeChatApi(config);
            AccessTokenResult result;
            CommonBll         cbll   = new CommonBll();
            DataTable         codetb = cbll.GetWxCodeCheck(code, 0);

            try
            {
                if (string.IsNullOrWhiteSpace(code))
                {
                    //return error("请求有误", "Code不能为空");
                    returnresultstr = "请求错误!";
                }
                else if (codetb.Rows.Count <= 0)
                {
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", "");
                    cbll.AddWxCode(code, 0);
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "请求access_token结束", "");
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", "");
                    result = wechat.GetAccessTokenSns(code);
                    //PlasCommon.Common.AddLog("", "请求access_token成功", "请求access_token成功", "");
                    var openID = result.OpenID;
                    if (state == "openid")
                    {
                        PlasCommon.Common.AddLog("", "access_token", result.AccessToken, "");

                        config.AccessToken = result.AccessToken;
                        //Response.Cookies["WeChatOpenID"].Value = openID;
                        //AccountData.WeChatOpenID = openID;
                        //PlasCommon.Common.AddLog("", "获取用户信息开始1", "获取用户信息开始1", "");
                        var userInfo = wechat.GetUserInfoSns(openID);
                        //PlasCommon.Common.AddLog("", "获取用户信息成功", "获取用户信息成功", "");
                        string returnstr = mbll.WxOrQQLoginBll(openID, "0");
                        if (returnstr != "Fail")
                        {
                            string[] resultstr = returnstr.Split(',');
                            //如果微信已经存在则登录
                            if (resultstr.Length > 0)
                            {
                                mbll.UpdateUserInfobll("HeadImage", userInfo.HeadImgUrl, resultstr[3]);
                                mbll.UpdateUserInfobll("UserName", userInfo.NickName, resultstr[2]);
                                if (resultstr[0].Equals("Success"))
                                {
                                    //var returndata = new
                                    //{
                                    //    usid = resultstr[1],
                                    //    phone = resultstr[4]
                                    //};
                                    //把重要的用户信息进行加密,存放到cookie
                                    this.SetAccountData(new AccountData
                                    {
                                        UserID       = resultstr[1],
                                        UserName     = resultstr[2],
                                        HeadImage    = resultstr[3],
                                        WeChatOpenID = openID
                                    });
                                    //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", "");
                                    //return RedirectToAction("Home", "Index");
                                    //return new RedirectResult("/Home/Index");
                                    returnresultstr = "登录成功!";
                                    returncode      = 1;
                                }
                                else
                                {
                                    //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                    returnresultstr = "登录失败!";
                                }
                            }
                            else
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                        }
                        //不存在则注册,注册成功则返回用户id,注册失败则返回失败状态
                        else
                        {
                            cp_userview model = new cp_userview();
                            model.UserName  = userInfo.NickName;
                            model.wxopenid  = openID;
                            model.HeadImage = userInfo.HeadImgUrl;
                            string registerresultstr = mbll.WxOrQQSaveRegister(model, "0");
                            //已经存在
                            if (registerresultstr == "AlreadyExist")
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                            else if (registerresultstr == "Fail")
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                            else if (registerresultstr == "Success")
                            {
                                string   returnstr2 = mbll.WxOrQQLoginBll(openID, "0");
                                string[] resultstr2 = returnstr2.Split(',');
                                if (resultstr2.Length > 0)
                                {
                                    if (resultstr2[0].Equals("Success"))
                                    {
                                        //var returndata2 = new
                                        //{
                                        //    usid = resultstr2[1],
                                        //    phone = resultstr2[4]
                                        //};
                                        this.SetAccountData(new AccountData
                                        {
                                            UserID       = resultstr2[1],
                                            UserName     = resultstr2[2],
                                            HeadImage    = resultstr2[3],
                                            WeChatOpenID = openID
                                        });
                                        //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", "");
                                        //return RedirectToAction("Index", "Home");
                                        //return Redirect("/Home/Index");
                                        returnresultstr = "登录成功!";
                                        returncode      = 2;
                                        //return new RedirectResult("/Home/Index");
                                    }
                                    else
                                    {
                                        //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                        returnresultstr = "登录失败!";
                                    }
                                }
                                else
                                {
                                    //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                    returnresultstr = "登录失败!";
                                }
                            }
                            else
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                        }
                    }
                    else
                    {
                        //return Json(Common.ToJsonResult("Error", "登录失败"));
                        returnresultstr = "登录失败!";
                    }
                }
                else
                {
                    returnresultstr = "登录成功!";
                    returncode      = 3;
                }
            }
            catch (Exception ex)
            {
                //PlasCommon.Common.AddLog("", "微信请求错误", ex.Message, "");
                //return error("请求有误", ex.Message);
                returnresultstr = "系统错误:" + ex.Message;
            }
            ViewBag.texing   = returnresultstr;
            ViewBag.typecode = returncode;
            return(View());
        }
Esempio n. 18
0
 /// <summary>
 /// 删除全部菜单
 /// </summary>
 public static void DeleteMenu()
 {
     WeChatApi.DeleteMenu();
 }
Esempio n. 19
0
        /// <summary>
        /// 查询菜单
        /// </summary>
        /// <returns></returns>
        public static WeChatMenuModel GetMenu()
        {
            var resp = WeChatApi.GetMenu();

            return(JsonConvert.DeserializeObject <WeChatMenuModel>(resp));
        }
Esempio n. 20
0
 /// <summary>
 /// 创建菜单
 /// </summary>
 /// <param name="menu"></param>
 public static void CreateMenu(SelfMenuInfo menu)
 {
     WeChatApi.CreateMenu(JsonConvert.SerializeObject(menu));
 }
Esempio n. 21
0
        /// <summary>
        /// 你可以定义自己的Default方法(命名空间:Wlniao.WeChat.Extend.Base)
        /// </summary>
        /// <returns></returns>
        public string Default()
        {
            Model.Fans  fans    = BLL.Fans.GetBy("WeChatOpenId", FromId);
            Model.Rules rule    = null;
            string      msgtext = System.Data.KvTableUtil.GetString("NoMessage");

            try
            {
                rule = BLL.Rules.GetRule(msgtext, FromId);
            }
            catch { }
            try
            {
                BLL.Fans.SetSession(FromId, "", rule.DoMethod, MsgArgs, rule.CallBackText);
                if (!string.IsNullOrEmpty(rule.DoMethod))
                {
                    String classname  = rule.DoMethod.Substring(0, rule.DoMethod.LastIndexOf('.'));       //获取类名
                    String methodname = rule.DoMethod.Substring(rule.DoMethod.LastIndexOf('.') + 1);      //获取方法名
                    Type   type       = null;
                    try
                    {
                        type = Type.GetType(String.Format("Wlniao.WeChat.Extend.{0}, Wlniao.WeChat.Extend", classname), false, true);
                        if (type == null)
                        {
                            type = Type.GetType(String.Format("Wlniao.WeChat.Method.{0}, Wlniao.WeChat", classname), false, true);
                        }
                    }
                    catch { }
                    ActionBase action = (ActionBase)Activator.CreateInstance(type);
                    action.FromId  = FromId;
                    action.MsgText = MsgText;
                    action.MsgArgs = MsgArgs;;
                    return(type.InvokeMember(methodname, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.IgnoreCase, null, action, new object[] { }).ToString());
                }
                else
                {
                    string where = "RuleGuid='" + rule.Guid + "'";
                    if (fans.AllowTest == 1)
                    {
                        where += " and (ContentStatus='normal' or ContentStatus='test')";
                    }
                    else
                    {
                        where += " and ContentStatus='normal'";
                    }

                    List <Model.RuleContent> listAll     = Model.RuleContent.find(where + " order by LastStick desc").list();
                    List <Model.RuleContent> listText    = Model.RuleContent.find(where + " and ContentType='text' order by LastStick desc").list();
                    List <Model.RuleContent> listPicText = Model.RuleContent.find(where + " and ContentType='pictext' order by LastStick desc").list();
                    List <Model.RuleContent> listMusic   = Model.RuleContent.find(where + " and ContentType='music' order by LastStick desc").list();
                    if (rule.SendMode == "sendgroup" && listPicText != null && listPicText.Count > 0)
                    {
                        rule.ReContent = WeChatApi.ResponsePicTextMsg(FromId, ToId, listPicText);
                    }
                    else if (listAll.Count > 0)
                    {
                        int i = 0;
                        if (rule.SendMode == "sendrandom")
                        {
                            i = new Random().Next(0, listAll.Count);
                        }
                        if (listAll[i].ContentType == "text")
                        {
                            rule.ReContent = listAll[i].TextContent;
                            try
                            {
                                //更新推送次数
                                listAll[i].PushCount++;
                                listAll[i].update("PushCount");
                            }
                            catch { }
                        }
                        else if (listAll[i].ContentType == "music")
                        {
                            rule.ReContent = WeChatApi.ResponseMusicMsg(FromId, ToId, listAll[i].Title, listAll[i].TextContent, listAll[i].MusicUrl, listAll[i].MusicUrl);
                            try
                            {
                                //更新推送次数
                                listAll[i].PushCount++;
                                listAll[i].update("PushCount");
                            }
                            catch { }
                        }
                        else if (listAll[i].ContentType == "pictext")
                        {
                            List <Model.RuleContent> listTemp = new List <Model.RuleContent>();
                            listTemp.Add(listAll[i]);
                            rule.ReContent = WeChatApi.ResponsePicTextMsg(FromId, ToId, listTemp);
                        }
                    }
                    return(rule.ReContent);
                }
            }
            catch { }
            return("");
        }