/// <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); } }
/// <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); }
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) { } }
/// <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); }
/// <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); }
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); }
/// <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); } } }
/// <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); }
/// <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); }
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); }