namespace CMSMicroservice.Application.Common.Interfaces;
///
/// Interface برای یکپارچهسازی با درگاههای پرداخت
///
public interface IPaymentGatewayService
{
///
/// شروع تراکنش پرداخت (ارسال به درگاه)
///
/// اطلاعات تراکنش
///
/// URL درگاه برای هدایت کاربر + RefId تراکنش
Task InitiatePaymentAsync(
PaymentRequest request,
CancellationToken cancellationToken = default);
///
/// تأیید پرداخت (بعد از بازگشت از درگاه)
///
/// شماره مرجع تراکنش
/// توکن تأیید از درگاه
///
/// وضعیت نهایی تراکنش
Task VerifyPaymentAsync(
string refId,
string verificationToken,
CancellationToken cancellationToken = default);
///
/// تأیید پرداخت با مبلغ — برای درگاههایی مثل زرینپال که مبلغ را در Verify نیاز دارند
///
/// شماره مرجع تراکنش (Authority در زرینپال)
/// توکن تأیید از درگاه (Status در زرینپال)
/// مبلغ تراکنش به تومان
///
/// وضعیت نهایی تراکنش
Task VerifyPaymentAsync(
string refId,
string verificationToken,
decimal amountInToman,
CancellationToken cancellationToken = default)
{
// پیشفرض: درگاههایی که Amount نمیخواهند، از overload بدون amount استفاده کنند
return VerifyPaymentAsync(refId, verificationToken, cancellationToken);
}
///
/// واریز مبلغ به حساب کاربر (برداشت از کیف پول)
///
/// اطلاعات واریز
///
/// وضعیت واریز
Task ProcessPayoutAsync(
PayoutRequest request,
CancellationToken cancellationToken = default);
}
///
/// درخواست شروع تراکنش پرداخت
///
public class PaymentRequest
{
///
/// مبلغ (تومان)
///
public decimal Amount { get; set; }
///
/// شناسه کاربر
///
public long UserId { get; set; }
///
/// شماره موبایل
///
public string Mobile { get; set; } = string.Empty;
///
/// شرح تراکنش
///
public string Description { get; set; } = string.Empty;
///
/// URL بازگشت بعد از پرداخت
///
public string CallbackUrl { get; set; } = string.Empty;
}
///
/// نتیجه شروع تراکنش
///
public class PaymentInitiateResult
{
///
/// موفق بودن درخواست
///
public bool IsSuccess { get; set; }
///
/// شماره مرجع تراکنش (RefId)
///
public string? RefId { get; set; }
///
/// URL درگاه برای هدایت کاربر
///
public string? GatewayUrl { get; set; }
///
/// پیام خطا (در صورت ناموفق بودن)
///
public string? ErrorMessage { get; set; }
}
///
/// نتیجه تأیید تراکنش
///
public class PaymentVerificationResult
{
///
/// موفق بودن تراکنش
///
public bool IsSuccess { get; set; }
///
/// شماره مرجع تراکنش
///
public string RefId { get; set; } = string.Empty;
///
/// کد پیگیری بانک
///
public string? TrackingCode { get; set; }
///
/// مبلغ تراکنش
///
public decimal Amount { get; set; }
///
/// پیام
///
public string? Message { get; set; }
}
///
/// درخواست واریز
///
public class PayoutRequest
{
///
/// مبلغ (تومان)
///
public decimal Amount { get; set; }
///
/// شناسه کاربر
///
public long UserId { get; set; }
///
/// شماره شبا
///
public string Iban { get; set; } = string.Empty;
///
/// نام صاحب حساب
///
public string AccountHolderName { get; set; } = string.Empty;
///
/// شرح واریز
///
public string Description { get; set; } = string.Empty;
///
/// شماره مرجع داخلی
///
public string InternalRefId { get; set; } = string.Empty;
}
///
/// نتیجه واریز
///
public class PayoutResult
{
///
/// موفق بودن واریز
///
public bool IsSuccess { get; set; }
///
/// شماره مرجع تراکنش بانکی
///
public string? BankRefId { get; set; }
///
/// کد پیگیری
///
public string? TrackingCode { get; set; }
///
/// پیام
///
public string? Message { get; set; }
///
/// زمان پردازش
///
public DateTime ProcessedAt { get; set; }
}