DotNetCore.SKIT.FlurlHttpCl.../samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net6/Controllers/WechatNotifyController.cs

83 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
{
using SKIT.FlurlHttpClient.Wechat.Api.Events;
[ApiController]
[Route("api/notify")]
public class WechatNotifyController : ControllerBase
{
private readonly ILogger _logger;
private readonly Services.HttpClients.IWechatApiHttpClientFactory _wechatApiHttpClientFactory;
public WechatNotifyController(
ILoggerFactory loggerFactory,
Services.HttpClients.IWechatApiHttpClientFactory wechatApiHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatApiHttpClientFactory = wechatApiHttpClientFactory;
}
[HttpGet]
[Route("a-{app_id}/message-push")]
public IActionResult VerifyMessage(
[FromRoute(Name = "app_id")] string appId,
[FromQuery(Name = "timestamp")] string timestamp,
[FromQuery(Name = "nonce")] string nonce,
[FromQuery(Name = "signature")] string signature,
[FromQuery(Name = "echostr")] string echoString)
{
// 验证服务器推送
// 文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
var client = _wechatApiHttpClientFactory.Create(appId);
bool valid = client.VerifyEventSignatureForEcho(callbackTimestamp: timestamp, callbackNonce: nonce, callbackSignature: signature);
if (!valid)
{
return Content("fail");
}
return Content(echoString);
}
[HttpPost]
[Route("a-{app_id}/message-push")]
public async Task<IActionResult> ReceiveMessage(
[FromRoute(Name = "app_id")] string appId)
{
// 接收服务器推送
// 文档https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
using var reader = new StreamReader(Request.Body, Encoding.UTF8);
string content = await reader.ReadToEndAsync();
_logger.LogInformation("接收到微信推送的数据:{0}", content);
var client = _wechatApiHttpClientFactory.Create(appId);
var msgType = client.DeserializeEventFromXml(content).MessageType;
switch (msgType)
{
case "text":
{
var eventModel = client.DeserializeEventFromXml<TextMessageEvent>(content);
// Do Something
}
break;
case "image":
{
var eventModel = client.DeserializeEventFromXml<ImageMessageEvent>(content);
// Do Something
}
break;
}
return Content("success");
}
}
}