Example #1
0
        /// <summary>
        /// 客服消息下发卡券
        /// </summary>
        /// <param name="openId">普通用户openid</param>
        /// <param name="cardId"></param>
        /// <param name="cardExt"></param>
        /// <returns></returns>
        public ActionResult SendCard(string openId, string cardId, CardExt cardExt)
        {
            if (!VerifyParam("openId,cardId,cardExt"))
            {
                return(ErrMsg());
            }

            if (string.IsNullOrEmpty(openId))
            {
                return(ErrMsg("openId不能为空!"));
            }

            if (string.IsNullOrEmpty(cardId))
            {
                return(ErrMsg("cardId不能为空!"));
            }

            var weChatConfig = GetWechatConfig();

            var ret = CustomApi.SendCard(weChatConfig.WeixinAppId, weChatConfig.WeixinCorpSecret, openId, cardId, cardExt);

            if (ret.errcode == Weixin.ReturnCode.请求成功)
            {
                return(Json(new
                {
                    message = "",
                    success = true
                }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(new
                {
                    message = ret.errmsg,
                    success = false
                }, JsonRequestBehavior.AllowGet));
            }
        }
        /// <summary>
        /// 根据用户发送的消息,返回消息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //IResponseMessageBase responseMessage = null;

            ////输入cmd 进入cmd状态 , exit退出cmd状态
            //if (requestMessage.Content == "cmd")
            //{
            //    CurrentMessageContext.StorageData = new StorageModel()
            //    {
            //        IsInCmd = true
            //    };
            //}
            //if (requestMessage.Content == "exit")
            //{
            //    var storageModel = CurrentMessageContext.StorageData as StorageModel;
            //    if (storageModel != null)
            //    {
            //        storageModel.IsInCmd = false;
            //    }
            //}

            //根据关键字、正则表达式,返回不同的消息内容
            RequestMessageTextKeywordHandler handler = requestMessage.StartHandler()
                                                       .Keyword("cmd", () =>
            {
                var responseMessageText = requestMessage.CreateResponseMessage <ResponseMessageText>();

                CurrentMessageContext.StorageData = new StorageModel()
                {
                    IsInCmd = true
                };
                responseMessageText.Content += "\r\n您已进入cmd模式";

                return(responseMessageText);
            })
                                                       .Keyword("电子卡", () =>
            {
                CustomApi.SendCard(Config.AppId, WeixinOpenId, "pifDGvpJKLpOc2vQxZHPslkxItqw", null, 10000);
                return(new ResponseMessageNoResponse());
            })
                                                       .Keywords(new[] { "exit", "close", "quit" }, () =>
            {
                var responseMessageText = requestMessage.CreateResponseMessage <ResponseMessageText>();

                CurrentMessageContext.StorageData = new StorageModel()
                {
                    IsInCmd = false
                };
                responseMessageText.Content += "\r\n您已退出cmd模式";

                return(responseMessageText);
            }).Regex(@"天气 \S+", () =>
            {
                //Get Json Result 获取天气信息。 正则表达式 使用
                var city = Regex.Match(requestMessage.Content, @"(?<=天气 )(\S+)").Value;
                var url  = "https://www.sojson.com/open/api/weather/json.shtml?city={0}".FormatWith(city.UrlEncode());

                //直接返回Json结果
                var weatherResult = Get.GetJson <WeatherResult>(url, null, null);

                var responseMessageText     = requestMessage.CreateResponseMessage <ResponseMessageText>();
                responseMessageText.Content = @"天气查询结果
==========
城市:{0}的天气信息
时期:{1}
结果:{2}
时间:{3}".FormatWith(weatherResult.city, weatherResult.date,
                   weatherResult.message, weatherResult.AddTime);

                return(responseMessageText);
            }).Regex(@"^http", () =>
            {
                var responseMessageNews = requestMessage.CreateResponseMessage <ResponseMessageNews>();
                var articleNew          = new Article()
                {
                    Title       = "您输入了" + requestMessage.Content,
                    PicUrl      = "http://sdk.weixin.senparc.com/images/book-cover-front-small-3d-transparent.png",
                    Url         = "http://www.baidu.com",
                    Description = "这是一篇文章\r\n换行了\r\n哈哈",
                };
                responseMessageNews.Articles.Add(articleNew);

                return(responseMessageNews);
            }).Default(() =>
            {
                var responseMessageText     = requestMessage.CreateResponseMessage <ResponseMessageText>();
                responseMessageText.Content = "这是一条默认的消息回复";
                return(responseMessageText);
            });

            //如果输入的是文字,再回复中添加输入的文字
            var responseMessage = handler.ResponseMessage;

            if (responseMessage is ResponseMessageText)
            {
                var storageModel = CurrentMessageContext.StorageData as StorageModel;
                if (storageModel != null)
                {
                    requestMessage.Content += "\r\nCount:" + storageModel.CmdCount.ToString();
                }

                (responseMessage as ResponseMessageText).Content += "\r\n您输入了:" + requestMessage.Content;
            }

            //返回内容转为基类
            return(responseMessage as IResponseMessageBase);
        }