using Aop.Api.Domain;
|
using ApiTools.Core;
|
using log4net.Core;
|
using MediatR;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.Extensions.Logging;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace ApiTools.Application
|
{
|
public class WxmpSubscribMessageCommandHandler(
|
ILogger<WxmpSubscribMessageCommandHandler> logger,
|
WxmpUtils utils,
|
IHttpContextAccessor httpContextAccessor
|
) :
|
IRequestHandler<WxmpSendSubscribMessageCommand, Guid>,
|
IRequestHandler<WxmpSubscribMessageNotifyCommand, bool>
|
{
|
private readonly ILogger<WxmpSubscribMessageCommandHandler> logger = logger;
|
private readonly WxmpUtils utils = utils;
|
private readonly IHttpContextAccessor httpContextAccessor = httpContextAccessor;
|
|
/// <summary>
|
/// 微信小程序发送订阅消息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<Guid> Handle(WxmpSendSubscribMessageCommand request, CancellationToken cancellationToken)
|
{
|
await utils.WxmpSendSubscribMessage(new WxmpSendSubscribMessageRequest
|
{
|
Data = request.Data,
|
TemplateId = request.Template.ToString(),
|
Page = request.Page,
|
WxmpCode = request.WxmpCode,
|
Touser = request.Touser,
|
});
|
return Guid.Empty;
|
}
|
|
/// <summary>
|
/// 微信小程序订阅消息通知
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<bool> Handle(WxmpSubscribMessageNotifyCommand request, CancellationToken cancellationToken)
|
{
|
var req = httpContextAccessor.HttpContext.Request;
|
logger.LogInformation($"微信小程序订阅消息通知query:{req.QueryString.Value}");
|
|
req.EnableBuffering();
|
req.Body.Position = 0;
|
using var reader = new StreamReader(req.Body, Encoding.UTF8, leaveOpen: true);
|
var body = await reader.ReadToEndAsync();
|
logger.LogInformation($"微信小程序订阅消息通知body:{body}");
|
req.Body.Position = 0;
|
return true;
|
}
|
}
|
}
|