129 lines
5.6 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|