public FinanceTransaction(long invoiceId, string transactionNumber, string userId, BankNameType bankName, string referenceId) { InvoiceId = invoiceId; TransactionNumber = transactionNumber; UserId = userId; ReferenceId = referenceId; BankName = bankName; }
public async Task <string> CreateReference(BankNameType bankName, string userId, long invoiceId) { string referenceId = ""; var invoiceNumber = (await UnitOfWork.InvoiceRepository.GetByIdAsync(invoiceId)).InvoiceNumber; var amount = await UnitOfWork.InvoiceRepository.GetInvoiceAmount(invoiceId); var transactionNumber = TokenGenerator.Generate(TokenType.Transaction); switch (bankName) { case BankNameType.Mellat: try { string result = ""; BypassCertificateError(); MellatBankService.PaymentGatewayClient bp = new MellatBankService.PaymentGatewayClient(); result = bp.bpPayRequest( Int64.Parse(MellatTerminalId), MellatUserName, MellatUserPassword, invoiceId, amount, SetDefaultDate(), SetDefaultTime(), $"Invoice #{invoiceNumber}", CallBackUrl, 0); string[] res = result.Split(','); if (res[0] == "0") { var financialTransaction = new FinanceTransaction(invoiceId, transactionNumber, userId, res[1]); UnitOfWork.FinanceTransactionRepository.Create(financialTransaction); await UnitOfWork.SaveAsync(); return(res[1]); } else { return(BankResultException(res[0], BankNameType.Mellat)); } } catch { return(BankResultException("", BankNameType.Mellat)); } //case BankNameType.Keshavarzi: // break; default: throw new ArgumentOutOfRangeException(nameof(bankName), bankName, null); } return(referenceId); }
private string BankResultException(string resCode, BankNameType bankName) { string result; switch (bankName) { case BankNameType.Mellat: result = GetMellatBankResCodeResponse(resCode); return(result); //case BankNameType.Keshavarzi: // result = GetKeshavarziBankResCodeResponse(resCode); // return result; default: throw new ArgumentOutOfRangeException(nameof(bankName), bankName, null); } }
public async Task <IHttpActionResult> CreateReferenceNumber(string invoiceNumber) { //create new transaction - set it to unpaid, set refId and send to bank var userId = User.Identity.GetUserId(); var invoice = (await _invoiceAppService.GetInvoiceByNumber(invoiceNumber)); var invoiceVerified = invoice.VerifyInvoice(); BankNameType bankNameType = ApplicationSettings.DefaultBankName; //if (bankName.IsPopulated()) // Enum.TryParse(bankName, out bankNameType); if (invoiceVerified) { var refId = await _bankAppService.CreateReference(bankNameType, userId, invoice.Id); return(Ok(refId)); } return(BadRequest("فاکتور انتخابی قابل پرداخت نیست")); }
public async Task <BankPaymentRequestResponseDto> CreateReference(BankNameType bankName, string userId, long invoiceId) { var invoice = (UnitOfWork.InvoiceRepository.GetByIdAsync(invoiceId)); var amount = UnitOfWork.InvoiceRepository.GetInvoiceAmount(invoiceId); var transactionNumber = TokenGenerator.Generate(TokenType.Transaction); switch (bankName) { case BankNameType.Mellat: try { string result = ""; BypassCertificateError(); PaymentGatewayClient bp = new PaymentGatewayClient(); result = bp.bpPayRequest( Int64.Parse(MellatTerminalId), MellatUserName, MellatUserPassword, invoiceId, amount, SetDefaultDate(), SetDefaultTime(), $"Invoice #{(await invoice).InvoiceNumber}", CallBackUrl, 0); string[] res = result.Split(','); if (res[0] == "0") { var financialTransaction = new FinanceTransaction(invoice.Id, transactionNumber, userId, BankNameType.Mellat, res[1]); UnitOfWork.FinanceTransactionRepository.Create(financialTransaction); await UnitOfWork.SaveAsync(); return(new BankPaymentRequestResponseDto() { BankName = BankNameType.Mellat, Response = res[1], PaymentRequestType = PaymentRequestType.RefId, PaymentRequestTypeTitle = "REFID", BankPaymentRequestUrl = MellatPgwSite }); } else { return(new BankPaymentRequestResponseDto() { HasError = true, Error = BankResultException(res[0], BankNameType.Mellat) }); } } catch { return(new BankPaymentRequestResponseDto() { HasError = true, Error = BankResultException("", BankNameType.Mellat) }); } case BankNameType.ZarinPal: var invoiceDto = (await invoice).MapTo <InvoiceDto>(); return(await GetZarinPalReferenceId(invoiceDto, amount, transactionNumber, userId, bankName)); //case BankNameType.Keshavarzi: // break; default: throw new ArgumentOutOfRangeException(nameof(bankName), bankName, null); } }
private async Task <BankPaymentRequestResponseDto> GetZarinPalReferenceId(InvoiceDto invoice, int invoiceAmount, string transactionNumber, string userId, BankNameType bankName) { try { System.Net.ServicePointManager.Expect100Continue = false; PaymentGatewayImplementationServicePortTypeClient zp = new PaymentGatewayImplementationServicePortTypeClient(); string authority; var callBackUrl = ApplicationSettings.FinancialSettings.ZarinPal.DefaultCallBackUrl; int status = zp.PaymentRequest( ApplicationSettingsHelper.AppSetting("ZarinPal.MerchantCode"), (int)invoiceAmount, $"Invoice #{invoice.InvoiceNumber}", ApplicationSettings.DefaultEmailAddress, ApplicationSettings.DefaultMobileNumber, callBackUrl, out authority); if (status == 100) { var authorityUrl = ZarinPalHelper.GetUrl(authority); var transaction = new FinanceTransaction(invoice.Id, transactionNumber, userId, bankName, authority); UnitOfWork.FinanceTransactionRepository.Create(transaction); await UnitOfWork.SaveAsync(); return(new BankPaymentRequestResponseDto() { Response = authorityUrl, PaymentRequestType = PaymentRequestType.Url, PaymentRequestTypeTitle = "URL" }); } else { return(new BankPaymentRequestResponseDto() { HasError = true, Error = BankResultException(status.ToString(), BankNameType.ZarinPal) }); } } catch { return(new BankPaymentRequestResponseDto() { HasError = true, Error = BankResultException("", BankNameType.ZarinPal) }); } }
public IHttpActionResult MakePayment(BankNameType bankNameType) { return(Ok()); }