예제 #1
0
        /// <summary>
        /// send image to openid
        /// </summary>
        /// <param name="openid"></param>
        /// <param name="fileByte"></param>
        /// <returns></returns>
        public static async Task <bool> SendMessageAsync(string openid, string message, int maxAttamptTime = 3)
        {
            try
            {
                WxJsonResult sendRst = null;
                for (int i = 0; i < maxAttamptTime; i++)
                {
                    sendRst = await CustomApi.SendTextAsync(_appId, openid, message);

                    if (sendRst != null && sendRst.errcode == 0)
                    {
                        break;
                    }
                }

                if (sendRst == null || sendRst.errcode != 0)
                {
                    StallApplication.SysError($"[MSG]failed sending to wechat {openid}:{sendRst.errcode},{sendRst.errmsg}");
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                StallApplication.SysError($"[MSG]failed sending to wechat {openid}:", ex);
                return(false);
            }
        }
예제 #2
0
        /// <summary>
        /// 处理视频请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage)
        {
            var responseMessage = CreateResponseMessage <ResponseMessageText>();

            responseMessage.Content = "您发送了一条视频信息,ID:" + requestMessage.MediaId;

            #region    材并推送到客户端

            Task.Factory.StartNew(async() =>
            {
                //上传素材
                var dir          = ServerUtility.ContentRootMapPath("~/App_Data/TempVideo/");
                var file         = await MediaApi.GetAsync(appId, requestMessage.MediaId, dir);
                var uploadResult = await MediaApi.UploadTemporaryMediaAsync(appId, UploadMediaFileType.video, file, 50000);
                await CustomApi.SendVideoAsync(appId, base.OpenId, uploadResult.media_id, "这是您刚才发送的视频", "这是一条视频消息");
            }).ContinueWith(async task =>
            {
                if (task.Exception != null)
                {
                    WeixinTrace.Log("OnVideoRequest()储存Video过程发生错误:", task.Exception.Message);

                    var msg = string.Format("上传素材出错:{0}\r\n{1}",
                                            task.Exception.Message,
                                            task.Exception.InnerException != null
                                    ? task.Exception.InnerException.Message
                                    : null);
                    await CustomApi.SendTextAsync(appId, base.OpenId, msg);
                }
            });

            #endregion

            return(responseMessage);
        }
예제 #3
0
        public void AsyncSendTemplateMessageTestForBookOptmize()
        {
            WxJsonResult finalResult = null;

            Task.Factory.StartNew(async() =>
            {
                var openId = "olPjZjsXuQPJoV0HlruZkNzKc91E";//消息目标用户的OpenId

                //实际生产环境中,用户信息应该从数据库或缓存中读取
                var userInfo = await UserApi.InfoAsync(_appId, openId);

                var data = new TemplateMessage_PaySuccessNotice(
                    "您的订单已经支付", userInfo.nickname,
                    "1234567890", 88.ToString("c"),
                    "模板消息测试商品",
                    "更详细信息,请到Senparc.Weixin SDK官方网站(http://zs.sasu.edu.cn)查看!\r\n这条消息使用的是优化过的方法,且不带Url参数。使用异步方法。");

                var result = await TemplateApi.SendTemplateMessageAsync(_appId, openId, data);

                //调用客服接口显示msgId
                finalResult = await CustomApi.SendTextAsync(_appId, openId, "上一条模板消息的MsgID:" + result.msgid);

                Assert.AreEqual(ReturnCode.请求成功, result.errcode);
            });
            while (finalResult == null)
            {
            }
        }
예제 #4
0
 /// <summary>
 /// 异步消息的发送
 /// </summary>
 /// <param name="openId"></param>
 /// <returns></returns>
 public async Task <ActionResult> CustomeMesssageAsync(string openId = "oifDGvmdSfltOJPL2QSuCdEIN0io")
 {
     return(await Task.Factory.StartNew(async() =>
     {
         for (int i = 0; i < 4; i++)
         {
             await CustomApi.SendTextAsync(Config.AppId, openId, "这是第{0}条客服消息,时间:{1}".FormatWith(i + 1, DateTime.Now.ToString("HH:mm:ss.ffff")));
         }
         return Content("异步消息发送完毕");
     }).Result);
 }
예제 #5
0
 /// <summary>
 /// 刷新AccessToken
 /// </summary>
 /// <param name="openId"></param>
 /// <returns></returns>
 public async Task <ActionResult> ChangeAccessToken(string openId = "oifDGvmdSfltOJPL2QSuCdEIN0io")
 {
     return(await Task.Factory.StartNew(async() =>
     {
         for (int i = 0; i < 4; i++)
         {
             await CustomApi.SendTextAsync(Config.AppId, openId, "这是第{0}条客服消息,时间:{1}".FormatWith(i + 1, DateTime.Now.ToString("HH:mm:ss.ffff")));
         }
         var accessToken = AccessTokenContainer.GetAccessToken(Config.AppId, true);
         return Content("异步消息发送完毕.AccessToken:" + accessToken);
     }).Result);
 }
예제 #6
0
        public async Task CustomSendTextAsync(string accessTokenOrAppId, string openId, int siteId, string text)
        {
            await _wxChatRepository.ReplyAdd(new WxChat
            {
                SiteId       = siteId,
                OpenId       = openId,
                IsReply      = true,
                MaterialType = MaterialType.Text,
                MaterialId   = 0,
                Text         = text
            });

            await CustomApi.SendTextAsync(accessTokenOrAppId, openId, text);
        }
예제 #7
0
        /// <summary>
        /// 推送客服消息
        /// </summary>
        /// <param name="openid"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task SendCustomerMsg(string openid, string message)
        {
            var access_token = await _accessTokenContainer.TryGetAccessTokenAsync(_account.AppId, _account.AppSecret);

            try
            {
                await CustomApi.SendTextAsync(access_token, openid, message);
            }
            catch
            {
                access_token = await _accessTokenContainer.TryGetAccessTokenAsync(_account.AppId, _account.AppSecret, true);

                await CustomApi.SendTextAsync(access_token, openid, message);
            }
        }
        private async Task SendCustomerText(int mpid, string openid, string text)
        {
            var account = await _mpAccountAppService.GetCache(mpid);

            if (account != null)
            {
                //根据配置信息,调用客服接口,发送问题创建后的默认回复
                try
                {
                    await CustomApi.SendTextAsync(await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret), openid, text);
                }
                catch
                {
                    await CustomApi.SendTextAsync(await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret, true), openid, text);
                }
            }
        }
