Files
tiku-backend.net/Tiku.Infrastructure/Commerce/PaymentProviderGateway.cs
xiong c497a3ca8d
Some checks failed
ci / release-gate (push) Has been cancelled
清理代码
2026-08-03 12:31:39 +08:00

45 lines
1.7 KiB
C#

using Tiku.Application.Commerce;
namespace Tiku.Infrastructure.Commerce;
internal sealed class PaymentProviderGateway(
IEnumerable<IPaymentProvider> providers,
IPaymentProviderConfigService configService) : IPaymentProviderGateway
{
public async Task<CreatePaymentProviderResult> CreatePaymentAsync(
string provider,
CreatePaymentProviderRequest request,
CancellationToken cancellationToken = default)
{
var resolvedProvider = ResolveProvider(provider);
var account = await configService.GetActiveAccountAsync(
request.TenantId,
resolvedProvider.Provider,
cancellationToken);
return await resolvedProvider.CreatePaymentAsync(account, request, cancellationToken);
}
public async Task<PaymentNotificationResult> ParsePaymentNotificationAsync(
string provider,
PaymentNotificationRequest request,
CancellationToken cancellationToken = default)
{
var resolvedProvider = ResolveProvider(provider);
var account = await configService.GetActiveAccountAsync(
request.TenantId,
resolvedProvider.Provider,
cancellationToken);
return await resolvedProvider.ParsePaymentNotificationAsync(account, request, cancellationToken);
}
private IPaymentProvider ResolveProvider(string provider)
{
var normalized = provider.Trim().ToLowerInvariant().Replace("-", "_", StringComparison.Ordinal);
return providers.FirstOrDefault(item => item.Provider == normalized)
?? throw new PaymentProviderException(
"Payment provider is not supported.",
"payment_provider_not_supported");
}
}