Example #1
0
        public async Task <IResponseMessageBase> SendMessage(string appid, string openid, IResponseMessageBase responseMessage)
        {
            var messageQueue = new SenparcMessageQueue();

            if (!(responseMessage is ResponseMessageText responseMessagea))
            {
                return(responseMessage);
            }
            return(await Task.Run(() =>
            {
                {
                    var key = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(), Guid.NewGuid().ToString(), "SendMessage");
                    messageQueue.Add(key, () =>
                    {
                        responseMessagea.Content += "\r\n[消息超时后客服发送的消息1]";
                        // 发送客服消息 在队列里面就可以不用 async await 了
                        CustomApi.SendText(appid, openid, responseMessagea.Content);
                    });
                }

                {
                    var key = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(), Guid.NewGuid().ToString(), "SendMessage");
                    messageQueue.Add(key, () =>
                    {
                        responseMessagea.Content += "\r\n[消息超时后客服发送的消息2]";
                        // 发送客服消息 在队列里面就可以不用 async await 了
                        CustomApi.SendText(appid, openid, responseMessagea.Content);
                    });
                }
                return new ResponseMessageNoResponse();
            }));
        }
        /// <summary>
        /// 处理语音请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            var responseMessage = CreateResponseMessage <ResponseMessageMusic>();
            //上传缩略图
            //var accessToken = Containers.AccessTokenContainer.TryGetAccessToken(appId, appSecret);
            var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image,
                                                             ServerUtility.ContentRootMapPath("~/Images/Logo.jpg"));

            //设置音乐信息
            responseMessage.Music.Title        = "天籁之音";
            responseMessage.Music.Description  = "播放您上传的语音";
            responseMessage.Music.MusicUrl     = "https://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId;
            responseMessage.Music.HQMusicUrl   = "https://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId;
            responseMessage.Music.ThumbMediaId = uploadResult.media_id;

            //推送一条客服消息
            try
            {
                CustomApi.SendText(appId, OpenId, "本次上传的音频MediaId:" + requestMessage.MediaId);
            }
            catch
            {
            }

            return(responseMessage);
        }
Example #3
0
        /// <summary>
        /// 订阅(关注)事件
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            Task.Run(() =>
            {
                string openId = requestMessage.FromUserName;
                var replyItem = MpEventBll.GetByKey("ych_subscribe");
                if (replyItem != null)
                {
                    switch (replyItem.ReplyType)
                    {
                    case "text":
                        CustomApi.SendText(BaseClass.AppId, openId, EConvert.ConvertEmojiHtml(Senparc.Weixin.HttpUtility.RequestUtility.UrlDecode(replyItem.ReplyContent)));
                        break;

                    case "img":
                        CustomApi.SendImage(BaseClass.AppId, openId, replyItem.ReplyContent);
                        break;
                    }
                }
            });
            //将消息转发到客服
            var responseMessage = new SuccessResponseMessage();

            return(responseMessage);
        }
Example #4
0
        /// <summary>
        /// 处理小视频请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnShortVideoRequest(RequestMessageShortVideo requestMessage)
        {
            Task.Run(() =>
            {
                try
                {
                    string openId = requestMessage.FromUserName;
                    var replyItem = MpEventBll.GetByKey("ych_automsg");
                    if (replyItem != null)
                    {
                        switch (replyItem.ReplyType)
                        {
                        case "text":
                            CustomApi.SendText(BaseClass.AppId, openId, EConvert.ConvertEmojiHtml(Senparc.Weixin.HttpUtility.RequestUtility.UrlDecode(replyItem.ReplyContent)));
                            break;

                        case "img":
                            CustomApi.SendImage(BaseClass.AppId, openId, replyItem.ReplyContent);
                            break;
                        }
                    }
                }
                catch (Exception e)
                {
                    LogHandler.Error($"错误位置:微信图片消息回复\n请求数据:{JsonConvert.SerializeObject(requestMessage)}\n错误信息:{e.StackTrace}");
                }
            });
            //将消息转发到客服
            var responseMessage = CreateResponseMessage <ResponseMessageTransfer_Customer_Service>();

            return(responseMessage);
        }
        /// <summary>
        /// 订阅(关注)事件
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

            responseMessage.Content = GetWelcomeInfo();
            if (!string.IsNullOrEmpty(requestMessage.EventKey))
            {
                responseMessage.Content += "\r\n============\r\n场景值:" + requestMessage.EventKey;
            }

            //推送消息
            //下载文档
            if (requestMessage.EventKey.StartsWith("qrscene_"))
            {
                var sceneId = long.Parse(requestMessage.EventKey.Replace("qrscene_", ""));
                //var configHelper = new ConfigHelper(new HttpContextWrapper(HttpContext.Current));
                var codeRecord =
                    ConfigHelper.CodeCollection.Values.FirstOrDefault(z => z.QrCodeTicket != null && z.QrCodeId == sceneId);

                if (codeRecord != null)
                {
                    //确认可以下载
                    codeRecord.AllowDownload = true;
                    CustomApi.SendText(null, WeixinOpenId, GetDownloadInfo(codeRecord));
                }
            }


            return(responseMessage);
        }