예제 #9
0
        /// <summary>
        /// 异步关注事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public async override Task <IResponseMessageBase> OnEvent_SubscribeRequestAsync(RequestMessageEvent_Subscribe requestMessage)
        {
            BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));
            IResponseMessageBase reponseMessage = null;
            var strongResponseMessage           = CreateResponseMessage <ResponseMessageText>();

            try
            {
                var userInfo = await UserApi.InfoAsync(WXController.AppId, OpenId);

                if (userInfo != null)
                {
                    var a = await _weiXinUserRepository.AddAsync(
                        new WeiXinUserDto
                    {
                        City            = userInfo.city,
                        Country         = userInfo.country,
                        Groupid         = userInfo.groupid.ToString(),
                        Headimgurl      = userInfo.headimgurl,
                        Language        = userInfo.language,
                        Nickname        = userInfo.nickname,
                        Openid          = userInfo.openid,
                        Province        = userInfo.province,
                        Remark          = userInfo.remark,
                        Sex             = userInfo.sex,
                        Subscribe       = userInfo.subscribe,
                        Subscribe_scene = userInfo.subscribe_scene,
                        Subscribe_time  = userInfo.subscribe_time.ToString(),
                        Tagid_list      = userInfo.tagid_list.ToString(),
                        Unionid         = userInfo.unionid,
                        OperationTime   = DateTimeOffset.Now
                    });
                }
                strongResponseMessage.Content = "呙呙社区成立于2017年,是一家致力于服务社区业主的网络平台,呙呙社区与众多名企强强联合,本着简、好、快、省的原则共同为社区居民提供更便捷的生活方式。";
                reponseMessage = strongResponseMessage;
                await CustomApi.SendTextAsync(WXController.AppId, OpenId, strongResponseMessage.Content);

                return(null);
            }
            catch (Exception e)
            {
                BackgroundJob.Enqueue(() => Console.WriteLine(e.Message));
                return(null);
            }
        }
        /// <summary>
        /// 【异步方法】事件之发送模板消息返回结果
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override async Task <IResponseMessageBase> OnEvent_TemplateSendJobFinishRequestAsync(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}
(这是一条来自MessageHandler的异步客服消息)".FormatWith(requestMessage.Status, requestMessage.MsgID);
                await CustomApi.SendTextAsync(appId, OpenId, msg);//发送客服消息
            }
            catch (Exception e)
            {
                Senparc.Weixin.WeixinTrace.SendCustomLog("模板消息发送失败", e.ToString());
            }


            //无需回复文字内容
            //return requestMessage
            //    .CreateResponseMessage<ResponseMessageNoResponse>();
            return(null);
        }
