demo(tenpayv3): clean code

This commit is contained in:
Fu Diwei 2021-12-04 16:11:49 +08:00
parent c00ce7be84
commit df656663c7
8 changed files with 54 additions and 56 deletions

View File

@ -8,18 +8,17 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
{
[ApiController]
[Route("notify")]
public class WxpayNotifyController : ControllerBase
public class TenpayNotifyController : ControllerBase
{
private readonly ILogger _logger;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _tenpayHttpClientFactory;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _wechatTenpayHttpClientFactory;
public WxpayNotifyController(
public TenpayNotifyController(
ILoggerFactory loggerFactory,
Services.HttpClients.IWechatTenpayHttpClientFactory wechatTenpayHttpClientFactory)
Services.HttpClients.IWechatTenpayHttpClientFactory tenpayHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatTenpayHttpClientFactory = wechatTenpayHttpClientFactory;
_tenpayHttpClientFactory = tenpayHttpClientFactory;
}
@ -39,7 +38,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
string content = await reader.ReadToEndAsync();
_logger.LogInformation("接收到微信支付推送的数据:{0}", content);
var client = _wechatTenpayHttpClientFactory.Create(merchantId);
var client = _tenpayHttpClientFactory.Create(merchantId);
bool valid = client.VerifyEventSignature(
callbackTimestamp: timestamp,
callbackNonce: nonce,

View File

@ -14,22 +14,20 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
{
[ApiController]
[Route("order")]
public class WxpayOrderController : ControllerBase
public class TenpayOrderController : ControllerBase
{
private readonly ILogger _logger;
private readonly Options.TenpayOptions _tenpayOptions;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _tenpayHttpClientFactory;
private readonly Options.WxpayOptions _wxpayOptions;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _wechatTenpayHttpClientFactory;
public WxpayOrderController(
public TenpayOrderController(
ILoggerFactory loggerFactory,
IOptions<Options.WxpayOptions> wxpayOptions,
Services.HttpClients.IWechatTenpayHttpClientFactory wechatTenpayHttpClientFactory)
IOptions<Options.TenpayOptions> tenpayOptions,
Services.HttpClients.IWechatTenpayHttpClientFactory tenpayHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wxpayOptions = wxpayOptions.Value;
_wechatTenpayHttpClientFactory = wechatTenpayHttpClientFactory;
_tenpayOptions = tenpayOptions.Value;
_tenpayHttpClientFactory = tenpayHttpClientFactory;
}
[HttpPost]
@ -39,13 +37,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
// JSAPI 下单
// 文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml
var client = _wechatTenpayHttpClientFactory.Create(requestModel.MerchantId);
var client = _tenpayHttpClientFactory.Create(requestModel.MerchantId);
var request = new CreatePayTransactionJsapiRequest()
{
OutTradeNumber = "SAMPLE_OTN_" + DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
AppId = requestModel.AppId,
Description = "演示订单",
NotifyUrl = _wxpayOptions.CallbackUrl,
NotifyUrl = _tenpayOptions.NotifyUrl,
Amount = new CreatePayTransactionJsapiRequest.Types.Amount() { Total = requestModel.Amount },
Payer = new CreatePayTransactionJsapiRequest.Types.Payer() { OpenId = requestModel.OpenId }
};

View File

@ -14,22 +14,20 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
{
[ApiController]
[Route("refund")]
public class WxpayRefundController : ControllerBase
public class TenpayRefundController : ControllerBase
{
private readonly ILogger _logger;
private readonly Options.TenpayOptions _tenpayOptions;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _tenpayHttpClientFactory;
private readonly Options.WxpayOptions _wxpayOptions;
private readonly Services.HttpClients.IWechatTenpayHttpClientFactory _wechatTenpayHttpClientFactory;
public WxpayRefundController(
public TenpayRefundController(
ILoggerFactory loggerFactory,
IOptions<Options.WxpayOptions> wxpayOptions,
Services.HttpClients.IWechatTenpayHttpClientFactory wechatTenpayHttpClientFactory)
IOptions<Options.TenpayOptions> tenpayOptions,
Services.HttpClients.IWechatTenpayHttpClientFactory tenpayHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wxpayOptions = wxpayOptions.Value;
_wechatTenpayHttpClientFactory = wechatTenpayHttpClientFactory;
_tenpayOptions = tenpayOptions.Value;
_tenpayHttpClientFactory = tenpayHttpClientFactory;
}
[HttpPost]
@ -39,7 +37,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
// 申请退款
// 文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_9.shtml
var client = _wechatTenpayHttpClientFactory.Create(requestModel.MerchantId);
var client = _tenpayHttpClientFactory.Create(requestModel.MerchantId);
var request = new CreateRefundDomesticRefundRequest()
{
TransactionId = requestModel.TransactionId,
@ -50,7 +48,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Controllers
Refund = requestModel.RefundAmount
},
Reason = "示例退款",
NotifyUrl = _wxpayOptions.CallbackUrl
NotifyUrl = _tenpayOptions.NotifyUrl
};
var response = await client.ExecuteCreateRefundDomesticRefundAsync(request, cancellationToken: HttpContext.RequestAborted);
if (!response.IsSuccessful())

View File

@ -6,16 +6,16 @@ using Microsoft.Extensions.Options;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Options
{
public partial class WxpayOptions : IOptions<WxpayOptions>
public partial class TenpayOptions : IOptions<TenpayOptions>
{
WxpayOptions IOptions<WxpayOptions>.Value => this;
TenpayOptions IOptions<TenpayOptions>.Value => this;
public WechatMerchant[] Merchants { get; set; } = Array.Empty<WechatMerchant>();
public string CallbackUrl { get; set; } = string.Empty;
public string NotifyUrl { get; set; } = string.Empty;
}
partial class WxpayOptions
partial class TenpayOptions
{
public class WechatMerchant
{

View File

@ -10,30 +10,30 @@ using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.BackgroundServices
{
class WxpayCertificateRefreshingBackgroundService : BackgroundService
class TenpayCertificateRefreshingBackgroundService : BackgroundService
{
private readonly ILogger _logger;
private readonly Options.WxpayOptions _wxpayOptions;
private readonly CertificateManager _certificateManager;
private readonly HttpClients.IWechatTenpayHttpClientFactory _wechatTenpayHttpClientFactory;
private readonly Options.TenpayOptions _tenpayOptions;
private readonly CertificateManager _tenpayCertificateManager;
private readonly HttpClients.IWechatTenpayHttpClientFactory _tenpayHttpClientFactory;
public WxpayCertificateRefreshingBackgroundService(
public TenpayCertificateRefreshingBackgroundService(
ILoggerFactory loggerFactory,
IOptions<Options.WxpayOptions> wxpayOptions,
CertificateManager certificateManager,
HttpClients.IWechatTenpayHttpClientFactory wechatTenpayHttpClientFactory)
IOptions<Options.TenpayOptions> tenpayOptions,
CertificateManager tenpayCertificateManager,
HttpClients.IWechatTenpayHttpClientFactory tenpayHttpClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wxpayOptions = wxpayOptions.Value;
_certificateManager = certificateManager;
_wechatTenpayHttpClientFactory = wechatTenpayHttpClientFactory;
_tenpayOptions = tenpayOptions.Value;
_tenpayCertificateManager = tenpayCertificateManager;
_tenpayHttpClientFactory = tenpayHttpClientFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var wxpayMerchant = _wxpayOptions.Merchants.FirstOrDefault();
var wxpayMerchant = _tenpayOptions.Merchants.FirstOrDefault();
if (wxpayMerchant == null)
{
_logger.LogWarning("未找到微信商户配置项。");
@ -42,7 +42,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.BackgroundSe
try
{
var client = _wechatTenpayHttpClientFactory.Create(wxpayMerchant.MerchantId);
var client = _tenpayHttpClientFactory.Create(wxpayMerchant.MerchantId);
var request = new QueryCertificatesRequest();
var response = await client.ExecuteQueryCertificatesAsync(request, cancellationToken: stoppingToken);
if (response.IsSuccessful())
@ -52,7 +52,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.BackgroundSe
foreach (var certificateModel in response.CertificateList)
{
_certificateManager.AddEntry(new CertificateEntry(certificateModel));
_tenpayCertificateManager.AddEntry(new CertificateEntry(certificateModel));
}
_logger.LogInformation("刷新微信商户平台证书成功。");

View File

@ -12,12 +12,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients.
partial class WechatTenpayHttpClientFactory : IWechatTenpayHttpClientFactory
{
private readonly System.Net.Http.IHttpClientFactory _httpClientFactory;
private readonly Options.WxpayOptions _wechatOptions;
private readonly Options.TenpayOptions _wechatOptions;
private readonly CertificateManager _certificateManager;
public WechatTenpayHttpClientFactory(
System.Net.Http.IHttpClientFactory httpClientFactory,
IOptions<Options.WxpayOptions> wechatOptions,
IOptions<Options.TenpayOptions> wechatOptions,
CertificateManager certificateManager)
{
_httpClientFactory = httpClientFactory;

View File

@ -27,7 +27,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5
// 注入配置项
services.AddOptions();
services.Configure<Options.WxpayOptions>(Configuration.GetSection(nameof(Options.WxpayOptions)));
services.Configure<Options.TenpayOptions>(Configuration.GetSection(nameof(Options.TenpayOptions)));
// 注入工厂 HTTP 客户端
services.AddHttpClient();
@ -35,7 +35,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5
services.AddSingleton<Services.HttpClients.IWechatTenpayHttpClientFactory, Services.HttpClients.Implements.WechatTenpayHttpClientFactory>();
// 注入后台任务
services.AddHostedService<Services.BackgroundServices.WxpayCertificateRefreshingBackgroundService>();
services.AddHostedService<Services.BackgroundServices.TenpayCertificateRefreshingBackgroundService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

View File

@ -9,12 +9,15 @@
"AllowedHosts": "*",
"WxpayOptions": {
"TenpayOptions": {
"Merchants": [
{
"MerchantId": "填写商户号"
"MerchantId": "填写商户号",
"SecretV3": "填写 V3 API 密钥",
"CertSerialNumber": "填写商户证书序列号",
"CertPrivateKey": "填写商户证书文件内容"
}
],
"CallbackEntry": "https://localhost:5001"
"NotifyUrl": "https://localhost:5001"
}
}