/// <summary> /// 推送纯文字 /// </summary> public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); var locationService = new LocationService(); responseMessage.Content = content; string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName); WeixinResponseContent entity = new WeixinResponseContent() { OpenId = requestMessage.FromUserName, RequestType = requestMessage.MsgType.ToString(), RequestContent = EventName, ResponseType = "text", ReponseContent = "事件:推送纯粹的文字,内容为:" + content, XmlContent = requestMessage.ToUserName }; entity.Insert(); return(responseMessage); }
/// <summary> /// Event事件类型请求 /// </summary> public virtual IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage) { var strongRequestMessage = RequestMessage as IRequestMessageEventBase; IResponseMessageBase responseMessage = null; switch (strongRequestMessage.Event) { case Event.ENTER: responseMessage = OnEvent_EnterRequest(RequestMessage as RequestMessageEvent_Enter); break; case Event.LOCATION: responseMessage = OnEvent_LocationRequest(RequestMessage as RequestMessageEvent_Location); //目前实际无效 break; case Event.subscribe: //订阅 responseMessage = OnEvent_SubscribeRequest(RequestMessage as RequestMessageEvent_Subscribe); break; case Event.unsubscribe: //退订 responseMessage = OnEvent_UnsubscribeRequest(RequestMessage as RequestMessageEvent_Unsubscribe); break; case Event.CLICK: responseMessage = OnEvent_ClickRequest(RequestMessage as RequestMessageEvent_Click); break; default: throw new UnknownRequestMsgTypeException("未知的Event下属请求信息", null); } return(responseMessage); }
public async Task <ActionResult> WXMSG(string signature, string timestamp, string nonce, string echostr) { if (!CheckSignature.Check(signature, timestamp, nonce, Commons.WXToken)) { return(Content("参数错误!")); } try { XDocument requestDoc = null; requestDoc = XDocument.Load(Request.Body); var requestMessage = RequestMessageFactory.GetRequestEntity(requestDoc); // 关注 取消 事件 if (requestMessage.MsgType == RequestMsgType.Event) { RequestMessageEventBase msg = (RequestMessageEventBase)requestMessage; if (msg.Event == Event.subscribe) { await FocusOn(requestDoc); //关注 } if (msg.Event == Event.unsubscribe) { await UnFocusOn(requestDoc); //取消关注 } } else { await AcceptWechar(requestDoc);// 发送的消息 } return(Content("success")); } catch (Exception ex) { return(Content(ex.ToString())); } }
/// <summary> /// 处理语音请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int Indexid, int wid) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.EventKey != null) { EventName += requestMessage.EventKey.ToString(); } Model.wx_requestRuleContent model = getDataMusicComm(wid, Indexid); if (model == null) { wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName); } else { responseMessage.Music.MusicUrl = model.mediaUrl; responseMessage.Music.Title = model.rContent; responseMessage.Music.Description = model.rContent2; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); } return(responseMessage); }
/// <summary> /// 微信MessageHandler事件处理,此代码的简化MessageHandler方法已由/CustomerMessageHandler/CustomerMessageHandler_Event.cs完成, /// 此方法不再更新 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe: //订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); //获取Senparc.Weixin.MP.dll版本信息 #if NET45 var dllPath = HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll"); #else //var dllPath = ServerUtility.ContentRootMapPath("~/bin/Release/netcoreapp2.2/Senparc.Weixin.MP.dll");//本地测试路径 var dllPath = ServerUtility.ContentRootMapPath("~/Senparc.Weixin.MP.dll"); //发布路径 #endif var fileVersionInfo = FileVersionInfo.GetVersionInfo(dllPath); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format( "欢迎关注【Senparc.Weixin.MP 微信公众平台SDK】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:https://sdk.weixin.senparc.com", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe: //退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "有空再来"; responseMessage = strongResponseMessage; break; } case Event.CLICK: //菜单点击事件,根据自己需要修改 //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest break; default: throw new ArgumentOutOfRangeException(); } return(responseMessage); }
/// <summary> /// 处理语音请求 /// </summary> public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } Model.weixin_request_content model = new BLL.weixin_request_content().GetModel(ruleId); if (model == null) { new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName); } else { if (model.media_url.Contains("http://")) { responseMessage.Music.MusicUrl = model.media_url; } else { //因为安装目录是以/开头,所以去掉,以免出现双斜杆 responseMessage.Music.MusicUrl = siteConfig.weburl + "/" + siteConfig.webpath.Replace("/", "") + model.media_url; } responseMessage.Music.Title = model.title; responseMessage.Music.Description = model.content; new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.media_url + "|标题:" + model.title + "|描述:" + model.content, requestMessage.ToUserName); } return(responseMessage); }
/// <summary> /// 推送语音请求 /// </summary> /// <param name="requestMessage"></param> /// <param name="indexid"></param> /// <param name="wid"></param> /// <param name="enevtName"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageVoice(RequestMessageEventBase requestMessage, int indexid, int wid, string enevtName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageVoice>(requestMessage); //Model.wx_requestRuleContent model = getDataMusicComm(wid, indexid); //if (model == null) //{ // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "-1", requestMessage.ToUserName); //} //else //{ // //if (model.mediaUrl.StartsWith("http")) // //{ // // responseMessage.Music.MusicUrl = model.mediaUrl; // //} // //else // //{ // // responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl; // //} // //responseMessage.Music.Title = model.rContent; // //responseMessage.Music.Description = model.rContent2; // //DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); // responseMessage.Voice = new Voice() { MediaId = model.extStr }; // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); //} return(responseMessage); }
/// <summary> /// 推送多图文 /// update note 1: /// 李朴 2013-8-20 添加会员卡的cardno参数 /// 注意:如果该会员注册过,则字符串没有cardno参数; /// 只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid">微帐号主键Id</param> /// <returns></returns> public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); List <Article> picTxtList = getDataPicTxtComm(wid, Indexid, openid, token); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.EventKey != null) { EventName += requestMessage.EventKey.ToString(); } if (picTxtList == null || picTxtList.Count <= 0) { wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName); } else { wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName); } responseMessage.Articles.AddRange(picTxtList); return(responseMessage); }
/// <summary> /// 模块功能回复【请求为‘事件’类型】 /// </summary> /// <param name="requestMessage"></param> /// <param name="modelFunctionName"></param> /// <param name="modelFunctionId"></param> /// <param name="apiid"></param> /// <returns></returns> public IResponseMessageBase GetModuleResponse(RequestMessageEventBase requestMessage, string modelFunctionName, int modelFunctionId, int apiid) { string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); IList <Model.ResponseContentEntity> responselist = new List <Model.ResponseContentEntity>(); responselist = PanDuanMoudle(modelFunctionName, modelFunctionId, openid, apiid); if (responselist == null || responselist.Count <= 0) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); responseMessage.Content = "【" + modelFunctionName + "】功能模块未获得到数据"; return(responseMessage); } Model.ReponseContentType responseType = responselist[0].rcType; if (responseType == Model.ReponseContentType.text) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); responseMessage.Content = responselist[0].rContent.ToString(); return(responseMessage); } else if (responseType == Model.ReponseContentType.txtpic) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); IList <Article> rArticlelist = new List <Article>(); Article article = new Article(); foreach (Model.ResponseContentEntity response in responselist) { article = new Article(); article.Title = response.rContent; article.Description = response.rContent2; article.Url = getWXApiUrl(response.detailUrl, token, openid) + getWxUrl_suffix(); if (response.picUrl == null || response.picUrl.ToString().Trim() == "") { article.PicUrl = ""; } else { if (!response.picUrl.Contains("http://")) { article.PicUrl = MyCommFun.getWebSite() + response.picUrl; } else { article.PicUrl = response.picUrl; } } rArticlelist.Add(article); } responseMessage.Articles.AddRange(rArticlelist); return(responseMessage); } else { return(null); } }
/// <summary> /// 处理事件请求(这个方法一般不用重写,这里仅作为示例出现。除非需要在判断具体Event类型以外对Event信息进行统一操作 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage) { var eventResponseMessage = base.OnEventRequest(requestMessage);//对于Event下属分类的重写方法,见:CustomerMessageHandler_Events.cs //TODO: 对Event信息进行统一操作 return(eventResponseMessage); }
/// <summary> /// 推送多图文 /// update note 1: /// 李朴 2013-8-20 添加会员卡的cardno参数 /// 注意:如果该会员注册过,则字符串没有cardno参数; /// 只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid">微帐号主键Id</param> /// <returns></returns> public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); List <Article> picTxtList = GetDataPicTxtComm(wid, Indexid, openid, token); //string EventName = ""; //if (requestMessage.Event.ToString().Trim() != "") //{ // EventName = requestMessage.Event.ToString(); //} //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} if (picTxtList == null || picTxtList.Count <= 0) { DependencyManager.Resolve <IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName); } else { DependencyManager.Resolve <IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName); } responseMessage.Articles.AddRange(picTxtList); return(responseMessage); }
/// <summary> /// Event事件类型请求 /// </summary> protected virtual IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage) { var strongRequestMessage = RequestMessage as IRequestMessageEventBase; IResponseMessageBase responseMessage = null; switch (strongRequestMessage.Event) { case Event.LOCATION: //自动发送的用户当前位置 responseMessage = OnEvent_LocationRequest(RequestMessage as RequestMessageEvent_Location); break; case Event.subscribe: //订阅 responseMessage = OnEvent_SubscribeRequest(RequestMessage as RequestMessageEvent_Subscribe); break; case Event.unsubscribe: //退订 responseMessage = OnEvent_UnsubscribeRequest(RequestMessage as RequestMessageEvent_Unsubscribe); break; case Event.CLICK: //菜单点击 responseMessage = OnEvent_ClickRequest(RequestMessage as RequestMessageEvent_Click); break; case Event.scan: //二维码 responseMessage = OnEvent_ScanRequest(RequestMessage as RequestMessageEvent_Scan); break; default: throw new UnknownRequestMsgTypeException("未知的Event下属请求信息", null); } return(responseMessage); }
/// <summary> /// 推送纯文字 /// 2013-9-12 /// </summary> /// <param name="id"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int wid) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); var locationService = new LocationService(); responseMessage.Content = content; string openid = requestMessage.FromUserName; string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.Event != null) { EventName += requestMessage.Event.ToString(); } var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName, pickname, image); return(responseMessage); }
/// <summary> /// 2014-9-8新增抽奖功能 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int wid) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = string.Format("感谢您参与本次活动,您的幸运号码为 WDS2014920{0} ,请凭本号码参与后续精彩活动!", getDataTxtComm(openid)); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.Event != null) { EventName += requestMessage.Event.ToString(); } var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); return(responseMessage); }
/// <summary> /// 处理语音请求 /// </summary> public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} //Model.weixin_request_content model = new BLL.weixin_request_content().GetModel(ruleId); WeixinRequestContent model = WeixinRequestContent.Find(WeixinRequestContent._.RuleId == ruleId); if (model == null) { //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName); WeixinResponseContent entity = new WeixinResponseContent() { OpenId = requestMessage.FromUserName, RequestType = requestMessage.MsgType.ToString(), RequestContent = EventName, ResponseType = "music", ReponseContent = "-1", XmlContent = requestMessage.ToUserName }; entity.Insert(); } else { if (model.MediaURL.Contains("http://")) { responseMessage.Music.MusicUrl = model.MediaURL; } else { //因为安装目录是以/开头,所以去掉,以免出现双斜杆 responseMessage.Music.MusicUrl = Utils.GetServerUrl() + model.MediaURL; } responseMessage.Music.Title = model.Title; responseMessage.Music.Description = model.Content; //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.media_url + "|标题:" + model.title + "|描述:" + model.content, requestMessage.ToUserName); WeixinResponseContent entity = new WeixinResponseContent() { OpenId = requestMessage.FromUserName, RequestType = requestMessage.MsgType.ToString(), RequestContent = EventName, ResponseType = "music", ReponseContent = "音乐链接:" + model.MediaURL + "|标题:" + model.Title + "|描述:" + model.Content, XmlContent = requestMessage.ToUserName }; entity.Insert(); } return(responseMessage); }
/// <summary> /// 推送多图文 /// </summary> public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); Article article; List <Article> artList = new List <Article>(); IList <Model.weixin_request_content> twList = new BLL.weixin_request_content().GetModelList(10, ruleId, string.Empty); foreach (Model.weixin_request_content modelt in twList) { article = new Article(); article.Title = modelt.title; article.Description = modelt.content; article.Url = GetWXApiUrl(modelt.link_url, token, openid); if (string.IsNullOrEmpty(modelt.img_url)) { article.PicUrl = string.Empty; } else { if (modelt.img_url.Contains("http://")) { article.PicUrl = modelt.img_url; } else { //因为安装目录是以/开头,所以去掉,以免出现双斜杆 article.PicUrl = siteConfig.weburl + "/" + siteConfig.webpath.Replace("/", "") + modelt.img_url; } } artList.Add(article); } string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} if (artList.Count == 0) { new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName); } else { new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + artList.Count + "条图文", requestMessage.ToUserName); } responseMessage.Articles.AddRange(artList); return(responseMessage); }
/// <summary> /// 推送单张图片 /// </summary> public IResponseMessageBase GetResponseMessageSingleImagesContent(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageImage>(requestMessage); string EventName = ""; var locationService = new LocationService(); NewLife.Log.XTrace.WriteLine("相应单图片回复"); WeixinRequestContent model = WeixinRequestContent.Find(WeixinRequestContent._.RuleId == ruleId); if (model == null) { NewLife.Log.XTrace.WriteLine("没找到单图片回复规则"); //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName); WeixinResponseContent entity = new WeixinResponseContent() { OpenId = requestMessage.FromUserName, RequestType = requestMessage.MsgType.ToString(), RequestContent = EventName, ResponseType = "image", ReponseContent = "-1", XmlContent = requestMessage.ToUserName }; entity.Insert(); } else { if (string.IsNullOrEmpty(model.MediaURL)) { //如果没有mediaid 则先上传 string imgUrl = "~/wwwroot" + model.ImgURL; var uploadResult = Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(siteConfig.AppId, UploadMediaFileType.image, ServerUtility.ContentRootMapPath(imgUrl)); model.MediaURL = uploadResult.media_id; model.Update(); NewLife.Log.XTrace.WriteLine("上传素材,返回mediaid:" + uploadResult.media_id); } Image img = new Image(); img.MediaId = model.MediaURL; responseMessage.CreateTime = DateTime.Now; responseMessage.Image = img; NewLife.Log.XTrace.WriteLine("回复单图片,mediaid" + img.MediaId + ";回复用户openid:" + responseMessage.FromUserName); WeixinResponseContent entity = new WeixinResponseContent() { OpenId = requestMessage.FromUserName, RequestType = requestMessage.MsgType.ToString(), RequestContent = EventName, ResponseType = "image", ReponseContent = "图片:" + model.MediaURL + "|标题:" + model.Title, XmlContent = requestMessage.ToUserName }; entity.Insert(); } return(responseMessage); }
private IResponseMessageBase EventProcess(int type, RequestMessageEventBase requestMessage) { int apiid = wxcomm.getApiid(); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.Event != null) //requestMessage.EventKey { EventName += requestMessage.Event.ToString(); //requestMessage.EventKey } if (!wxcomm.ExistApiidAndWxId(apiid, requestMessage.ToUserName)) { //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题 DAL.wxResponseBaseMgr.Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName, "sdff", "sdf"); return(wxcomm.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", apiid)); } int responseType = 0; int rid = rBll.GetRuleIdAndResponseType(apiid, "reqestType=" + type, out responseType); //取消关注 if (rid <= 0 || responseType <= 0) { DAL.wxResponseBaseMgr.Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName, "sdf", "sdf"); return(null); } IResponseMessageBase reponseMessage = null; switch (responseType) { case 1: //发送纯文字 reponseMessage = wxcomm.GetResponseMessageTxt(requestMessage, rid, apiid); break; case 2: //发送多图文 reponseMessage = wxcomm.GetResponseMessageNews(requestMessage, rid, apiid); break; case 3: //发送语音 reponseMessage = wxcomm.GetResponseMessageeMusic(requestMessage, rid, apiid); break; default: break; } return(reponseMessage); }
/// <summary> /// 获取请求消息和实体之间的映射结果 /// </summary> /// <param name="requestMsgType"></param> /// <returns></returns> public override IRequestMessageBase GetRequestEntityMappingResult(RequestMsgType requestMsgType, XDocument doc = null) { RequestMessageBase requestMessage; switch (requestMsgType) { case RequestMsgType.Text: requestMessage = new RequestMessageText(); break; case RequestMsgType.Image: requestMessage = new RequestMessageImage(); break; case RequestMsgType.MiniProgramPage: //小程序页面 requestMessage = new RequestMessageMiniProgramPage(); break; case RequestMsgType.NeuChar: requestMessage = new RequestMessageNeuChar(); break; case RequestMsgType.Event: //判断Event类型 switch (doc.Root.Element("Event").Value.ToUpper()) { case "USER_ENTER_TEMPSESSION": //进入客服会话 requestMessage = new RequestMessageEvent_UserEnterTempSession(); break; case "WEAPP_AUDIT_SUCCESS": //小程序审核成功 requestMessage = new RequestMessageEvent_WeAppAuditSuccess(); break; case "WEAPP_AUDIT_FAIL": //小程序审核失败 requestMessage = new RequestMessageEvent_WeAppAuditFail(); break; case "WEAPP_AUDIT_DELAY": //小程序审核延后 requestMessage = new RequestMessageEvent_WeAppAuditDelay(); break; case "WXA_NICKNAME_AUDIT": //名称审核结果 requestMessage = new RequestMessageEvent_NicknameAudit(); break; default: //其他意外类型(也可以选择抛出异常) requestMessage = new RequestMessageEventBase(); break; } break; default: throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", requestMsgType), new ArgumentOutOfRangeException()); //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常 } return(requestMessage); }
Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig(); //站点配置 #region 处理关注/取消/默认回复方法=========================== /// <summary> /// 定阅事件的统一处理 /// </summary> public IResponseMessageBase EventSubscribe(int type, RequestMessageEventBase requestMessage) { //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); int accountId = GetAccountId(); //取得公众账户ID string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} if (!ExistsOriginalId(accountId, requestMessage.ToUserName)) { //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题 new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); return(GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", accountId)); } int responseType = 0; int ruleId = new BLL.weixin_request_rule().GetRuleIdAndResponseType(accountId, "request_type=" + type, out responseType); if (ruleId <= 0 || responseType <= 0) { new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); return(null); } IResponseMessageBase reponseMessage = null; switch (responseType) { case 1: //发送纯文字 reponseMessage = GetResponseMessageTxt(requestMessage, ruleId, accountId); break; case 2: //发送多图文 reponseMessage = GetResponseMessageNews(requestMessage, ruleId, accountId); break; case 3: //发送语音 reponseMessage = GetResponseMessageeMusic(requestMessage, ruleId, accountId); break; default: break; } return(reponseMessage); }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe: //订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageNews>(); //获取Senparc.Weixin.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Articles.Add(new Article() { Title = "**,您有一个0元设计未领", PicUrl = "http://material-ui.net/content/zixun.jpg", Url = "http://material-ui.net/booking.html", Description = "您有一个0元设计未领" }); responseMessage = strongResponseMessage; break; } case Event.unsubscribe: //退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "有空再来"; responseMessage = strongResponseMessage; break; } case Event.CLICK: //菜单点击事件,根据自己需要修改 //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest break; default: throw new ArgumentOutOfRangeException(); } return(responseMessage); }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe: //订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); //获取Senparc.Weixin.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format( "欢迎关注计划管理平台,当前运行版本:v{0}。\r\n 输入如:【1】,【任务】,任务查询 注:(需在计划系统中有对应帐号并等待通过审核)\r\n输入如:【2】,【绑定】, 进行计划任务帐号绑定\r\n输入如:【3】,【电话】,【通讯录】, 进行通讯录查询\r\n", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe: //退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "有空再来"; responseMessage = strongResponseMessage; break; } case Event.CLICK: //菜单点击事件,根据自己需要修改 //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest break; default: throw new ArgumentOutOfRangeException(); } return(responseMessage); }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe: //订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); //获取Senparc.Weixin.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format( "欢迎关注【XX公司微信平台】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://www.yubom.net", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe: //退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "亲,有空再来!"; responseMessage = strongResponseMessage; break; } case Event.CLICK: //菜单点击事件,根据自己需要修改 //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest break; default: throw new ArgumentOutOfRangeException(); } return(responseMessage); }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); break; case Event.subscribe: //订阅 { var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; //获取Senparc.Weixin.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format("欢迎关注【美天网络统一帐号管理平台】,当前运行版本:v{0}。", version); //strongResponseMessage.Content = string.Format("欢迎关注【美天网络统一帐号管理平台】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://weixin.senparc.com", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe: //退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; strongResponseMessage.Content = "有空再来"; responseMessage = strongResponseMessage; break; } case Event.CLICK: //菜单点击事件,根据自己需要修改 throw new Exception("Demo中还没有加入CLICK的测试!"); break; default: throw new ArgumentOutOfRangeException(); } return(responseMessage); }
/// <summary> /// 处理语音请求 /// </summary> public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } // return(responseMessage); }
//<?xml version="1.0" encoding="utf-8"?> //<xml> // <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> // <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> // <CreateTime>1357986928</CreateTime> // <MsgType><![CDATA[text]]></MsgType> // <Content><![CDATA[中文]]></Content> // <MsgId>5832509444155992350</MsgId> //</xml> /// <summary> /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// </summary> /// <returns></returns> public static IRequestMessageBase GetRequestEntity(XDocument doc, PostModel postModel = null) { RequestMessageBase requestMessage = null; RequestMsgType msgType; int aaa; int bbb; try { msgType = MsgTypeHelper.GetRequestMsgType(doc); switch (msgType) { case RequestMsgType.Text: requestMessage = new RequestMessageText(); break; case RequestMsgType.Image: requestMessage = new RequestMessageImage(); break; case RequestMsgType.NeuChar: requestMessage = new RequestMessageNeuChar(); break; case RequestMsgType.Event: //判断Event类型 switch (doc.Root.Element("Event").Value.ToUpper()) { case "USER_ENTER_TEMPSESSION": //进入客服会话 requestMessage = new RequestMessageEvent_UserEnterTempSession(); break; default: //其他意外类型(也可以选择抛出异常) requestMessage = new RequestMessageEventBase(); break; } break; default: throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException()); //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常 } Senparc.NeuChar.Helpers.EntityHelper.FillEntityWithXml(requestMessage, doc); } catch (ArgumentException ex) { throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex); } return(requestMessage); }
/// <summary> /// 定阅事件的统一处理 /// </summary> public IResponseMessageBase EventSubscribe(int type, RequestMessageEventBase requestMessage) { int accountId = GetAccountId(); //取得公众账户ID string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } if (!ExistsOriginalId(accountId, requestMessage.ToUserName)) { //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题 //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); return(GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", accountId)); } //int responseType = 0; //int ruleId = 0;// new BLL.weixin_request_rule().GetRuleIdAndResponseType(accountId, "request_type=" + type, out responseType); //if (ruleId <= 0 || responseType <= 0) //{ // //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); // return null; //} IResponseMessageBase reponseMessage = null; reponseMessage = GetResponseMessageTxt(requestMessage, accountId); //switch (responseType) //{ // case 1: // //发送纯文字 // reponseMessage = GetResponseMessageTxt(requestMessage, ruleId, accountId); // break; // case 2: // //发送多图文 // reponseMessage = GetResponseMessageNews(requestMessage, ruleId, accountId); // break; // case 3: // //发送语音 // reponseMessage = GetResponseMessageeMusic(requestMessage, ruleId, accountId); // break; // default: // break; //} return(reponseMessage); }
private ResponseMessageText WechatEventMsgHandler(RequestMessageEventBase request) { ResponseMessageText responseMessage = null; switch (request.Event) { case Event.VIEW: // var viewRequest = request as RequestMessageEvent_View; LogHelper.Logger.Debug("点击菜单跳转链接时的事件推送"); responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request); responseMessage.Content = "正在获取您的账号信息,请稍等..."; break; case Event.subscribe: responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request); var msgInfo = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "subscribe"); if (msgInfo != null) { responseMessage.Content = msgInfo.ResponseMsg; } else { responseMessage.Content = "欢迎关注彩盟网"; } break; case Event.CLICK: var request_click = request as RequestMessageEvent_Click; responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request_click); var respMsg = "欢迎关注彩盟网,我们为您提供了最准确,最齐全的彩票分析计划"; if (request_click.EventKey == WeChatConfig.MENU_SUB_CLICK_HELP) { var msgInfo1 = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "help"); if (msgInfo1 != null) { respMsg = msgInfo1.ResponseMsg; } } responseMessage.Content = respMsg; break; default: responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request); responseMessage.Content = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "default").ResponseMsg; break; } return(responseMessage); }
/// <summary> /// 绑定微信 /// </summary> /// <param name="weixinMsg"></param> /// <param name="sceneid"></param> /// <param name="model"></param> /// <returns></returns> private string Binding(RequestMessageEventBase weixinMsg, string sceneid, SceneModel model) { try { var key = CacheKeyCollection.BindingReturn(sceneid); Log.Info("微信绑定进入:" + key); var sceneResult = Core.Cache.Get<Himall.DTO.WeiXinInfo>(key); if (sceneResult == null) { Log.Info("微信绑定缓存开始"); var siteSetting = _iSiteSettingService.GetSiteSettings(); if (!(string.IsNullOrWhiteSpace(siteSetting.WeixinAppId) || string.IsNullOrWhiteSpace(siteSetting.WeixinAppSecret))) { string token = AccessTokenContainer.TryGetToken(siteSetting.WeixinAppId, siteSetting.WeixinAppSecret); Log.Info("微信绑定缓存token" + token); var userinfo = Senparc.Weixin.MP.CommonAPIs.CommonApi.GetUserInfo(token, weixinMsg.FromUserName); string sex = "未知"; switch (userinfo.sex) { case 1: sex = "男"; break; case 2: sex = "女"; break; } var WeiXinInfo = new Himall.DTO.WeiXinInfo { OpenId = weixinMsg.FromUserName, NickName = userinfo.nickname, city = userinfo.city, province = userinfo.province, sex = sex, headimgurl = userinfo.headimgurl }; if (Core.Cache.Get(key) != null) Core.Cache.Remove(key); Core.Cache.Insert(key, WeiXinInfo, 300); } else { Core.Log.Error("微信事件回调:未设置公众号配置参数!"); } } } catch (Exception ex) { Log.Error("Binding:" + ex.Message); } return string.Empty; }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe://订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); //获取OneGulp.WeChat.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/OneGulp.WeChat.MP.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format( "欢迎关注,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe://退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); strongResponseMessage.Content = "亲,有空再来!"; responseMessage = strongResponseMessage; break; } case Event.CLICK://菜单点击事件,根据自己需要修改 //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest break; default: throw new ArgumentOutOfRangeException(); } return responseMessage; }
/// <summary> /// 推送纯文字 /// </summary> public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); var locationService = new LocationService(); responseMessage.Content = content; string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName); return(responseMessage); }
/// <summary> /// 推送语音请求 /// </summary> /// <param name="requestMessage"></param> /// <param name="indexid"></param> /// <param name="wid"></param> /// <param name="enevtName"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageVoice(RequestMessageEventBase requestMessage, int indexid, int wid, string enevtName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageVoice>(requestMessage); //Model.wx_requestRuleContent model = getDataMusicComm(wid, indexid); //if (model == null) //{ // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "-1", requestMessage.ToUserName); //} //else //{ // //if (model.mediaUrl.StartsWith("http")) // //{ // // responseMessage.Music.MusicUrl = model.mediaUrl; // //} // //else // //{ // // responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl; // //} // //responseMessage.Music.Title = model.rContent; // //responseMessage.Music.Description = model.rContent2; // //DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); // responseMessage.Voice = new Voice() { MediaId = model.extStr }; // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); //} return responseMessage; }
/// <summary> /// 推送纯文字 /// 2013-9-12 /// </summary> /// <param name="id"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int wid, string EventName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); var locationService = new LocationService(); responseMessage.Content = content; //string EventName = ""; //if (requestMessage.Event.ToString().Trim() != "") //{ // EventName = requestMessage.Event.ToString(); //} //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName); return responseMessage; }
/// <summary> /// 推送纯文字 /// </summary> /// <param name="id"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); //string EventName = ""; //if (requestMessage.Event.ToString().Trim() != "") //{ // EventName = requestMessage.Event.ToString(); //} //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName); return responseMessage; }
/// <summary> /// 推送多图文 /// update note 1: /// 李朴 2013-8-20 添加会员卡的cardno参数 /// 注意:如果该会员注册过,则字符串没有cardno参数; /// 只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid">微帐号主键Id</param> /// <returns></returns> public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); List<Article> picTxtList = GetDataPicTxtComm(wid, Indexid, openid, token); //string EventName = ""; //if (requestMessage.Event.ToString().Trim() != "") //{ // EventName = requestMessage.Event.ToString(); //} //else if (requestMessage.EventKey != null) //{ // EventName += requestMessage.EventKey.ToString(); //} if (picTxtList == null || picTxtList.Count <= 0) { DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName); } else { DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName); } responseMessage.Articles.AddRange(picTxtList); return responseMessage; }
/// <summary> /// 处理音乐请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName) { //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageMusic>(requestMessage); ////string EventName = ""; ////if (requestMessage.Event.ToString().Trim() != "") ////{ //// EventName = requestMessage.Event.ToString(); ////} ////else if (requestMessage.EventKey != null) ////{ //// EventName += requestMessage.EventKey.ToString(); ////} //Model.wx_requestRuleContent model = getDataMusicComm(wid, Indexid); //if (model == null) //{ // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName); //} //else //{ // if (model.mediaUrl.StartsWith("http")) // { // responseMessage.Music.MusicUrl = model.mediaUrl; // } // else // { // responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl; // } // responseMessage.Music.Title = model.rContent; // responseMessage.Music.Description = model.rContent2; // DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName); //} //return responseMessage; return null; }
/// <summary> /// 模块功能回复【请求为‘事件’类型】 /// </summary> /// <param name="requestMessage"></param> /// <param name="modelFunctionName"></param> /// <param name="modelFunctionId"></param> /// <param name="apiid"></param> /// <returns></returns> public IResponseMessageBase GetModuleResponse(RequestMessageEventBase requestMessage, string modelFunctionName, int modelFunctionId, int apiid) { //string openid = requestMessage.FromUserName; //string token = ConvertDateTimeInt(DateTime.Now).ToString(); //IList<ResponseContentEntity> responselist = new List<ResponseContentEntity>(); //responselist = PanDuanMoudle(modelFunctionName, modelFunctionId, openid, apiid); //if (responselist == null || responselist.Count <= 0) //{ // var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); // responseMessage.Content = "【" + modelFunctionName + "】功能模块未获得到数据"; // return responseMessage; //} //Model.ReponseContentType responseType = responselist[0].rcType; //if (responseType == Model.ReponseContentType.text) //{ // var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); // responseMessage.Content = responselist[0].rContent.ToString(); // return responseMessage; //} //else if (responseType == Model.ReponseContentType.txtpic) //{ // var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage); // IList<Article> rArticlelist = new List<Article>(); // Article article = new Article(); // foreach (ResponseContentEntity response in responselist) // { // article = new Article(); // article.Title = response.rContent; // article.Description = response.rContent2; // article.Url = getWXApiUrl(response.detailUrl, token, openid) + getWxUrl_suffix(); // if (response.picUrl == null || response.picUrl.ToString().Trim() == "") // { // article.PicUrl = ""; // } // else // { // if (!response.picUrl.Contains("http://")) // { // article.PicUrl = MyCommFun.getWebSite() + response.picUrl; // } // else // { // article.PicUrl = response.picUrl; // } // } // rArticlelist.Add(article); // } // responseMessage.Articles.AddRange(rArticlelist); // return responseMessage; //} //else //{ // return null; //} return null; }
private IResponseMessageBase EventProcess(int type, RequestMessageEventBase requestMessage) { int apiid = wxcomm.getApiid(); string EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } if (!wxcomm.ExistApiidAndWxId(apiid, requestMessage.ToUserName)) { //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题 DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); return wxcomm.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", apiid, "系统错误提示"); } bool isExist = wxcomm.wxCodeLegal(apiid); if (!isExist) { DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "账号已过期或已被禁用", requestMessage.ToUserName); return wxcomm.GetResponseMessageTxtByContent(requestMessage, "账号已过期或已被禁用!", apiid, "系统错误提示"); } int responseType = 0; int rid = rBll.GetRuleIdAndResponseType(apiid, "reqestType=" + type, out responseType); //取消关注 if (rid <= 0 || responseType <= 0) { DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); return wxcomm.GetResponseMessageTxtByContent(requestMessage, "欢迎您再次关注!", apiid, "系统错误提示"); } IResponseMessageBase reponseMessage = null; switch (responseType) { case 1: //发送纯文字 reponseMessage = wxcomm.GetResponseMessageTxt(requestMessage, rid, apiid, EventName); break; case 2: //发送多图文 reponseMessage = wxcomm.GetResponseMessageNews(requestMessage, rid, apiid, EventName); break; case 3: //发送语音 //reponseMessage = wxcomm.GetResponseMessageeMusic(requestMessage, rid, apiid, EventName); reponseMessage = wxcomm.GetResponseMessageVoice(requestMessage, rid, apiid, EventName); break; default: break; } return reponseMessage; }
//<?xml version="1.0" encoding="utf-8"?> //<xml> // <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> // <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> // <CreateTime>1357986928</CreateTime> // <MsgType><![CDATA[text]]></MsgType> // <Content><![CDATA[中文]]></Content> // <MsgId>5832509444155992350</MsgId> //</xml> /// <summary> /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// </summary> /// <returns></returns> public static IRequestMessageBase GetRequestEntity(XDocument doc) { RequestMessageBase requestMessage = null; RequestMsgType msgType; try { msgType = MsgTypeHelper.GetRequestMsgType(doc); switch (msgType) { case RequestMsgType.Text: requestMessage = new RequestMessageText(); break; case RequestMsgType.Location: requestMessage = new RequestMessageLocation(); break; case RequestMsgType.Image: requestMessage = new RequestMessageImage(); break; case RequestMsgType.Voice: requestMessage = new RequestMessageVoice(); break; case RequestMsgType.Video: requestMessage = new RequestMessageVideo(); break; case RequestMsgType.Link: requestMessage = new RequestMessageLink(); break; case RequestMsgType.ShortVideo: requestMessage = new RequestMessageShortVideo(); break; case RequestMsgType.Event: //判断Event类型 switch (doc.Root.Element("Event").Value.ToUpper()) { case "ENTER"://进入会话 requestMessage = new RequestMessageEvent_Enter(); break; case "LOCATION"://地理位置 requestMessage = new RequestMessageEvent_Location(); break; case "SUBSCRIBE"://订阅(关注) requestMessage = new RequestMessageEvent_Subscribe(); break; case "UNSUBSCRIBE"://取消订阅(关注) requestMessage = new RequestMessageEvent_Unsubscribe(); break; case "CLICK"://菜单点击 requestMessage = new RequestMessageEvent_Click(); break; case "SCAN"://二维码扫描 requestMessage = new RequestMessageEvent_Scan(); break; case "VIEW"://URL跳转 requestMessage = new RequestMessageEvent_View(); break; case "MASSSENDJOBFINISH": //事件推送群发 requestMessage = new RequestMessageEvent_MassSendJobFinish(); break; case "TEMPLATESENDJOBFINISH"://模板信息 requestMessage = new RequestMessageEvent_TemplateSendJobFinish(); break; case "SCANCODE_PUSH"://扫码推事件(scancode_push) requestMessage = new RequestMessageEvent_Scancode_Push(); break; case "SCANCODE_WAITMSG"://扫码推事件且弹出“消息接收中”提示框(scancode_waitmsg) requestMessage = new RequestMessageEvent_Scancode_Waitmsg(); break; default://其他意外类型(也可以选择抛出异常) requestMessage = new RequestMessageEventBase(); break; } break; default: throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException());//为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常 } EntityHelper.FillEntityWithXml(requestMessage, doc); } catch (ArgumentException ex) { throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex); } return requestMessage; }
public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage) { UserProfile up = new UserProfile(); var Buttons = up.Buttons; ResponseMessageBase responseMessage = null; switch (requestMessage.Event) { case Event.ENTER: { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); strongResponseMessage.Content = "您刚才发送了ENTER事件请求。"; responseMessage = strongResponseMessage; break; } case Event.LOCATION: throw new Exception("暂不可用"); //break; case Event.subscribe://订阅 { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); //获取Senparc.Weixin.MP.dll版本信息 var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/EasyWeixin.dll")); var version = fileVersionInfo.FileVersion; strongResponseMessage.Content = string.Format( "欢迎关注【Senparc.Weixin.MP 微信公众平台SDK】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://weixin.senparc.com", version); responseMessage = strongResponseMessage; break; } case Event.unsubscribe://退订 { //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。 var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); strongResponseMessage.Content = "有空再来"; responseMessage = strongResponseMessage; break; } case Event.CLICK://菜单点击事件,根据自己需要修改 { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); foreach (var Button in Buttons) { if (Button.SubButtons.Count == 0) { if (Button.key == requestMessage.EventKey) { } } else { foreach (var Subitem in Button.SubButtons) { if (Subitem.key == requestMessage.EventKey) { } } } } //throw new Exception("Demo中还没有加入CLICK的测试!"); break; } case Event.VIEW://菜单点击事件,根据自己需要修改 { var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>(); //requestMessage.EventKey break; } //break; default: throw new ArgumentOutOfRangeException(); } return responseMessage; }