DotNetCore.SKIT.FlurlHttpCl.../samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Controllers/WxpayNotifyController.cs

63 lines
2.3 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;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
{
[ApiController]
[Route("notify")]
public class WxpayNotifyController : ControllerBase
{
private readonly ILogger _logger;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _wechatTenpayHttpClientFactory;
public WxpayNotifyController(
ILoggerFactory loggerFactory,
Services.HttpClients.IWechatTenpayHttpClientFactory wechatTenpayHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatTenpayHttpClientFactory = wechatTenpayHttpClientFactory;
}
[HttpPost]
[Route("m-{merchant_id}/message-push")]
public async Task<IActionResult> ReceiveMessage(
[FromRoute(Name = "merchant_id")] string merchantId,
[FromHeader(Name = "Wechatpay-Timestamp")] string timestamp,
[FromHeader(Name = "Wechatpay-Nonce")] string nonce,
[FromHeader(Name = "Wechatpay-Signature")] string signature,
[FromHeader(Name = "Wechatpay-Serial")] string serialNumber)
{
// 接收服务器推送
// 文档https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_2.shtml
using var reader = new StreamReader(Request.Body, Encoding.UTF8);
string content = await reader.ReadToEndAsync();
_logger.LogInformation("接收到微信支付推送的数据:{0}", content);
var client = _wechatTenpayHttpClientFactory.Create(merchantId);
bool valid = client.VerifyEventSignature(
callbackTimestamp: timestamp,
callbackNonce: nonce,
callbackBody: content,
callbackSignature: signature,
callbackSerialNumber: serialNumber
);
if (!valid)
{
return new JsonResult(new { code = "FAIL", message = "验签失败" });
}
return new JsonResult(new { code = "SUCCESS", message = "成功" });
}
}
}