예제 #11
0
        /// <summary>
        /// 异步点击事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public async override Task <IResponseMessageBase> OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage)
        {
            IResponseMessageBase reponseMessage = null;
            //菜单点击,需要跟创建菜单时的Key匹配

            var strongResponseMessage = CreateResponseMessage <ResponseMessageText>();

            switch (requestMessage.EventKey)
            {
            case "Introduction":
                strongResponseMessage.Content = "呙呙社区成立于2017年,是一家致力于服务社区业主的网络平台,呙呙社区与众多名企强强联合,本着简、好、快、省的原则共同为社区居民提供更便捷的生活方式。" + "\r\n 呙呙社区前身是物业公司,有着十几年的行业内管理服务经验,所以前期呙呙社区主要借助物业共享合力,将物业大数据资源整合为一体的现代化公司。";
                break;

            default:
                break;
            }

            reponseMessage = strongResponseMessage;
            await CustomApi.SendTextAsync(WXController.AppId, OpenId, strongResponseMessage.Content);

            return(null);
        }
        /// <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)
                {
                    if (codeRecord.AllowDownload)
                    {
                        Task.Factory.StartNew(() => CustomApi.SendTextAsync(null, OpenId, "下载已经开始,如需下载其他版本,请刷新页面后重新扫一扫。"));
                    }
                    else
                    {
                        //确认可以下载
                        codeRecord.AllowDownload = true;
                        Task.Factory.StartNew(() => CustomApi.SendTextAsync(null, OpenId, GetDownloadInfo(codeRecord)));
                    }
                }
            }


            return(responseMessage);
        }
예제 #13
0
        private async Task <string> SendCustomerText(int mpid, string openid, int problemid, int fanid, string text, string templete = null)
        {
            var account = await _mpAccountAppService.Get(new EntityDto <int>() { Id = mpid });

            if (account != null)
            {
                var textinfo = GetCustomerText(text, templete, fanid, problemid, openid);
                //根据配置信息,调用客服接口,发送问题创建后的默认回复
                try
                {
                    await CustomApi.SendTextAsync(await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret), openid, textinfo);

                    return(textinfo);
                }
                catch (Exception ex)
                {
                    Logger.Error(string.Format("发送MpID为{0},openid为{1}的客服消息{2}报错", mpid, openid, textinfo), ex);
                    await CustomApi.SendTextAsync(await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret, true), openid, textinfo);

                    return(textinfo);
                }
            }
            return(string.Empty);
        }