Introduced the SepehrPaymentGateway to replace the previous payment gateway, AqayePardakht. Added `Rrn` and `DigitalReceipt` columns to the `PaymentTransactions` table for improved payment tracking and verification. Updated the Entity Framework model and mappings to reflect these changes. Refactored payment transaction logic to support the new gateway, including creating, verifying, and handling payments. Added new request/response models for Sepehr gateway integration. Enhanced error handling and financial statement creation upon successful payment verification. Removed legacy code and updated dependency injection for the Parbad library.
108 lines
4.3 KiB
C#
108 lines
4.3 KiB
C#
using _0_Framework.Application;
|
|
using _0_Framework.Application.PaymentGateway;
|
|
using CompanyManagment.App.Contracts.FinancialStatment;
|
|
using CompanyManagment.App.Contracts.FinancilTransaction;
|
|
using CompanyManagment.App.Contracts.PaymentTransaction;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Options;
|
|
using ServiceHost.BaseControllers;
|
|
|
|
namespace ServiceHost.Areas.Client.Controllers;
|
|
|
|
public record CreateFinancialPayRequest(long Id, string BaseUrl);
|
|
public class FinancialController : ClientBaseController
|
|
{
|
|
private readonly IFinancialStatmentApplication _financialStatementApplication;
|
|
private readonly IAuthHelper _authHelper;
|
|
private readonly IPaymentGateway _paymentGateway;
|
|
private readonly IPaymentTransactionApplication _paymentTransactionApplication;
|
|
|
|
public FinancialController(IFinancialStatmentApplication financialStatementApplication, IAuthHelper authHelper,IHttpClientFactory httpClientFactory, IPaymentTransactionApplication paymentTransactionApplication,IOptions<AppSettingConfiguration> appSetting)
|
|
{
|
|
_financialStatementApplication = financialStatementApplication;
|
|
_authHelper = authHelper;
|
|
_paymentTransactionApplication = paymentTransactionApplication;
|
|
_paymentGateway = new AqayePardakhtPaymentGateway(httpClientFactory, appSetting);
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<ActionResult<ClientFinancialStatementViewModel>> GetList(FinancialStatementSearchModel searchModel)
|
|
{
|
|
var accountId = _authHelper.CurrentAccountId();
|
|
var result =await _financialStatementApplication.GetClientFinancialStatement(searchModel,accountId);
|
|
return result;
|
|
}
|
|
|
|
[AllowAnonymous]
|
|
[HttpPost("preview/{id}")]
|
|
public async Task<ActionResult<OperationResult<ClientFinancialStatementViewModel>>> GetStatementDetails(string id)
|
|
{
|
|
if(!Guid.TryParseExact(id,"N",out _))
|
|
return new OperationResult<ClientFinancialStatementViewModel>().Failed("شناسه ارسال شده نامعتبر است");
|
|
|
|
var result = await _financialStatementApplication.GetDetailsByPublicId(id);
|
|
return result;
|
|
}
|
|
/// <summary>
|
|
/// ساخت
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="baseUrl"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("CreatePay")]
|
|
[AllowAnonymous]
|
|
public async Task<ActionResult<OperationResult<string>>> CreatePay([FromForm] CreateFinancialPayRequest request, CancellationToken cancellationToken)
|
|
{
|
|
var op = new OperationResult<string>();
|
|
var balanceAmount = await _financialStatementApplication.GetBalanceAmount(request.Id);
|
|
if (balanceAmount.Amount<=0)
|
|
{
|
|
return op.Failed("موجودی حساب شما صفر است");
|
|
}
|
|
|
|
var callbackUrl = Url.Action(
|
|
action: "OnGetCallBack",
|
|
controller: "General", // نام کنترلر بدون کلمهی "Controller"
|
|
values: null,
|
|
protocol: Request.Scheme); // http یا https
|
|
|
|
var transactionCommand = new CreatePaymentTransaction()
|
|
{
|
|
Amount = balanceAmount.Amount,
|
|
ContractingPartyId = balanceAmount.ContractingPartyId,
|
|
CallBackUrl = request.BaseUrl
|
|
};
|
|
|
|
var transaction = await _paymentTransactionApplication.Create(transactionCommand);
|
|
|
|
if (!transaction.IsSuccedded)
|
|
{
|
|
return op.Failed(transaction.Message);
|
|
}
|
|
|
|
var command = new CreatePaymentGatewayRequest()
|
|
{
|
|
CallBackUrl = callbackUrl,
|
|
Amount = balanceAmount.Amount/10,
|
|
InvoiceId = transaction.SendId.ToString(),
|
|
};
|
|
|
|
var gatewayResponse = await _paymentGateway.Create(command, cancellationToken);
|
|
|
|
if (gatewayResponse.IsSuccess)
|
|
{
|
|
_ = await _paymentTransactionApplication.SetTransactionId(transaction.SendId, gatewayResponse.Token);
|
|
return Redirect(_paymentGateway.GetStartPayUrl(gatewayResponse.Token));
|
|
}
|
|
|
|
if (gatewayResponse.ErrorCode.HasValue)
|
|
{
|
|
return op.Failed($"خطا در ایجاد درگاه پرداخت: {gatewayResponse.ErrorCode.Value}");
|
|
}
|
|
|
|
return op.Failed("خطا در ایجاد درگاه پرداخت");
|
|
|
|
}
|
|
} |