Example #6
0
 /// <summary>
 /// 发送微信消息
 /// </summary>
 /// <param name="openid"></param>
 /// <param name="mediaid"></param>
 private void SendWxImg(string openid, string mediaid)
 {
     if (!string.IsNullOrEmpty(mediaid))
     {
         try
         {
             CustomApi.SendImage(accesstoken, openid, mediaid);
         }
         catch (Exception ex)
         {
             LogWriter.Error(ex, string.Format("openid为{0}的用户第一次发送登录图片出错", openid));
             UpdateAccessToken();
             try
             {
                 CustomApi.SendText(accesstoken, openid, mediaid);
             }
             catch (Exception ex2)
             {
                 LogWriter.Error(ex2, string.Format("openid为{0}的用户第二次发送登录图片出错", openid));
                 UpdateNewAccessToken();
                 try
                 {
                     CustomApi.SendText(accesstoken, openid, mediaid);
                 }
                 catch (Exception ex3)
                 {
                     LogWriter.Error(ex3, string.Format("openid为{0}的用户第三次发送登录图片出错", openid));
                 }
             }
         }
     }
 }
Example #7
0
        /// <summary>
        /// 处理文字请求
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            var responseMessage = base.CreateResponseMessage <ResponseMessageText>();

            switch (requestMessage.Content)
            {
            case "创建菜单":
                responseMessage.Content = "菜单更新命令已发出!";
                if (MPBasicSetting.MenuCreateFlag.Equals("1"))
                {
                    responseMessage.Content = MPMenu.CreateMenuDefault() == "" ? "成功创建菜单!" : "创建菜单失败";
                }
                break;

            default:

                try
                {
                    CustomApi.SendText(MPBasicSetting.AppID, OpenId, "您好!请将您想咨询的问题文字描述或拍照截图,客服人员收到后会与您取得联系。\r\n感谢您使用航运通+ V3.0!");
                }
                catch
                {
                }

                var responseMessageKefu = base.CreateResponseMessage <ResponseMessageTransfer_Customer_Service>();

                return(responseMessageKefu);
            }
            return(responseMessage);
        }
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            CustomApi.SendText(Config.SenparcWeixinSetting.WxOpenAppId, requestMessage.FromUserName,
                               "欢迎来到 2018 Tech Summit 《基于 .Net Core 的微信快速开发和持续集成》课堂!,这条消息来自小程序");

            return(new SuccessResponseMessage());
        }
        /// <summary>
        /// 事件之发送模板消息返回结果
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_TemplateSendJobFinishRequest(RequestMessageEvent_TemplateSendJobFinish requestMessage)
        {
            switch (requestMessage.Status)
            {
            case "success":
                //发送成功
                break;

            case "failed:user block":
                //送达由于用户拒收(用户设置拒绝接收公众号消息)而失败
                break;

            case "failed: system failed":
                //送达由于其他原因失败
                break;

            default:
                throw new WeixinException("未知模板消息状态:" + requestMessage.Status);
            }

            //注意:此方法内不能再发送模板消息,否则会造成无限循环!

            try
            {
                var msg = @"已向您发送模板消息状态:{0}MsgId:{1}".FormatWith(requestMessage.Status, requestMessage.MsgID);
                CustomApi.SendText(appId, WeixinOpenId, msg);//发送客服消息
            }
            catch (Exception e)
            {
                WeixinTrace.SendCustomLog("模板消息发送失败", e.ToString());
            }

            return(null);
        }
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            if (requestMessage.Content == "TESTCOMPONENT_MSG_TYPE_TEXT")
            {
                var responseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                responseMessage.Content = requestMessage.Content + "_callback";//固定为TESTCOMPONENT_MSG_TYPE_TEXT_callback
                return(responseMessage);
            }

            if (requestMessage.Content.StartsWith("QUERY_AUTH_CODE:"))
            {
                string openTicket      = OpenTicketHelper.GetOpenTicket(componentAppId);
                var    query_auth_code = requestMessage.Content.Replace("QUERY_AUTH_CODE:", "");
                try
                {
                    var component_access_token = ComponentApi.GetComponentAccessToken(componentAppId, componentSecret, openTicket).component_access_token;
                    var oauthResult            = ComponentApi.QueryAuth(component_access_token, componentAppId, query_auth_code);

                    //调用客服接口
                    var content    = query_auth_code + "_from_api";
                    var sendResult = CustomApi.SendText(oauthResult.authorization_info.authorizer_access_token,
                                                        requestMessage.FromUserName, content);
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
            return(null);
        }
Example #11
0
 /// <summary>
 /// 发送微信消息
 /// </summary>
 /// <param name="openid"></param>
 /// <param name="msg"></param>
 private void SendWxMsg(string openid, string msg)
 {
     if (!string.IsNullOrEmpty(msg))
     {
         try
         {
             CustomApi.SendText(accesstoken, openid, msg);
         }
         catch (Exception ex)
         {
             LogWriter.Error(ex, string.Format("openid为{0}的用户第一次发送信息出错:{1}", openid, msg));
             UpdateAccessToken();
             try
             {
                 CustomApi.SendText(accesstoken, openid, msg);
             }
             catch (Exception ex2)
             {
                 LogWriter.Error(ex2, string.Format("openid为{0}的用户第二次发送信息出错:{1}", openid, msg));
                 UpdateNewAccessToken();
                 try
                 {
                     CustomApi.SendText(accesstoken, openid, msg);
                 }
                 catch (Exception ex3)
                 {
                     LogWriter.Error(ex3, string.Format("openid为{0}的用户第三次发送信息出错:{1}", openid, msg));
                 }
             }
         }
     }
 }
        /// <summary>
        /// 取消关注时间
        /// </summary>
        /// <param name="requestMessage"></param>

        public void UnSubscribe(RequestMessageEvent_Unsubscribe requestMessage)
        {
            OfficialAccount_BLL obll  = new OfficialAccount_BLL();
            OfficialAccount     model = obll.Get(a => a.OriginalID == requestMessage.ToUserName);

            Subscriber_BLL sbll = new Subscriber_BLL();

            if (sbll.GetCount(a => a.OpenID == requestMessage.FromUserName && a.AccountID == model.AccountID) > 0)
            {
                Subscriber sub = sbll.Get(a => a.OpenID == requestMessage.FromUserName && a.AccountID == model.AccountID);
                sub.IsOK            = false;
                sub.UnSubscribeTime = DateTime.Now;
                if (sub.UnSubscribeCount != null)
                {
                    sub.UnSubscribeCount += 1;
                }
                else
                {
                    sub.UnSubscribeCount = 1;
                }
                sub.Score = 0;
                sbll.Update(sub);



                if (sub.FromOpenID != null)
                {
                    //if (sub.UnSubscribeCount > 1)
                    //{


                    Subscriber sup = sbll.Get(a => a.OpenID == sub.FromOpenID && a.AccountID == model.AccountID);

                    if (sup.IsOK == true)
                    {
                        sup.Score -= model.UnSubscribeReduceScore;


                        sup.DirectScore -= model.UnSubscribeReduceScore;


                        sbll.Update(sup);

                        StringBuilder sbparent = new StringBuilder();
                        sbparent.Append("您好,你的粉丝【" + sub.NickName + "】取消关注了本公众号!\n");


                        sbparent.Append("减少积分:" + model.UnSubscribeReduceScore + "分,累计积分:" + sup.Score.ToString() +
                                        "分\n");
                        CustomApi.SendText(model.AppID, sup.OpenID, sbparent.ToString());
                    }



                    //}
                }
            }
        }
Example #13
0
        public void SendTextTest()
        {
            var accessToken = AccessTokenContainer.GetAccessToken(_appId);

            var result = CustomApi.SendText(accessToken, openId, "来自平台的回复<>&\n换行了");

            Assert.IsNotNull(result);
            Assert.AreEqual("ok", result.errmsg);
        }
Example #14
0
        public void SendTextTest(string openId)

        {
            Model.wx_userweixin weixin = GetWeiXinCode();
            WeiXinCRMComm       cpp    = new WeiXinCRMComm();
            string error       = "";
            string accessToken = cpp.getAccessToken(weixin.id, out error);

            var result = CustomApi.SendText(accessToken, openId, "sdfdsdf");
        }
Example #15
0
        /// <summary>
        /// 向用户发送文本消息
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="message"></param>
        public void SendText(string openId, string message)
        {
            var accessToken = AccessToken();

            if (string.IsNullOrEmpty(accessToken))
            {
                return;
            }
            CustomApi.SendText(accessToken, openId, message);
        }
        public static readonly string OpenId = "oZ23J1XK3gFFHApw9aNxcf33oeJ0"; //伍家烨
        //public MessageBody messageBody;
        //public PostModel postModel;



        public void Send(MessageBody body)
        {
            Clients.All.SendAsync("Recv", body);
            //1、body存到数据库

            //2、body发到微信公众号,post请求
            string text  = body.Content.ToString();
            var    sasas = CustomApi.SendText(appId, OpenId, text);
            var    sss   = sasas;
        }
        public static readonly string AppId = ConfigurationManager.AppSettings["WeixinAppId"];// Config.SenparcWeixinSetting.WeixinAppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。


        public IResponseMessageBase SendMessage(string openId, IResponseMessageBase ResponseMessage)
        {
            var senparcMessageQueue = new SenparcMessageQueue();

            if (ResponseMessage is ResponseMessageText)
            {
                string strResponseMsg = "";

                //以下是:把同一用户的多个消息内容,加入到队列中

                //myKey 加入队列排序执行
                var myKey = SenparcMessageQueue.GenerateKey("MessageQueueHandlerAsync", ResponseMessage.GetType(),
                                                            Guid.NewGuid().ToString(), "SendMessage");

                senparcMessageQueue.Add(myKey, () =>
                {
                    //把需要回复的消息,整理一下
                    var asyncResponseMessage = ResponseMessage as ResponseMessageText;
                    if (asyncResponseMessage != null)
                    {
                        asyncResponseMessage.Content += "\r\n【1-执行超过5秒,以客服消息回复】";

                        strResponseMsg = asyncResponseMessage.Content;
                    }
                });

                //Thread.Sleep(10);

                //myKey2 加入队列排序执行
                var myKey2 = SenparcMessageQueue.GenerateKey("MessageQueueHandlerAsync", ResponseMessage.GetType(),
                                                             Guid.NewGuid().ToString(), "SendMessage");
                senparcMessageQueue.Add(myKey2, () =>
                {
                    //把需要回复的消息,整理一下
                    var asyncResponseMessage = ResponseMessage as ResponseMessageText;
                    if (asyncResponseMessage != null)
                    {
                        asyncResponseMessage.Content += "\r\n【2-执行超过5秒,以客服消息回复】";

                        strResponseMsg = asyncResponseMessage.Content;
                    }
                });

                //执行队列,把需要回复的消息整理
                SenparcMessageQueue.OperateQueue();

                //通过客服消息的方式,下发给用户
                CustomApi.SendText(AppId, openId, strResponseMsg);


                //不再给用户回复消息
                return(new ResponseMessageNoResponse());
            }
            return(ResponseMessage);
        }
Example #18
0
        //---Public:

        #region 发送纯文本信息

        /// <summary>
        /// 发送纯文本
        /// </summary>
        /// <param name="openId">OPENID</param>
        /// <param name="text">纯文本信息</param>
        public static void SendText(string openId, string text)
        {
            if (string.IsNullOrEmpty(openId))
            {
                return;
            }

            var accessToken = GetAccessToken();
            var result      = CustomApi.SendText(accessToken, openId, text);

            LogErrorInfo(result, openId, "SendText");
        }
Example #19
0
        /// <summary>
        /// 发送客服消息
        /// </summary>
        /// <param name="strMsgType"></param>
        /// <param name="wechat"></param>
        /// <param name="strOpenids"></param>
        /// <param name="obj"></param>
        /// <param name="strTitle"></param>
        /// <param name="strComment"></param>
        /// <returns></returns>
        private static WxJsonResult SendMsgKF(Weixin.MP.GroupMessageType MsgType, SysWechatConfig wechat, string[] strOpenids, object obj, string strTitle = null, string strComment = null)
        {
            WxJsonResult Ret = null;

            foreach (var openId in strOpenids)
            {
                WxJsonResult returnResult = null;

                switch (MsgType)
                {
                case GroupMessageType.text:

                    returnResult = CustomApi.SendText(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (string)obj);
                    break;
                //case GroupMessageType.mpnews:

                //    returnResult = CustomApi.SendNews(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (List<Article>)obj);
                //    break;
                case GroupMessageType.mpnews:
                    returnResult = CustomApi.SendMpNews(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (string)obj);
                    break;

                case GroupMessageType.image:
                    returnResult = CustomApi.SendImage(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (string)obj);
                    break;

                case GroupMessageType.video:
                    returnResult = CustomApi.SendVideo(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (string)obj, strTitle, strComment);
                    break;

                case GroupMessageType.voice:
                    returnResult = CustomApi.SendVoice(wechat.WeixinAppId, wechat.WeixinCorpSecret, openId, (string)obj);
                    break;
                }

                if (returnResult.errcode != ReturnCode.请求成功)
                {
                    Ret = returnResult;
                }
                else if (Ret == null)
                {
                    Ret = returnResult;
                }
            }

            return(Ret);
        }
Example #20
0
        public async static Task OnRequest(RequestMessageText requestMessage)
        {
            string appId  = Yiwan.Core.GlobalContext.Configuration.GetSection("WxConfig:AppId").Value;
            var    openId = requestMessage.FromUserName;//获取OpenId

            if (requestMessage.Content.Equals("容错"))
            {
                await Task.Delay(15000);//故意延时6秒,让微信多次发送消息过来,观察返回结果

                CustomApi.SendText(appId, openId, string.Format("测试容错,MsgId:{0},Ticks:{1}", requestMessage.MsgId, SystemTime.Now.Ticks));
            }
            else if (requestMessage.Content.Equals("OPENID"))
            {
                var userInfo = UserApi.Info(appId, openId, Language.zh_CN);

                string content = string.Format(
                    "您的OpenID为:{0}\r\n昵称:{1}\r\n性别:{2}\r\n地区(国家/省/市):{3}/{4}/{5}\r\n关注时间:{6}\r\n关注状态:{7}",
                    requestMessage.FromUserName, userInfo.nickname, (WeixinSex)userInfo.sex, userInfo.country, userInfo.province, userInfo.city, DateTimeHelper.GetDateTimeFromXml(userInfo.subscribe_time), userInfo.subscribe);

                CustomApi.SendText(appId, openId, content);
            }
            else if (requestMessage.Content.Equals("领取购买资格"))
            {
                try
                {
                    var(success, data) = await Yiwan.YouzanAPI.UserTags.TagsAdd(openId, "200618ZPW[限粉]");

                    if (success)
                    {
                        string gdurl = "https://shop16758627.m.youzan.com/wscgoods/detail/2ou0gljjprowr";
                        CustomApi.SendText(appId, openId, $"购买资格领取成功!\n\n这是<a href=\"{gdurl}\">下单地址</a>\n请尽快支付,商品售完即止则无法支付购买了");
                    }
                    else
                    {
                        CustomApi.SendText(appId, openId, $"购买资格领取失败!请稍后再试");
                    }
                }
                catch (Exception ex)
                {
                    if (openId.Equals("oAtpFwcxvxtIg0MMRMScGAPUncsA"))
                    {
                        CustomApi.SendText(appId, openId, JsonConvert.SerializeObject(ex));
                    }
                }
            }
        }
Example #21
0
        /// <summary>
        /// 客服消息返回用户信息
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="responseMessage"></param>
        /// <returns></returns>
        public IResponseMessageBase SendKfMessage(string openId, IResponseMessageBase responseMessage)
        {
            var messageQueue = new SenparcMessageQueue();

            if (responseMessage is ResponseMessageText)
            {
                {
                    var myKey = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(),
                                                                Guid.NewGuid().ToString(), "SendMessage");

                    messageQueue.Add(myKey, () =>
                    {
                        var kfResponseMessage = responseMessage as ResponseMessageText;
                        if (kfResponseMessage != null)
                        {
                            kfResponseMessage.Content += "\r\n【客服消息队列-1】";

                            //在队列中发送消息
                            CustomApi.SendText(Config.AppId, openId, kfResponseMessage.Content);
                        }
                    });
                }
                {
                    var myKey = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(),
                                                                Guid.NewGuid().ToString(), "SendMessage");

                    messageQueue.Add(myKey, () =>
                    {
                        var kfResponseMessage = responseMessage as ResponseMessageText;
                        if (kfResponseMessage != null)
                        {
                            kfResponseMessage.Content += "\r\n【客服消息队列-2】";

                            //在队列中发送消息
                            CustomApi.SendText(Config.AppId, openId, kfResponseMessage.Content);
                        }
                    });
                }
            }

            return(new ResponseMessageNoResponse());
        }
        /// <summary>
        /// 事件之发送模板消息返回结果
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_TemplateSendJobFinishRequest(RequestMessageEvent_TemplateSendJobFinish requestMessage)
        {
            switch (requestMessage.Status)
            {
            case "success":
                //发送成功

                break;

            case "failed:user block":
                //送达由于用户拒收(用户设置拒绝接收公众号消息)而失败
                break;

            case "failed: system failed":
                //送达由于其他原因失败
                break;

            default:
                throw new WeixinException("未知模板消息状态:" + requestMessage.Status);
            }

            //注意:此方法内不能再发送模板消息,否则会造成无限循环!

            try
            {
                var msg = @"已向您发送模板消息
状态:1
MsgId:1
(这是一条来自MessageHandler的客服消息)";
                CustomApi.SendText(appId, WeixinOpenId, msg);//发送客服消息
            }
            catch (Exception e)
            {
                global::Senparc.Weixin.WeixinTrace.SendCustomLog("模板消息发送失败", e.ToString());
            }


            //无需回复文字内容
            //return requestMessage
            //    .CreateResponseMessage<ResponseMessageNoResponse>();
            return(null);
        }
