807 lines
47 KiB
C#
Raw Normal View History

2025-04-21 14:10:27 +08:00
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
{
/// <summary>
/// 自定义MessageHandler
/// </summary>
public partial class CustomMessageHandler
{
private string GetWelcomeInfo()
{
return string.Format("欢迎光临,版本号{0}", 1);
}
private static string accessToken1 = "";
/// <summary>
/// 处理文字请求
/// </summary>
/// <param name="requestMessage">请求消息</param>
/// <returns></returns>
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
{
//return new SuccessResponseMessage();
//说明实际项目中这里的逻辑可以交给Service处理具体信息参考OnLocationRequest方法或/Service/LocationSercice.cs
string agentUrl = "";
var defaultResponseMessage = base.CreateResponseMessage<ResponseMessageText>();
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<IWeiXinAuthorizeService>();
// 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<ResponseMessageNews>();
// 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>();
// 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;
}
/// <summary>
/// Event事件类型请求
/// </summary>
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<ResponseMessageText>();
// strongResponseMessage.Content = "您点击了底部按钮。\r\n为了测试微信软件换行bug的应对措施这里做了一个——\r\n换行";
// return strongResponseMessage;
//}
return null;//返回null则继续执行OnTextRequest或OnEventRequest
}
/// <summary>
/// 点击事件
/// </summary>
/// <param name="requestMessage">请求消息</param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
{
return new SuccessResponseMessage();
IResponseMessageBase reponseMessage = null;
//菜单点击需要跟创建菜单时的Key匹配
//switch (requestMessage.EventKey)
//{
// case "SubClickRoot_Text":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Content = "您点击了子菜单按钮。";
// }
// break;
// case "SubClickRoot_News":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageNews>();
// 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<ResponseMessageMusic>();
// 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<ResponseMessageImage>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Image.MediaId = uploadResult.media_id;
// }
// break;
// case "SendMenu"://菜单消息
// {
// ////注意:
// ////1、此接口可以在任意地方调用包括后台线程此处演示为通过
// ////2、一下"s:"前缀只是 Senparc.Weixin 的内部约定,可以使用 OnTextRequest事件中的 requestHandler.SelectMenuKeyword() 方法自动匹配到后缀如101
// //var menuContentList = new List<SendMenuContent>(){
// // 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<ResponseMessageNews>();
// 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<ResponseMessageText>();
// strongResponseMessage.Content = GetWelcomeInfo();
// reponseMessage = strongResponseMessage;
// }
// break;
// case "SubClickRoot_PicPhotoOrAlbum":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Content = "您点击了【微信拍照】按钮。系统将会弹出拍照或者相册发图。";
// }
// break;
// case "SubClickRoot_ScancodePush":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Content = "您点击了【微信扫码】按钮。";
// }
// break;
// case "ConditionalMenu_Male":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:男。";
// }
// break;
// case "ConditionalMenu_Femle":
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// reponseMessage = strongResponseMessage;
// strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:女。";
// }
// break;
// case "GetNewMediaId"://获取新的MediaId
// {
// var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
// 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<ResponseMessageText>();
// strongResponseMessage.Content = "您点击了按钮EventKey" + requestMessage.EventKey;
// reponseMessage = strongResponseMessage;
// }
// break;
//}
//return new SuccessResponseMessage();
}
/// <summary>
/// 进入事件
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_EnterRequest(RequestMessageEvent_Enter requestMessage)
{
//var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
//responseMessage.Content = "您刚才发送了ENTER事件请求。";
return new SuccessResponseMessage();
}
/// <summary>
/// 位置事件
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_LocationRequest(RequestMessageEvent_Location requestMessage)
{
//这里是微信客户端(通过微信服务器)自动发送过来的位置信息
//var responseMessage = CreateResponseMessage<ResponseMessageText>();
// responseMessage.Content = "这里写什么都无所谓,比如:上帝爱你!";
//return responseMessage;//这里也可以返回null需要注意写日志时候null的问题
return new SuccessResponseMessage();
}
/// <summary>
/// 通过二维码扫描关注扫描事件
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage)
{
return new SuccessResponseMessage();
}
/// <summary>
/// 打开网页事件
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage)
{
////说明这条消息只作为接收下面的responseMessage到达不了客户端类似OnEvent_UnsubscribeRequest
//var responseMessage = CreateResponseMessage<ResponseMessageText>();
//responseMessage.Content = "您点击了view按钮将打开网页" + requestMessage.EventKey;
return new SuccessResponseMessage();
}
/// <summary>
/// 群发完成事件
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_MassSendJobFinishRequest(RequestMessageEvent_MassSendJobFinish requestMessage)
{
//var responseMessage = CreateResponseMessage<ResponseMessageText>();
//responseMessage.Content = "接收到了群发完成的信息。";
return new SuccessResponseMessage();
}
/// <summary>
/// 订阅(关注)事件
/// </summary>
/// <returns></returns>
public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
{
var _weiXinAuthorizeService = UnityHelper.GetService<IWeiXinAuthorizeService>();
var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret);
var _basMemberWxInfoRepository = UnityHelper.GetService<IBasMemberWxInfoRepository>();
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();
}
/// <summary>
/// 退订
/// 实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
/// unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定消除冗余数据。并且关注用户流失的情况。
/// </summary>
/// <returns></returns>
public override IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage)
{
//var _weiXinAuthorizeService = UnityHelper.GetService<IWeiXinAuthorizeService>();
//var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret);
//var _basMemberWxInfoRepository = UnityHelper.GetService<IBasMemberWxInfoRepository>();
//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();
}
/// <summary>
/// 事件之扫码推事件(scancode_push)
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ScancodePushRequest(RequestMessageEvent_Scancode_Push requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之扫码推事件";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之扫码推事件且弹出“消息接收中”提示框(scancode_waitmsg)
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ScancodeWaitmsgRequest(RequestMessageEvent_Scancode_Waitmsg requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之扫码推事件且弹出“消息接收中”提示框";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之弹出拍照或者相册发图pic_photo_or_album
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_PicPhotoOrAlbumRequest(RequestMessageEvent_Pic_Photo_Or_Album requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之弹出拍照或者相册发图";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之弹出系统拍照发图(pic_sysphoto)
/// 实际测试时发现微信并没有推送RequestMessageEvent_Pic_Sysphoto消息只能接收到用户在微信中发送的图片消息。
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_PicSysphotoRequest(RequestMessageEvent_Pic_Sysphoto requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之弹出系统拍照发图";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之弹出微信相册发图器(pic_weixin)
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_PicWeixinRequest(RequestMessageEvent_Pic_Weixin requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之弹出微信相册发图器";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之弹出地理位置选择器location_select
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_LocationSelectRequest(RequestMessageEvent_Location_Select requestMessage)
{
var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "事件之弹出地理位置选择器";
return new SuccessResponseMessage();
}
/// <summary>
/// 事件之发送模板消息返回结果
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
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<IWeiXinAuthorizeService>();
var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret);
accessToken1 = wechatAccessToken.AccessToken;
var result = CardApi.UserinfoGet(accessToken1, requestMessage.CardId, requestMessage.UserCardCode);
var _userService = UnityHelper.GetService<IUserService>();
_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<IWeiXinAuthorizeService>();
var wechatAccessToken = _weiXinAuthorizeService.GetTokenAndTicket(SystemConfig.WeAppid, SystemConfig.WeAppSecret);
accessToken1 = wechatAccessToken.AccessToken;
var result = CardApi.UserinfoGet(accessToken1, requestMessage.CardId, requestMessage.UserCardCode);
var _userService = UnityHelper.GetService<IUserService>();
_userService.RegisteredFromViewtCard(result, requestMessage);
return new SuccessResponseMessage();//返回"success"字符串
}
#endregion
}
}