using MyCode.Project.Domain.Config; using MyCode.Project.Domain.Repositories; using MyCode.Project.Infrastructure.Common; using MyCode.Project.Infrastructure.Enumeration; using MyCode.Project.Infrastructure.UnityExtensions; using MyCode.Project.OutSideService; using Senparc.NeuChar.Context; using Senparc.NeuChar.Entities; using Senparc.NeuChar.Entities.Request; using Senparc.Weixin.Exceptions; using Senparc.Weixin.MP; using Senparc.Weixin.MP.AdvancedAPIs; using Senparc.Weixin.MP.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyCode.Project.Services.CustomMessageHandler { /// /// 自定义MessageHandler /// public partial class CustomMessageHandler { private string GetWelcomeInfo() { return string.Format("欢迎光临,版本号{0}", 1); } private static string accessToken1 = ""; /// /// 处理文字请求 /// /// 请求消息 /// public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { //return new SuccessResponseMessage(); //说明:实际项目中这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs string agentUrl = ""; var defaultResponseMessage = base.CreateResponseMessage(); var requestHandler = requestMessage.StartHandler(); //关键字不区分大小写,按照顺序匹配成功后将不再运行下面的逻辑 requestHandler .Keyword("OPENID", () => { var openId = requestMessage.FromUserName;//获取OpenId //var userInfo = Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(appId, openId, Language.zh_CN); defaultResponseMessage.Content = openId; //defaultResponseMessage.Content = string.Format( // "您的OpenID为:{0}\r\n昵称:{1}\r\n性别:{2}\r\n地区(国家/省/市):{3}/{4}/{5}\r\n关注时间:{6}\r\n关注状态:{7}", // requestMessage.FromUserName, userInfo.nickname, (WeixinSex)userInfo.sex, userInfo.country, userInfo.province, userInfo.city, DateTimeHelper.GetDateTimeFromXml(userInfo.subscribe_time), userInfo.subscribe); return defaultResponseMessage; }) .Keyword("余宇波二维码图", () => { return new SuccessResponseMessage(); }) //.Keyword("中奖人排行榜ABCD", () => //{ // SendGroupMessageByOpenId(requestMessage.FromUserName); // return new SuccessResponseMessage(); //}) //.Keyword("测试图文消息", () => //{ // var openId = requestMessage.FromUserName;//获取OpenId // var _weiXinAuthorizeService = UnityHelper.GetService(); // var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret); // var accessToken = wechatAccessToken.AccessToken; // //string[] list = new string[]{ openId, "o-F5k1mYTljCzbEWqQnPxVdlU0S8", "o-F5k1gDSbLPoQcQVL6eSKHzKKrc" }; // string clientmsgid = DateTime.Now.ToString("mmddhhmmss"); // //var result = GroupMessageApi.SendGroupMessageByOpenIdAsync(accessToken, GroupMessageType.text, "这是一条群发消息", clientmsgid, 10000, list); // //LogHelper.Info(result.Result); // var result = base.CreateResponseMessage(); // result.ToUserName = requestMessage.FromUserName; // result.Articles.Add(new Article() // { // Title = "【¥99元】简七0基础理财课,点击此处立即上课", // Description = @"学会钱生钱,利复利,做金钱的女主人", // PicUrl = "https://mmbiz.qpic.cn/mmbiz_jpg/IibNecEM61WukQ7Vo79DAYNtuNoqYoEhqmIa6tRSRa3oWCCsNWTgibhjxRkS78YXQeegr6CiaLMwH0RWuPLSibQIPg/0?wx_fmt=jpeg", // Url = "https://book.gokolab.com/detail/b4ce3258-53ff-448e-a9ad-f93ede7804df" // }); // CustomApi.SendNewsAsync(accessToken, openId, result.Articles, 10000, clientmsgid); // return new SuccessResponseMessage(); //}) //.Keyword("图", () => // { // var responseMessageImage = base.CreateResponseMessage(); // responseMessageImage.MsgType = Senparc.NeuChar.ResponseMsgType.Image; // responseMessageImage.Image.MediaId = "LA0z-5xRzF1ni_YcH8bR-ztKnynl1MtrTiwUbx9WD1o"; // return responseMessageImage; // }) ////Default不一定要在最后一个 .Default(() => { return new SuccessResponseMessage(); }); return requestHandler.GetResponseMessage() as IResponseMessageBase; } /// /// Event事件类型请求 /// public override IResponseMessageBase OnEventRequest(IRequestMessageEventBase requestMessage) { var strongRequestMessage = RequestMessage as IRequestMessageEventBase; IResponseMessageBase responseMessage = null; var weixinAppId = "";// SystemConfig.WeAppid; 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 = CurrentMessageHandlerNode.Execute(RequestMessage, this, weixinAppId) ?? OnEvent_ClickRequest(RequestMessage as RequestMessageEvent_Click); break; case Event.scan://二维码 responseMessage = OnEvent_ScanRequest(RequestMessage as RequestMessageEvent_Scan); break; case Event.VIEW://URL跳转(view视图) responseMessage = OnEvent_ViewRequest(RequestMessage as RequestMessageEvent_View); break; case Event.MASSSENDJOBFINISH://群发消息成功 responseMessage = OnEvent_MassSendJobFinishRequest(RequestMessage as RequestMessageEvent_MassSendJobFinish); break; case Event.TEMPLATESENDJOBFINISH://推送模板消息成功 responseMessage = OnEvent_TemplateSendJobFinishRequest(RequestMessage as RequestMessageEvent_TemplateSendJobFinish); break; case Event.pic_photo_or_album://弹出拍照或者相册发图 responseMessage = OnEvent_PicPhotoOrAlbumRequest(RequestMessage as RequestMessageEvent_Pic_Photo_Or_Album); break; case Event.scancode_push://扫码推事件 responseMessage = OnEvent_ScancodePushRequest(RequestMessage as RequestMessageEvent_Scancode_Push); break; case Event.scancode_waitmsg://扫码推事件且弹出“消息接收中”提示框 responseMessage = OnEvent_ScancodeWaitmsgRequest(RequestMessage as RequestMessageEvent_Scancode_Waitmsg); break; case Event.location_select://弹出地理位置选择器 responseMessage = OnEvent_LocationSelectRequest(RequestMessage as RequestMessageEvent_Location_Select); break; case Event.pic_weixin://弹出微信相册发图器 responseMessage = OnEvent_PicWeixinRequest(RequestMessage as RequestMessageEvent_Pic_Weixin); break; case Event.pic_sysphoto://弹出系统拍照发图 responseMessage = OnEvent_PicSysphotoRequest(RequestMessage as RequestMessageEvent_Pic_Sysphoto); break; case Event.card_pass_check://卡券通过审核 responseMessage = OnEvent_Card_Pass_CheckRequest(RequestMessage as RequestMessageEvent_Card_Pass_Check); break; case Event.card_not_pass_check://卡券未通过审核 responseMessage = OnEvent_Card_Not_Pass_CheckRequest(RequestMessage as RequestMessageEvent_Card_Not_Pass_Check); break; case Event.user_get_card://领取卡券 responseMessage = OnEvent_User_Get_CardRequest(RequestMessage as RequestMessageEvent_User_Get_Card); break; case Event.user_del_card://删除卡券 responseMessage = OnEvent_User_Del_CardRequest(RequestMessage as RequestMessageEvent_User_Del_Card); break; case Event.kf_create_session://多客服接入会话 responseMessage = OnEvent_Kf_Create_SessionRequest(RequestMessage as RequestMessageEvent_Kf_Create_Session); break; case Event.kf_close_session://多客服关闭会话 responseMessage = OnEvent_Kf_Close_SessionRequest(RequestMessage as RequestMessageEvent_Kf_Close_Session); break; case Event.kf_switch_session://多客服转接会话 responseMessage = OnEvent_Kf_Switch_SessionRequest(RequestMessage as RequestMessageEvent_Kf_Switch_Session); break; case Event.poi_check_notify://审核结果事件推送 responseMessage = OnEvent_Poi_Check_NotifyRequest(RequestMessage as RequestMessageEvent_Poi_Check_Notify); break; case Event.WifiConnected://Wi-Fi连网成功 responseMessage = OnEvent_WifiConnectedRequest(RequestMessage as RequestMessageEvent_WifiConnected); break; case Event.user_consume_card://卡券核销 responseMessage = OnEvent_User_Consume_CardRequest(RequestMessage as RequestMessageEvent_User_Consume_Card); break; case Event.user_enter_session_from_card://从卡券进入公众号会话 responseMessage = OnEvent_User_Enter_Session_From_CardRequest(RequestMessage as RequestMessageEvent_User_Enter_Session_From_Card); break; case Event.user_view_card://进入会员卡 responseMessage = OnEvent_User_View_CardRequest(RequestMessage as RequestMessageEvent_User_View_Card); break; case Event.merchant_order://微小店订单付款通知 responseMessage = OnEvent_Merchant_OrderRequest(RequestMessage as RequestMessageEvent_Merchant_Order); break; case Event.submit_membercard_user_info://接收会员信息事件通知 responseMessage = OnEvent_Submit_Membercard_User_InfoRequest(RequestMessage as RequestMessageEvent_Submit_Membercard_User_Info); break; case Event.ShakearoundUserShake://摇一摇事件通知 responseMessage = OnEvent_ShakearoundUserShakeRequest(RequestMessage as RequestMessageEvent_ShakearoundUserShake); break; case Event.user_gifting_card://卡券转赠事件推送 responseMessage = OnEvent_User_Gifting_CardRequest(RequestMessage as RequestMessageEvent_User_Gifting_Card); break; case Event.user_pay_from_pay_cell://微信买单完成 responseMessage = OnEvent_User_Pay_From_Pay_CellRequest(RequestMessage as RequestMessageEvent_User_Pay_From_Pay_Cell); break; case Event.update_member_card://会员卡内容更新事件:会员卡积分余额发生变动时 responseMessage = OnEvent_Update_Member_CardRequest(RequestMessage as RequestMessageEvent_Update_Member_Card); break; case Event.card_sku_remind://卡券库存报警事件:当某个card_id的初始库存数大于200且当前库存小于等于100时 responseMessage = OnEvent_Card_Sku_RemindRequest(RequestMessage as RequestMessageEvent_Card_Sku_Remind); break; case Event.card_pay_order://券点流水详情事件:当商户朋友的券券点发生变动时 responseMessage = OnEvent_Card_Pay_OrderRequest(RequestMessage as RequestMessageEvent_Card_Pay_Order); break; #region 卡券回调 case Event.giftcard_pay_done: responseMessage = OnEvent_GiftCard_Pay_DoneRequest(RequestMessage as RequestMessageEvent_GiftCard_Pay_Done); break; case Event.giftcard_send_to_friend: responseMessage = OnEvent_GiftCard_Send_To_FriendRequest(RequestMessage as RequestMessageEvent_GiftCard_Send_To_Friend); break; case Event.giftcard_user_accept: responseMessage = OnEvent_GiftCard_User_AcceptRequest(RequestMessage as RequestMessageEvent_GiftCard_User_Accept); break; #endregion #region 微信认证事件推送 case Event.qualification_verify_success://资质认证成功(此时立即获得接口权限) responseMessage = OnEvent_QualificationVerifySuccessRequest(RequestMessage as RequestMessageEvent_QualificationVerifySuccess); break; case Event.qualification_verify_fail://资质认证失败 responseMessage = OnEvent_QualificationVerifyFailRequest(RequestMessage as RequestMessageEvent_QualificationVerifyFail); break; case Event.naming_verify_success://名称认证成功(即命名成功) responseMessage = OnEvent_NamingVerifySuccessRequest(RequestMessage as RequestMessageEvent_NamingVerifySuccess); break; case Event.naming_verify_fail://名称认证失败(这时虽然客户端不打勾,但仍有接口权限) responseMessage = OnEvent_NamingVerifyFailRequest(RequestMessage as RequestMessageEvent_NamingVerifyFail); break; case Event.annual_renew://年审通知 responseMessage = OnEvent_AnnualRenewRequest(RequestMessage as RequestMessageEvent_AnnualRenew); break; case Event.verify_expired://认证过期失效通知 responseMessage = OnEvent_VerifyExpiredRequest(RequestMessage as RequestMessageEvent_VerifyExpired); break; #endregion #region 小程序审核事件推送 case Event.weapp_audit_success:// responseMessage = OnEvent_WeAppAuditSuccessRequest(RequestMessage as RequestMessageEvent_WeAppAuditSuccess); break; case Event.weapp_audit_fail:// responseMessage = OnEvent_WeAppAuditFailRequest(RequestMessage as RequestMessageEvent_WeAppAuditFail); break; #endregion default: return new SuccessResponseMessage(); } return responseMessage; } public override IResponseMessageBase OnTextOrEventRequest(RequestMessageText requestMessage) { // 预处理文字或事件类型请求。 // 这个请求是一个比较特殊的请求,通常用于统一处理来自文字或菜单按钮的同一个执行逻辑, // 会在执行OnTextRequest或OnEventRequest之前触发,具有以下一些特征: // 1、如果返回null,则继续执行OnTextRequest或OnEventRequest // 2、如果返回不为null,则终止执行OnTextRequest或OnEventRequest,返回最终ResponseMessage // 3、如果是事件,则会将RequestMessageEvent自动转为RequestMessageText类型,其中RequestMessageText.Content就是RequestMessageEvent.EventKey //if (requestMessage.Content == "OneClick") //{ // var strongResponseMessage = CreateResponseMessage(); // strongResponseMessage.Content = "您点击了底部按钮。\r\n为了测试微信软件换行bug的应对措施,这里做了一个——\r\n换行"; // return strongResponseMessage; //} return null;//返回null,则继续执行OnTextRequest或OnEventRequest } /// /// 点击事件 /// /// 请求消息 /// public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { return new SuccessResponseMessage(); IResponseMessageBase reponseMessage = null; //菜单点击,需要跟创建菜单时的Key匹配 //switch (requestMessage.EventKey) //{ // case "SubClickRoot_Text": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Content = "您点击了子菜单按钮。"; // } // break; // case "SubClickRoot_News": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Articles.Add(new Article() // { // Title = "您点击了子菜单图文按钮", // Description = "您点击了子菜单图文按钮,这是一条图文信息。这个区域是Description内容\r\n可以使用\\r\\n进行换行。", // PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg", // Url = "https://sdk.weixin.senparc.com" // }); // //随机添加一条图文,或只输出一条图文信息 // if (SystemTime.Now.Second % 2 == 0) // { // strongResponseMessage.Articles.Add(new Article() // { // Title = "这是随机产生的第二条图文信息,用于测试多条图文的样式", // Description = "这是随机产生的第二条图文信息,用于测试多条图文的样式", // PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg", // Url = "https://sdk.weixin.senparc.com" // }); // } // } // break; // case "SubClickRoot_Music": // { // //上传缩略图 //#if NET45 // var filePath = "~/Images/Logo.thumb.jpg"; //#else // var filePath = "~/wwwroot/Images/Logo.thumb.jpg"; //#endif // var uploadResult = Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(SystemConfig.WeAppid, UploadMediaFileType.thumb, // ServerUtility.ContentRootMapPath(filePath)); // //PS:缩略图官方没有特别提示文件大小限制,实际测试哪怕114K也会返回文件过大的错误,因此尽量控制在小一点(当前图片39K) // //设置音乐信息 // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Music.Title = "天籁之音"; // strongResponseMessage.Music.Description = "真的是天籁之音"; // strongResponseMessage.Music.MusicUrl = "https://sdk.weixin.senparc.com/Content/music1.mp3"; // strongResponseMessage.Music.HQMusicUrl = "https://sdk.weixin.senparc.com/Content/music1.mp3"; // strongResponseMessage.Music.ThumbMediaId = uploadResult.thumb_media_id; // } // break; // case "SubClickRoot_Image": // { // //上传图片 //#if NET45 // var filePath = "~/Images/Logo.jpg"; //#else // var filePath = "~/wwwroot/Images/Logo.jpg"; //#endif // var uploadResult = Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(SystemConfig.WeAppid, UploadMediaFileType.image, // ServerUtility.ContentRootMapPath(filePath)); // //设置图片信息 // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Image.MediaId = uploadResult.media_id; // } // break; // case "SendMenu"://菜单消息 // { // ////注意: // ////1、此接口可以在任意地方调用(包括后台线程),此处演示为通过 // ////2、一下"s:"前缀只是 Senparc.Weixin 的内部约定,可以使用 OnTextRequest事件中的 requestHandler.SelectMenuKeyword() 方法自动匹配到后缀(如101) // //var menuContentList = new List(){ // // new SendMenuContent("101","满意"), // // new SendMenuContent("102","一般"), // // new SendMenuContent("103","不满意") // //}; // //////使用异步接口 // //CustomApi.SendMenuAsync(appId, OpenId, "请对 Senparc.Weixin SDK 给出您的评价", menuContentList, "感谢您的参与!"); // reponseMessage = new ResponseMessageNoResponse();//不返回任何消息 // } // break; // case "SubClickRoot_Agent"://代理消息 // { // ////获取返回的XML // //var dt1 = SystemTime.Now; // //reponseMessage = MessageAgent.RequestResponseMessage(this, agentUrl, agentToken, RequestDocument.ToString()); // ////上面的方法也可以使用扩展方法:this.RequestResponseMessage(this,agentUrl, agentToken, RequestDocument.ToString()); // //var dt2 = SystemTime.Now; // //if (reponseMessage is ResponseMessageNews) // //{ // // (reponseMessage as ResponseMessageNews) // // .Articles[0] // // .Description += string.Format("\r\n\r\n代理过程总耗时:{0}毫秒", (dt2 - dt1).Milliseconds); // //} // } // break; // case "Member"://托管代理会员信息 // { // ////原始方法为:MessageAgent.RequestXml(this,agentUrl, agentToken, RequestDocument.ToString());//获取返回的XML // //reponseMessage = this.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString()); // } // break; // case "OAuth"://OAuth授权测试 // { // var strongResponseMessage = CreateResponseMessage(); // strongResponseMessage.Articles.Add(new Article() // { // Title = "OAuth2.0测试", // Description = "选择下面两种不同的方式进行测试,区别在于授权成功后,最后停留的页面。", // //Url = "https://sdk.weixin.senparc.com/oauth2", // //PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" // }); // strongResponseMessage.Articles.Add(new Article() // { // Title = "OAuth2.0测试(不带returnUrl),测试环境可使用", // Description = "OAuth2.0测试(不带returnUrl)", // Url = "https://sdk.weixin.senparc.com/oauth2", // PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" // }); // var returnUrl = "/OAuth2/TestReturnUrl"; // strongResponseMessage.Articles.Add(new Article() // { // Title = "OAuth2.0测试(带returnUrl),生产环境强烈推荐使用", // Description = "OAuth2.0测试(带returnUrl)", // Url = "https://sdk.weixin.senparc.com/oauth2?returnUrl=" + returnUrl.UrlEncode(), // PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" // }); // reponseMessage = strongResponseMessage; // } // break; // case "Description": // { // var strongResponseMessage = CreateResponseMessage(); // strongResponseMessage.Content = GetWelcomeInfo(); // reponseMessage = strongResponseMessage; // } // break; // case "SubClickRoot_PicPhotoOrAlbum": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Content = "您点击了【微信拍照】按钮。系统将会弹出拍照或者相册发图。"; // } // break; // case "SubClickRoot_ScancodePush": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Content = "您点击了【微信扫码】按钮。"; // } // break; // case "ConditionalMenu_Male": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:男。"; // } // break; // case "ConditionalMenu_Femle": // { // var strongResponseMessage = CreateResponseMessage(); // reponseMessage = strongResponseMessage; // strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:女。"; // } // break; // case "GetNewMediaId"://获取新的MediaId // { // var strongResponseMessage = CreateResponseMessage(); // try // { // var result = Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadForeverMedia(SystemConfig.WeAppid, ServerUtility.ContentRootMapPath("~/Images/logo.jpg")); // strongResponseMessage.Content = result.media_id; // } // catch (Exception e) // { // strongResponseMessage.Content = "发生错误:" + e.Message; // WeixinTrace.SendCustomLog("调用UploadForeverMedia()接口发生异常", e.Message); // } // } // break; // default: // { // var strongResponseMessage = CreateResponseMessage(); // strongResponseMessage.Content = "您点击了按钮,EventKey:" + requestMessage.EventKey; // reponseMessage = strongResponseMessage; // } // break; //} //return new SuccessResponseMessage(); } /// /// 进入事件 /// /// /// public override IResponseMessageBase OnEvent_EnterRequest(RequestMessageEvent_Enter requestMessage) { //var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage); //responseMessage.Content = "您刚才发送了ENTER事件请求。"; return new SuccessResponseMessage(); } /// /// 位置事件 /// /// /// public override IResponseMessageBase OnEvent_LocationRequest(RequestMessageEvent_Location requestMessage) { //这里是微信客户端(通过微信服务器)自动发送过来的位置信息 //var responseMessage = CreateResponseMessage(); // responseMessage.Content = "这里写什么都无所谓,比如:上帝爱你!"; //return responseMessage;//这里也可以返回null(需要注意写日志时候null的问题) return new SuccessResponseMessage(); } /// /// 通过二维码扫描关注扫描事件 /// /// /// public override IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage) { return new SuccessResponseMessage(); } /// /// 打开网页事件 /// /// /// public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage) { ////说明:这条消息只作为接收,下面的responseMessage到达不了客户端,类似OnEvent_UnsubscribeRequest //var responseMessage = CreateResponseMessage(); //responseMessage.Content = "您点击了view按钮,将打开网页:" + requestMessage.EventKey; return new SuccessResponseMessage(); } /// /// 群发完成事件 /// /// /// public override IResponseMessageBase OnEvent_MassSendJobFinishRequest(RequestMessageEvent_MassSendJobFinish requestMessage) { //var responseMessage = CreateResponseMessage(); //responseMessage.Content = "接收到了群发完成的信息。"; return new SuccessResponseMessage(); } /// /// 订阅(关注)事件 /// /// public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) { var _weiXinAuthorizeService = UnityHelper.GetService(); var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret); var _basMemberWxInfoRepository = UnityHelper.GetService(); var accessToken = wechatAccessToken.AccessToken; var memberWxinfo = _basMemberWxInfoRepository.SelectFirst(t => t.OpenID == requestMessage.FromUserName && (t.IsDeleted == false || t.IsDeleted == null)); if (memberWxinfo == null) { var weinfo = _weiXinAuthorizeService.GetWxUserInfo(requestMessage.FromUserName); memberWxinfo = new Domain.Model.BasMemberWxInfo(); memberWxinfo.ID = Guid.NewGuid(); memberWxinfo.City = weinfo.City; memberWxinfo.Country = weinfo.Country; memberWxinfo.Creater = "关注公众号"; memberWxinfo.CreateTime = DateTime.Now; memberWxinfo.Editor = "关注公众号"; memberWxinfo.EditTime = DateTime.Now; memberWxinfo.HeadImgUrl = weinfo.HeadImgUrl; memberWxinfo.MemberID = null; memberWxinfo.NickName = weinfo.NickName; memberWxinfo.OpenID = weinfo.OpenId; memberWxinfo.Province = weinfo.Province; memberWxinfo.RoleType =(int) LoginRoleType.WeChatPublic; memberWxinfo.Sex = weinfo.Sex; memberWxinfo.UnionId = weinfo.UnionId; memberWxinfo.IsDeleted = false; _basMemberWxInfoRepository.Add(memberWxinfo); } return new SuccessResponseMessage(); } /// /// 退订 /// 实际上用户无法收到非订阅账号的消息,所以这里可以随便写。 /// unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。并且关注用户流失的情况。 /// /// public override IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage) { //var _weiXinAuthorizeService = UnityHelper.GetService(); //var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret); //var _basMemberWxInfoRepository = UnityHelper.GetService(); //var accessToken = wechatAccessToken.AccessToken; //var memberWxinfo = _basMemberWxInfoRepository.SelectFirst(t => t.OpenID == requestMessage.FromUserName); //if (memberWxinfo == null) //{ // var weinfo = _weiXinAuthorizeService.GetWxUserInfo(requestMessage.FromUserName); // memberWxinfo = new Domain.Model.BasMemberWxInfo(); // memberWxinfo.ID = Guid.NewGuid(); // memberWxinfo.City = weinfo.City; // memberWxinfo.Country = weinfo.Country; // memberWxinfo.Creater = "退订公众号"; // memberWxinfo.CreateTime = DateTime.Now; // memberWxinfo.Editor = "退订公众号"; // memberWxinfo.EditTime = DateTime.Now; // memberWxinfo.HeadImgUrl = weinfo.HeadImgUrl; // memberWxinfo.MemberID = null; // memberWxinfo.NickName = weinfo.NickName; // memberWxinfo.OpenID = weinfo.OpenId; // memberWxinfo.Province = weinfo.Province; // memberWxinfo.RoleType = (int)LoginRoleType.WeChatPublic; // memberWxinfo.Sex = weinfo.Sex; // memberWxinfo.UnionId = weinfo.UnionId; // _basMemberWxInfoRepository.Add(memberWxinfo); //} return new SuccessResponseMessage(); } /// /// 事件之扫码推事件(scancode_push) /// /// /// public override IResponseMessageBase OnEvent_ScancodePushRequest(RequestMessageEvent_Scancode_Push requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之扫码推事件"; return new SuccessResponseMessage(); } /// /// 事件之扫码推事件且弹出“消息接收中”提示框(scancode_waitmsg) /// /// /// public override IResponseMessageBase OnEvent_ScancodeWaitmsgRequest(RequestMessageEvent_Scancode_Waitmsg requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之扫码推事件且弹出“消息接收中”提示框"; return new SuccessResponseMessage(); } /// /// 事件之弹出拍照或者相册发图(pic_photo_or_album) /// /// /// public override IResponseMessageBase OnEvent_PicPhotoOrAlbumRequest(RequestMessageEvent_Pic_Photo_Or_Album requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之弹出拍照或者相册发图"; return new SuccessResponseMessage(); } /// /// 事件之弹出系统拍照发图(pic_sysphoto) /// 实际测试时发现微信并没有推送RequestMessageEvent_Pic_Sysphoto消息,只能接收到用户在微信中发送的图片消息。 /// /// /// public override IResponseMessageBase OnEvent_PicSysphotoRequest(RequestMessageEvent_Pic_Sysphoto requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之弹出系统拍照发图"; return new SuccessResponseMessage(); } /// /// 事件之弹出微信相册发图器(pic_weixin) /// /// /// public override IResponseMessageBase OnEvent_PicWeixinRequest(RequestMessageEvent_Pic_Weixin requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之弹出微信相册发图器"; return new SuccessResponseMessage(); } /// /// 事件之弹出地理位置选择器(location_select) /// /// /// public override IResponseMessageBase OnEvent_LocationSelectRequest(RequestMessageEvent_Location_Select requestMessage) { var responseMessage = base.CreateResponseMessage(); responseMessage.Content = "事件之弹出地理位置选择器"; return new SuccessResponseMessage(); } /// /// 事件之发送模板消息返回结果 /// /// /// public override IResponseMessageBase OnEvent_TemplateSendJobFinishRequest(RequestMessageEvent_TemplateSendJobFinish requestMessage) { return new SuccessResponseMessage(); } #region 微信认证事件推送 public override IResponseMessageBase OnEvent_QualificationVerifySuccessRequest(RequestMessageEvent_QualificationVerifySuccess requestMessage) { //以下方法可以强制定义返回的字符串值 //TextResponseMessage = "your content"; //return null; return new SuccessResponseMessage();//返回"success"字符串 } #endregion #region 领取会员卡事件 public override IResponseMessageBase OnEvent_Submit_Membercard_User_InfoRequest(RequestMessageEvent_Submit_Membercard_User_Info requestMessage) { var _weiXinAuthorizeService = UnityHelper.GetService(); var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret); accessToken1 = wechatAccessToken.AccessToken; var result = CardApi.UserinfoGet(accessToken1, requestMessage.CardId, requestMessage.UserCardCode); var _userService = UnityHelper.GetService(); _userService.RegisteredFromSubmitCard(result, requestMessage); return new SuccessResponseMessage();//返回"success"字符串 } #endregion #region 进入会员卡 public override IResponseMessageBase OnEvent_User_View_CardRequest(RequestMessageEvent_User_View_Card requestMessage) { var _weiXinAuthorizeService = UnityHelper.GetService(); var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret); accessToken1 = wechatAccessToken.AccessToken; var result = CardApi.UserinfoGet(accessToken1, requestMessage.CardId, requestMessage.UserCardCode); var _userService = UnityHelper.GetService(); _userService.RegisteredFromViewtCard(result, requestMessage); return new SuccessResponseMessage();//返回"success"字符串 } #endregion } }