62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
using System.Text.Json;
|
|
using Tiku.Application.Commerce;
|
|
|
|
namespace Tiku.Infrastructure.Commerce;
|
|
|
|
internal sealed class ManualPaymentProvider : IPaymentProvider
|
|
{
|
|
public string Provider => PaymentProviders.Manual;
|
|
|
|
public Task<CreatePaymentProviderResult> CreatePaymentAsync(
|
|
PaymentProviderAccount account,
|
|
CreatePaymentProviderRequest request,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
var payload = JsonSerializer.SerializeToElement(new
|
|
{
|
|
request.OrderNo,
|
|
request.AmountCents,
|
|
request.Subject,
|
|
Message = "manual_payment_requires_tenant_admin_confirmation"
|
|
});
|
|
|
|
return Task.FromResult(new CreatePaymentProviderResult(
|
|
Provider,
|
|
request.Method,
|
|
"pending",
|
|
null,
|
|
payload,
|
|
payload));
|
|
}
|
|
|
|
public Task<PaymentNotificationResult> ParsePaymentNotificationAsync(
|
|
PaymentProviderAccount account,
|
|
PaymentNotificationRequest request,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
throw new PaymentProviderException(
|
|
"Manual payment does not accept provider notifications.",
|
|
"manual_payment_notification_not_supported");
|
|
}
|
|
|
|
public Task<CreateRefundProviderResult> CreateRefundAsync(
|
|
PaymentProviderAccount account,
|
|
CreateRefundProviderRequest request,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
var payload = JsonSerializer.SerializeToElement(new
|
|
{
|
|
request.OrderNo,
|
|
request.RefundNo,
|
|
request.AmountCents,
|
|
request.Reason
|
|
});
|
|
return Task.FromResult(new CreateRefundProviderResult(
|
|
Provider,
|
|
true,
|
|
$"manual-{request.RefundNo}",
|
|
payload));
|
|
}
|
|
}
|