using Microsoft.Extensions.DependencyInjection; 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; using YBDevice.WXApplication.DeviceInfo; using YBDevice.WXApplication.WXInfo; namespace YBDevice.WX.MessageHandlers.WxOpenMessageHandler { /// /// 微信公众号自定义MessageHandler /// public class CustomWxOpenMessageHandler : WxOpenMessageHandler { private string appId = Config.SenparcWeixinSetting.WxOpenAppId; private string appSecret = Config.SenparcWeixinSetting.WxOpenAppSecret; /// /// 为中间件提供生成当前类的委托 /// public static Func GenerateMessageHandler = (stream, postModel, maxRecordCount, serviceProvider) => new CustomWxOpenMessageHandler(stream, postModel, maxRecordCount, serviceProvider); public CustomWxOpenMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, IServiceProvider serviceProvider = null) : base(inputStream, postModel, maxRecordCount, serviceProvider: serviceProvider) { //这里设置仅用于测试,实际开发可以在外部更全局的地方设置, //比如MessageHandler.GlobalGlobalMessageContext.ExpireMinutes = 3。 GlobalMessageContext.ExpireMinutes = 3; if (!string.IsNullOrEmpty(postModel.AppId)) { appId = postModel.AppId;//通过第三方开放平台发送过来的请求 } //在指定条件下,不使用消息去重 base.OmitRepeatedMessageFunc = requestMessage => { var textRequestMessage = requestMessage as RequestMessageText; if (textRequestMessage != null && textRequestMessage.Content == "容错") { return false; } return true; }; } public override async Task OnExecutingAsync(CancellationToken cancellationToken) { //测试MessageContext.StorageData var 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); var currentMessageContext = await base.GetCurrentMessageContext(); currentMessageContext.StorageData = ((int)currentMessageContext.StorageData) + 1; } /// /// 小程序延后审核通知 /// /// /// public override async Task OnEvent_WeAppAuditDelayRequestAsync(RequestMessageEvent_WeAppAuditDelay requestMessage) { var wxService = base.ServiceProvider.GetService(); await wxService.UpdateMiniInfoAsync(requestMessage.ToUserName, 4, requestMessage.Reason, "", requestMessage.DelayTime); return await DefaultResponseMessageAsync(requestMessage); } /// /// 小程序审核成功通知 /// /// /// public override async Task OnEvent_WeAppAuditSuccessRequestAsync(RequestMessageEvent_WeAppAuditSuccess requestMessage) { var wxService = base.ServiceProvider.GetService(); await wxService.UpdateMiniInfoAsync(requestMessage.ToUserName, 0, "", "", requestMessage.SuccTime); return await DefaultResponseMessageAsync(requestMessage); } /// /// 小程序审核失败通知 /// /// /// public override async Task OnEvent_WeAppAuditFailRequestAsync(RequestMessageEvent_WeAppAuditFail requestMessage) { var wxService = base.ServiceProvider.GetService(); await wxService.UpdateMiniInfoAsync(requestMessage.ToUserName, 1, requestMessage.Reason, requestMessage.ScreenShot, requestMessage.FailTime); return await DefaultResponseMessageAsync(requestMessage); } public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { //所有没有被处理的消息会默认返回这里的结果 return new SuccessResponseMessage(); //return new SuccessResponseMessage();等效于: //base.TextResponseMessage = "success"; //return null; } /// /// 默认消息处理 /// /// /// public override async Task DefaultResponseMessageAsync(IRequestMessageBase requestMessage) { return await Task.FromResult(new SuccessResponseMessage()); } } }