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);
        }
Beispiel #2
0
        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)
                });
            }
        }
Beispiel #3
0
        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);
            }
        }