Example #23
0
        /// <summary>
        /// 实现发送客服消息
        /// </summary>
        /// <param name="openId"></param>
        /// <returns></returns>
        public ActionResult CustomeMesssage(string openId = "oifDGvmdSfltOJPL2QSuCdEIN0io")
        {
            for (int i = 0; i < 3; i++)
            {
                try
                {
                    var result = CustomApi.SendText(Config.AppId, openId, $"{(i + 1)}这是一条客服消息。" + DateTime.Now.ToString("HH:mm:ss.ffff"));

                    Thread.Sleep(1000);
                }
                catch (Exception e)
                {
                    throw;
                }
            }

            var result2 = CustomApi.SendText(Config.AppId, openId, "这是一条客服消息。" + DateTime.Now.ToString("HH:mm:ss.ffff"));

            return(Content(result2.ToJson()));
        }
Example #24
0
        /*
         * 此方法只负责客服发信息到微信
         */
        public void Send(MessageBody body)
        {
            //await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");
            //放在上面有没有可能发送消息的时候假设时间间隔短没有存到数据库?
            Clients.All.SendAsync("Recv", body);

            //获取当前的客服、顾客、公众号、消息、时间

            //1、body存到数据库
            //2、body发到微信公众号,post请求

            //var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);
            string text  = body.Content.ToString();
            var    sasas = CommonApi.GetToken("wxc3a7e87e3d3cb81a", "7f331ad801e1cf978024c31c5f0a5b9f");

            CustomApi.SendText("wxc3a7e87e3d3cb81a", OpenId, text);


            //放在下面发送消息会延迟
            //Clients.All.SendAsync("Recv", body);
        }
