using Senparc.NeuChar.Entities; using Senparc.Weixin; using Senparc.Weixin.WxOpen.Entities; using Senparc.Weixin.WxOpen.Entities.Request; using Senparc.Weixin.WxOpen.MessageHandlers; using System; using System.IO; using System.Threading; using System.Threading.Tasks; namespace Znyc.Recruitment.Admin.WeChat.MessageHandlers.WxOpenMessageHandler { /// /// 自定义MessageHandler /// 把MessageHandler作为基类,重写对应请求的处理方法 /// public class CustomWxOpenMessageHandler : WxOpenMessageHandler { /// /// 为中间件提供生成当前类的委托 /// public static Func GenerateMessageHandler = (stream, postModel, maxRecordCount) => new CustomWxOpenMessageHandler(stream, postModel, maxRecordCount); private readonly string appId = Config.SenparcWeixinSetting.WxOpenAppId; private readonly string appSecret = Config.SenparcWeixinSetting.WxOpenAppSecret; public CustomWxOpenMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount) { //这里设置仅用于测试,实际开发可以在外部更全局的地方设置, //比如MessageHandler.GlobalGlobalMessageContext.ExpireMinutes = 3。 GlobalMessageContext.ExpireMinutes = 3; if (!string.IsNullOrEmpty(postModel.AppId)) { appId = postModel.AppId; //通过第三方开放平台发送过来的请求 } //在指定条件下,不使用消息去重 OmitRepeatedMessageFunc = requestMessage => { RequestMessageText textRequestMessage = requestMessage as RequestMessageText; if (textRequestMessage != null && textRequestMessage.Content == "容错") { return false; } return true; }; } public override async Task OnExecutingAsync(CancellationToken cancellationToken) { //测试MessageContext.StorageData CustomWxOpenMessageContext currentMessageContext = await base.GetCurrentMessageContext(); if (currentMessageContext.StorageData == null || currentMessageContext.StorageData is int) { currentMessageContext.StorageData = 0; } await base.OnExecutingAsync(cancellationToken); } public override async Task OnExecutedAsync(CancellationToken cancellationToken) { await base.OnExecutedAsync(cancellationToken); CustomWxOpenMessageContext currentMessageContext = await base.GetCurrentMessageContext(); currentMessageContext.StorageData = (int)currentMessageContext.StorageData + 1; } public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { //所有没有被处理的消息会默认返回这里的结果 return new SuccessResponseMessage(); //return new SuccessResponseMessage();等效于: //base.TextResponseMessage = "success"; //return null; } } }