//<?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.Link: requestMessage = new RequestMessageLink(); 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; 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; }
Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig(); //站点配置 #region 处理关注/取消/默认回复方法=========================== /// <summary> /// 定阅事件的统一处理 /// </summary> public IResponseMessageBase EventSubscribe(int type, RequestMessageEventBase 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 = 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( "欢迎关注【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 = 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; }
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; }
/// <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; }
/// <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 EventName = ""; if (requestMessage.Event.ToString().Trim() != "") { EventName = requestMessage.Event.ToString(); } else if (requestMessage.EventKey != null) { EventName += requestMessage.EventKey.ToString(); } wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName); 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; 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; case "PIC_SYSPHOTO"://弹出系统拍照发图(pic_sysphoto) requestMessage = new RequestMessageEvent_Pic_Sysphoto(); break; case "PIC_PHOTO_OR_ALBUM"://弹出拍照或者相册发图(pic_photo_or_album) requestMessage = new RequestMessageEvent_Pic_Photo_Or_Album(); break; case "PIC_WEIXIN"://弹出微信相册发图器(pic_weixin) requestMessage = new RequestMessageEvent_Pic_Weixin(); break; case "LOCATION_SELECT"://弹出地理位置选择器(location_select) requestMessage = new RequestMessageEvent_Location_Select(); break; case "CARD_PASS_CHECK"://卡券通过审核 requestMessage = new RequestMessageEvent_Card_Pass_Check(); break; case "CARD_NOT_PASS_CHECK"://卡券未通过审核 requestMessage = new RequestMessageEvent_Card_Not_Pass_Check(); break; case "USER_GET_CARD"://领取卡券 requestMessage = new RequestMessageEvent_User_Get_Card(); break; case "USER_DEL_CARD"://删除卡券 requestMessage = new RequestMessageEvent_User_Del_Card(); break; case "KF_CREATE_SESSION"://多客服接入会话 requestMessage = new RequestMessageEvent_Kf_Create_Session(); break; case "KF_CLOSE_SESSION"://多客服关闭会话 requestMessage = new RequestMessageEvent_Kf_Close_Session(); break; case "KF_SWITCH_SESSION"://多客服转接会话 requestMessage = new RequestMessageEvent_Kf_Switch_Session(); break; case "POI_CHECK_NOTIFY"://审核结果事件推送 requestMessage = new RequestMessageEvent_Poi_Check_Notify(); break; case "WIFICONNECTED"://Wi-Fi连网成功事件 requestMessage = new RequestMessageEvent_WifiConnected(); break; case "USER_CONSUME_CARD"://卡券核销 requestMessage = new RequestMessageEvent_User_Consume_Card(); break; case "USER_ENTER_SESSION_FROM_CARD"://从卡券进入公众号会话 requestMessage = new RequestMessageEvent_User_Enter_Session_From_Card(); break; case "USER_VIEW_CARD"://进入会员卡 requestMessage = new RequestMessageEvent_User_View_Card(); break; case "MERCHANT_ORDER"://微小店订单付款通知 requestMessage = new RequestMessageEvent_Merchant_Order(); break; case "SUBMIT_MEMBERCARD_USER_INFO"://接收会员信息事件通知 requestMessage = new RequestMessageEvent_Submit_Membercard_User_Info(); 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; }
/// <summary> /// 推送纯文字 /// </summary> /// <param name="id"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int Indexid, int wid) { 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(); } wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName); 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.EventKey != null) { EventName += requestMessage.EventKey.ToString(); } wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName); return responseMessage; }
/// <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> /// 推送多图文 /// 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> public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int ruleId, int accountId) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = new BLL.weixin_request_content().GetContent(ruleId); 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", responseMessage.Content, requestMessage.ToUserName); 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; } }
private static readonly string _urlVote = ConfigurationManager.AppSettings["UrlVote"]; //投票大赛的地址 #endregion Fields #region Methods /// <summary> /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// </summary> /// <returns></returns> public static IRequestMessageBase GetRequestEntity(IWeChatManagementService service, XDocument doc, PostModel postModel = null) { RequestMessageBase requestMessage = null; RequestMsgType msgType; try { msgType = MsgTypeHelper.GetRequestMsgType(doc); switch (msgType) { case RequestMsgType.Text: requestMessage = new RequestMessageText(); requestMessage.FillEntityWithXml(doc); /*tim update by 2016-03-31*/ var rMessage = (RequestMessageText) requestMessage; //回复手机号重新绑定到会员 var b = System.Text.RegularExpressions.Regex.IsMatch(rMessage.Content.Trim(), @"^1[3|4|5|8][0-9]\d{8}$"); if (b) { var customerService = ServiceLocatorFactory.GetServiceLocator().GetService<ICustomerManagementService>(); var result = customerService.RebindFans(new CustRebindFansModel { Openid = rMessage.FromUserName, Mobile = rMessage.Content }); LoggerFactories.CreateLogger() .Write($"rebind result:{result.errcode}", TraceEventType.Information); } else { //处理投票活动消息 var result = HandleVote(rMessage.Content, requestMessage.FromUserName); if (result) { return requestMessage; } CustomApi.SendText(AppID, requestMessage.FromUserName, "感谢您的回复,玖伍淘车会尽快回复您。"); } 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(); EntityHelper.FillEntityWithXml(requestMessage, doc); var taskSubscribe = new Task(() => { service.GenerateWechatFriend(AppID, requestMessage.FromUserName, true); }); taskSubscribe.Start(); var slogan = _slogan.Replace("\\n", Environment.NewLine); //"\n\n<a src=''>点击参加玖伍淘车首届“/强绝代车王/强”微信自拍投票大赛<a/>"; var btnContent = ConfigurationManager.AppSettings["BtnContent"]; var tourl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={AppID}&redirect_uri={_urlVote}&response_type=code&scope=snsapi_base&state=vote&connect_redirect=1#wechat_redirect"; btnContent = $"<a href=\"{tourl}\">{btnContent}</a>"; slogan = string.Concat(slogan, Environment.NewLine, btnContent); CustomApi.SendText(AppID, requestMessage.FromUserName, slogan); //判断是否扫描场景二维码关注 var xElement = doc.Root.Element("EventKey"); if (xElement != null && xElement.Value.Contains("qrscene_")) { var code = xElement.Value.Replace("qrscene_", ""); service.UpdateWechatFriendQrScene(requestMessage.FromUserName, code, AppID); } break; case "UNSUBSCRIBE": //取消订阅(关注) requestMessage = new RequestMessageEvent_Unsubscribe(); EntityHelper.FillEntityWithXml(requestMessage, doc); service.UpdateWechatFriendUnSubscribe(AppID, requestMessage.FromUserName); var activityservice = ServiceLocatorFactory.GetServiceLocator().GetService<IActivityManagementService>(); activityservice.UnSubscribe(AppID, requestMessage.FromUserName); 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; case "PIC_SYSPHOTO": //弹出系统拍照发图(pic_sysphoto) requestMessage = new RequestMessageEvent_Pic_Sysphoto(); break; case "PIC_PHOTO_OR_ALBUM": //弹出拍照或者相册发图(pic_photo_or_album) requestMessage = new RequestMessageEvent_Pic_Photo_Or_Album(); break; case "PIC_WEIXIN": //弹出微信相册发图器(pic_weixin) requestMessage = new RequestMessageEvent_Pic_Weixin(); break; case "LOCATION_SELECT": //弹出地理位置选择器(location_select) requestMessage = new RequestMessageEvent_Location_Select(); break; case "CARD_PASS_CHECK": //卡券通过审核 requestMessage = new RequestMessageEvent_Card_Pass_Check(); break; case "CARD_NOT_PASS_CHECK": //卡券未通过审核 requestMessage = new RequestMessageEvent_Card_Not_Pass_Check(); break; case "USER_GET_CARD": //领取卡券 requestMessage = new RequestMessageEvent_User_Get_Card(); break; case "USER_DEL_CARD": //删除卡券 requestMessage = new RequestMessageEvent_User_Del_Card(); break; case "KF_CREATE_SESSION": //多客服接入会话 requestMessage = new RequestMessageEvent_Kf_Create_Session(); break; case "KF_CLOSE_SESSION": //多客服关闭会话 requestMessage = new RequestMessageEvent_Kf_Close_Session(); break; case "KF_SWITCH_SESSION": //多客服转接会话 requestMessage = new RequestMessageEvent_Kf_Switch_Session(); break; case "POI_CHECK_NOTIFY": //审核结果事件推送 requestMessage = new RequestMessageEvent_Poi_Check_Notify(); break; case "WIFICONNECTED": //Wi-Fi连网成功事件 requestMessage = new RequestMessageEvent_WifiConnected(); break; case "USER_CONSUME_CARD": //卡券核销 requestMessage = new RequestMessageEvent_User_Consume_Card(); break; case "USER_ENTER_SESSION_FROM_CARD": //从卡券进入公众号会话 requestMessage = new RequestMessageEvent_User_Enter_Session_From_Card(); break; case "USER_VIEW_CARD": //进入会员卡 requestMessage = new RequestMessageEvent_User_View_Card(); break; case "MERCHANT_ORDER": //微小店订单付款通知 requestMessage = new RequestMessageEvent_Merchant_Order(); var merchantOrderresult = (RequestMessageEvent_Merchant_Order) requestMessage; EntityHelper.FillEntityWithXml(requestMessage, doc); var orderresult = OrderApi.GetByIdOrder(AppID, merchantOrderresult.OrderId); if (orderresult.errcode == ReturnCode.请求成功) { var rewardsManagementService = ServiceLocatorFactory.GetServiceLocator() .GetService<IRewardsManagementService>(); var wholesaleCouponresult = rewardsManagementService.WholesaleCoupon(new CouponBuyModel() { //ProductId = orderresult.order.product_id, //OrderId = orderresult.order.order_id, //Accountid = AppID, //Number = orderresult.order.product_count, //Openid = orderresult.order.buyer_openid Order = orderresult.order }); var text = JsonConvert.SerializeObject(orderresult.order); var logresult = $"MERCHANT_ORDER:{text} result:{JsonConvert.SerializeObject(wholesaleCouponresult)}"; LoggerFactories.CreateLogger().Write(logresult, TraceEventType.Information); } break; case "SUBMIT_MEMBERCARD_USER_INFO": //接收会员信息事件通知 requestMessage = new RequestMessageEvent_Submit_Membercard_User_Info(); break; case "SHAKEAROUNDUSERSHAKE": //摇一摇事件通知 requestMessage = new RequestMessageEvent_ShakearoundUserShake(); break; default: //其他意外类型(也可以选择抛出异常) requestMessage = new RequestMessageEventBase(); break; } break; default: throw new UnknownRequestMsgTypeException( $"MsgType:{msgType} 在RequestMessageFactory中没有对应的处理程序!", new ArgumentOutOfRangeException()); //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常 } } catch (ArgumentException ex) { //throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex); LoggerFactories.CreateLogger() .Write($"RequestMessage转换出错!可能是MsgType不存在!,XML:{doc}", TraceEventType.Error, ex); } return requestMessage; }
/// <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); 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> /// 处理时间请求(这个方法一般不用重写,这里仅作为示例出现。除非需要在判断具体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; }
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.EventKey != null) { EventName += requestMessage.EventKey.ToString(); } if (!wxcomm.ExistApiidAndWxId(apiid, requestMessage.ToUserName)) { //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题 DAL.wxResponseBaseMgr.Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName); 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); 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> 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; }