Example #25
0
        public IResponseMessageBase SendMessage(string openId, IResponseMessageBase responseMessage)
        {
            var messageQueue = new SenparcMessageQueue();

            if (responseMessage is ResponseMessageText)
            {
                {
                    var mqKey = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(), Guid.NewGuid().ToString(), "SendMessage");
                    messageQueue.Add(mqKey, () =>
                    {
                        var asyncResponseMessage      = responseMessage as ResponseMessageText;
                        asyncResponseMessage.Content += "\r\n\r\n - 这条消息来自客服接口-1";

                        //发送客服消息
                        CustomApi.SendText(Config.AppId, openId, asyncResponseMessage.Content);
                    });
                }
                {
                    var mqKey = SenparcMessageQueue.GenerateKey("MessageHandlerSendMessageAsync", responseMessage.GetType(), Guid.NewGuid().ToString(), "SendMessage");
                    messageQueue.Add(mqKey, () =>
                    {
                        var asyncResponseMessage      = responseMessage as ResponseMessageText;
                        asyncResponseMessage.Content += "\r\n\r\n - 这条消息来自客服接口-2";

                        //发送客服消息
                        CustomApi.SendText(Config.AppId, openId, asyncResponseMessage.Content);
                    });
                }


                return(new ResponseMessageNoResponse());
            }
            //else if ()
            //{
            //    //...
            //}

            return(responseMessage);
        }
