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; } /// /// شماره کارت ماسک‌شده (مثلاً 6037-****-****-1234) /// public string? CardPan { get; set; } /// /// هش کارت بانکی /// public string? CardHash { get; set; } /// /// کد وضعیت verify از درگاه (100=موفق، 101=تکراری) /// public int? VerificationCode { 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; } }