diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/FuwuhaoService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/FuwuhaoService.cs new file mode 100644 index 00000000..40054d7e --- /dev/null +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/FuwuhaoService.cs @@ -0,0 +1,67 @@ +using System.Text; +using System.Text.Json; +using System.Xml.Serialization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Volo.Abp.Application.Services; + +namespace Yi.Framework.AiHub.Application.Services; + +/// +/// 服务号服务 +/// +public class FuwuhaoService : ApplicationService +{ + private readonly ILogger _logger; + private readonly IHttpContextAccessor _accessor; + + public FuwuhaoService(ILogger logger, IHttpContextAccessor accessor) + { + _logger = logger; + _accessor = accessor; + } + + /// + /// 查询已登录的账户信息 + /// + /// + [HttpGet("fuwuhao/callback")] + public async Task GetCallbackAsync([FromQuery] string signature, [FromQuery] string timestamp, + [FromQuery] string nonce, [FromQuery] string echostr) + { + + return echostr; + } + + [HttpPost("fuwuhao/callback")] + public async Task PostCallbackAsync([FromQuery] string signature, [FromQuery] string timestamp, + [FromQuery] string nonce) + { + var request = _accessor.HttpContext.Request; + // 1. 读取原始 XML 内容 + using var reader = new StreamReader(request.Body, Encoding.UTF8); + var xmlString = await reader.ReadToEndAsync(); + + var serializer = new XmlSerializer(typeof(FuwuhaoCallModel)); + using var stringReader = new StringReader(xmlString); + var body = (FuwuhaoCallModel)serializer.Deserialize(stringReader); + _logger.LogError("服务号Post回调通知:" + JsonSerializer.Serialize(body, new JsonSerializerOptions() + { + WriteIndented = true + })); + return "success"; + } +} + +[XmlRoot("xml")] +public class FuwuhaoCallModel +{ + [XmlElement("ToUserName")] public string ToUserName { get; set; } + [XmlElement("FromUserName")] public string FromUserName { get; set; } + [XmlElement("CreateTime")] public string CreateTime { get; set; } + [XmlElement("MsgType")] public string MsgType { get; set; } + [XmlElement("Event")] public string Event { get; set; } + [XmlElement("EventKey")] public string EventKey { get; set; } + [XmlElement("Ticket")] public string Ticket { get; set; } +} \ No newline at end of file