Example #26
0
        /// <summary>
        /// Click事件接收
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            Task.Run(() =>
            {
                try
                {
                    string key    = requestMessage.EventKey;
                    string openId = requestMessage.FromUserName;
                    var replyItem = MpEventBll.GetByKey(key);
                    if (replyItem != null)
                    {
                        switch (replyItem.ReplyType)
                        {
                        case "text":
                            CustomApi.SendText(BaseClass.AppId, openId, replyItem.ReplyContent);
                            break;

                        case "img":
                            CustomApi.SendImage(BaseClass.AppId, openId, replyItem.ReplyContent);
                            break;

                        case "news":
                            CustomApi.SendMpNews(BaseClass.AppId, openId, replyItem.ReplyContent);
                            break;
                        }
                    }
                }
                catch (Exception e)
                {
                    LogHandler.Error($"错误位置:微信CLIKC事件回复\n请求数据:{JsonConvert.SerializeObject(requestMessage)}\n错误信息:{e.StackTrace}");
                }
            });
            var responseMessage = new SuccessResponseMessage();

            return(responseMessage);
        }
Example #27
0
        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            var responseMessage = CreateResponseMessage <ResponseMessageMusic>();
            //上传缩略图
            var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image,
                                                             Server.GetMapPath("~/Images/Logo.jpg"));

            //设置音乐信息
            responseMessage.Music.Title        = "天籁之音";
            responseMessage.Music.Description  = "播放您上传的语音";
            responseMessage.Music.MusicUrl     = "http://wx.wftx666.com/Media/GetVoice?mediaId=" + requestMessage.MediaId;
            responseMessage.Music.HQMusicUrl   = "http://wx.wftx666.com/Media/GetVoice?mediaId=" + requestMessage.MediaId;
            responseMessage.Music.ThumbMediaId = uploadResult.media_id;

            //推送一条客服消息
            try
            {
                CustomApi.SendText(appId, WeixinOpenId, "本次上传的音频MediaId:" + requestMessage.MediaId);
            }
            catch {
            }

            return(responseMessage);
        }
Example #28
0
 public static void SendText(List <Guid?> userIds, string text)
 {
     QueryOpenId(userIds).ForEach(openId => CustomApi.SendText(AppId, openId, text));
 }
 public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
 {
     CustomApi.SendText(Config.SenparcWeixinSetting.WxOpenAppId, requestMessage.FromUserName,
                        "你刚才向小程序发送了文字:" + requestMessage.Content);
     return(new SuccessResponseMessage());
 }
Example #30
0
 public static void SendText(string openId, string text)
 {
     CustomApi.SendText(AppId, openId, text);
 }