MeiRiYiCheng_1_old/YBDevice.WX/MessageHandlers/WxOpenMessageHandler/CustomWxOpenMessageHandler.cs

129 lines
5.6 KiB
C#

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
{
/// <summary>
/// 微信公众号自定义MessageHandler
/// </summary>
public class CustomWxOpenMessageHandler : WxOpenMessageHandler<CustomWxOpenMessageContext>
{
private string appId = Config.SenparcWeixinSetting.WxOpenAppId;
private string appSecret = Config.SenparcWeixinSetting.WxOpenAppSecret;
/// <summary>
/// 为中间件提供生成当前类的委托
/// </summary>
public static Func<Stream, PostModel, int, IServiceProvider, CustomWxOpenMessageHandler> 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<MessageContext>.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;
}
/// <summary>
/// 小程序延后审核通知
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override async Task<IResponseMessageBase> OnEvent_WeAppAuditDelayRequestAsync(RequestMessageEvent_WeAppAuditDelay requestMessage)
{
var wxService = base.ServiceProvider.GetService<IWXService>();
await wxService.UpdateMiniInfoAsync(requestMessage.ToUserName, 4, requestMessage.Reason, "", requestMessage.DelayTime);
return await DefaultResponseMessageAsync(requestMessage);
}
/// <summary>
/// 小程序审核成功通知
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override async Task<IResponseMessageBase> OnEvent_WeAppAuditSuccessRequestAsync(RequestMessageEvent_WeAppAuditSuccess requestMessage)
{
var wxService = base.ServiceProvider.GetService<IWXService>();
await wxService.UpdateMiniInfoAsync(requestMessage.ToUserName, 0, "", "", requestMessage.SuccTime);
return await DefaultResponseMessageAsync(requestMessage);
}
/// <summary>
/// 小程序审核失败通知
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override async Task<IResponseMessageBase> OnEvent_WeAppAuditFailRequestAsync(RequestMessageEvent_WeAppAuditFail requestMessage)
{
var wxService = base.ServiceProvider.GetService<IWXService>();
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;
}
/// <summary>
/// 默认消息处理
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override async Task<IResponseMessageBase> DefaultResponseMessageAsync(IRequestMessageBase requestMessage)
{
return await Task.FromResult(new SuccessResponseMessage());
}
}
}