public virtual SubmitTransactionResult SubmitTransaction(SubmitTransactionParameter parameter)
        {
            TransactionalClient     transactionalClient = new TransactionalClient();
            TokensClient            tokenClient         = new TokensClient();
            SubmitTransactionResult result = new SubmitTransactionResult();

            if (parameter.PaymentProfileId != null)
            {
                UseTokenRequest  cardRequest = this.GetCardRequestForToken(parameter);
                UseTokenResponse reply1      = tokenClient.UseToken(cardRequest);
                result.Success        = reply1.Result == 0;
                result.ResponseNumber = reply1.AuthorizationNumber ?? string.Empty;
                result.ResponseToken  = parameter.PaymentProfileId + "|" + reply1.ReferenceNumber ?? string.Empty;

                if (!result.Success)
                {
                    result.ResponseMessages.Add(string.Format("Transaction Failed: {0} Reference: {1}", reply1.Message, reply1.ReferenceNumber));
                }
            }
            else
            {
                //  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;//BUSA-669 : change Protocol to TLS v1.2 in CenPos calls

                ProcessCreditCardResponse reply = transactionalClient.ProcessCreditCard(this.GetCardRequest(parameter));
                result.Success        = reply.Result == 0;
                result.ResponseNumber = reply.AutorizationNumber ?? string.Empty;
                result.ResponseToken  = ((ProcessRecurringSaleResponse)reply).RecurringSaleTokenId + "|" + reply.ReferenceNumber ?? string.Empty;
                this.recurringToken   = ((ProcessRecurringSaleResponse)reply).RecurringSaleTokenId;
                if (!result.Success)
                {
                    result.ResponseMessages.Add(string.Format("Transaction Failed: {0} Reference: {1}", reply.Message, reply.ReferenceNumber));
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        private AddPaymentTransactionResult ResendTransaction(SubmitTransactionParameter submitTransactionParameter)
        {
            SubmitTransactionParameter transactionParameter = new SubmitTransactionParameter()
            {
                TransactionType       = submitTransactionParameter.TransactionType,
                ReferenceNumber       = submitTransactionParameter.ReferenceNumber,
                OriginalRequestNumber = submitTransactionParameter.OriginalRequestNumber,
                OriginalRequestToken  = submitTransactionParameter.OriginalRequestToken,
                Amount              = submitTransactionParameter.Amount,
                WebsiteId           = submitTransactionParameter.WebsiteId,
                IsResentTransaction = true
            };
            CreditCardTransaction   creditCardTransaction   = this.CreateCreditCardTransaction(transactionParameter);
            SubmitTransactionResult submitTransactionResult = this.GetPaymentGateway().SubmitTransaction(transactionParameter);

            this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult);
            if (!submitTransactionResult.Success)
            {
                return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.CreditCardFailed, string.Join(Environment.NewLine, (IEnumerable <string>)submitTransactionResult.ResponseMessages)));
            }
            return(new AddPaymentTransactionResult()
            {
                CreditCardTransaction = this.UpdateCreditCardTransaction(creditCardTransaction, submitTransactionParameter, submitTransactionResult)
            });
        }
Ejemplo n.º 3
0
        private AddPaymentTransactionResult SubmitReferenceTransaction(AddPaymentTransactionParameter parameter)
        {
            if (parameter.OriginalRequestNumber.IsBlank() || parameter.OriginalRequestToken.IsBlank())
            {
                return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.CreditCardFailed, "Original Request Number and Original Reference Number required"));
            }
            SubmitTransactionParameter transactionParameter = new SubmitTransactionParameter()
            {
                TransactionType       = parameter.TransactionType,
                ReferenceNumber       = parameter.ReferenceNumber,
                OriginalRequestNumber = parameter.OriginalRequestNumber,
                OriginalRequestToken  = parameter.OriginalRequestToken,
                Amount    = parameter.Amount,
                WebsiteId = parameter.WebsiteId
            };
            CreditCardTransaction creditCardTransaction = this.CreateCreditCardTransaction(transactionParameter);

            transactionParameter.CreditCardTransactionId = new Guid?(creditCardTransaction.Id);
            SubmitTransactionResult submitTransactionResult = this.GetPaymentGateway().SubmitTransaction(transactionParameter);

            if (!submitTransactionResult.Success)
            {
                this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult);
                if (submitTransactionResult.IsConnectionError)
                {
                    return(this.ResendTransaction(transactionParameter));
                }
                return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.CreditCardFailed, string.Join(Environment.NewLine, (IEnumerable <string>)submitTransactionResult.ResponseMessages)));
            }
            return(new AddPaymentTransactionResult()
            {
                CreditCardTransaction = this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult)
            });
        }
Ejemplo n.º 4
0
 private string GetAvsAddr(SubmitTransactionParameter submitTransactionParameter)
 {
     if (submitTransactionParameter.BillToAddress == null)
     {
         return(string.Empty);
     }
     return(string.Format("{0} | {1} | {2} | {3} | {4}", (object)submitTransactionParameter.BillToAddress.Address1, (object)submitTransactionParameter.BillToAddress.Address2, (object)submitTransactionParameter.BillToAddress.City, (object)submitTransactionParameter.BillToAddress.State, (object)submitTransactionParameter.BillToAddress.Country));
 }
        //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly end

        //protected virtual ProcessCardRequest GetCardRequestForToken(SubmitTransactionParameter parameter)
        //{
        //    customSettings.OverrideCurrentWebsite(SiteContext.Current.WebsiteDto.Id);
        //    ProcessCardRequest processCardRequest1 = null;
        //    if (parameter.PaymentProfileId != null)
        //    {
        //        ProcessCardRecurringSaleRequest recurringSaleRequest = new ProcessCardRecurringSaleRequest();
        //        string userId = customSettings.PaymentGateway_Cenpos_UserId;
        //        recurringSaleRequest.UserId = userId;
        //        string password = customSettings.PaymentGateway_Cenpos_Password;
        //        recurringSaleRequest.Password = password;
        //        int merchantId = customSettings.PaymentGateway_Cenpos_MerchantId;
        //        recurringSaleRequest.MerchantId = merchantId;
        //        Decimal amount = parameter.Amount;
        //        recurringSaleRequest.Amount = amount;
        //        string str1 = parameter.CreditCard.ExpirationMonth.ToString("00") + parameter.CreditCard.ExpirationYear.ToString().Substring(2);
        //        recurringSaleRequest.CardExpirationDate = str1;
        //        string customerNumber = parameter.CustomerNumber;
        //        recurringSaleRequest.CustomerCode = customerNumber;
        //        string address1 = parameter.BillToAddress.Address1;
        //        recurringSaleRequest.CustomerBillingAddress = address1;
        //        string email = parameter.BillToAddress.Email;
        //        recurringSaleRequest.CustomerEmailAddress = email;
        //        string postalCode = parameter.BillToAddress.PostalCode;
        //        recurringSaleRequest.CustomerZipCode = postalCode;
        //        string referenceNumber = parameter.ReferenceNumber;
        //        recurringSaleRequest.InvoiceNumber = referenceNumber; // the invoicenumber in SpForce will be same as original transaction reference number?
        //        string currencyCode = parameter.CurrencyCode;
        //        recurringSaleRequest.CurrencyCode = currencyCode;
        //        // setting SpecialForce for sale transaction type for invoice amount
        //        //recurringSaleRequest.TransactionType = parameter.TransactionType == TransactionType.Sale ? "RecurringSale2" : "RecurringAuth";

        //        switch (parameter.TransactionType)
        //        {
        //            case TransactionType.Authorization:
        //                recurringSaleRequest.TransactionType = "RecurringAuth";
        //                break;
        //            case TransactionType.Capture:
        //                recurringSaleRequest.TransactionType = "RecurringSale2";   //saving card through invoice
        //                break;
        //            case TransactionType.Sale:
        //                recurringSaleRequest.TransactionType = "Sale";             //only payment through invoicing
        //                break;
        //            case TransactionType.Void:
        //                recurringSaleRequest.TransactionType = "Void";
        //                break;
        //            case TransactionType.Credit:
        //                recurringSaleRequest.TransactionType = "Refund";
        //                break;

        //            default : recurringSaleRequest.TransactionType = "RecurringAuth";
        //                break;

        //        }

        //        string str3 = parameter.PaymentProfileId + "|" + (object)merchantId;
        //        recurringSaleRequest.RecurringSaleTokenId = str3;
        //        processCardRequest1 = (ProcessCardRequest)recurringSaleRequest;
        //    }
        //    return processCardRequest1;
        //}

        protected virtual UseTokenRequest GetCardRequestForToken(SubmitTransactionParameter parameter)
        {
            customSettings.OverrideCurrentWebsite(SiteContext.Current.WebsiteDto.Id);
            UseTokenRequest processCardRequest1 = new UseTokenRequest();

            if (parameter.PaymentProfileId != null)
            {
                string userId = customSettings.PaymentGateway_Cenpos_UserId;
                processCardRequest1.UserId = userId;
                string password = customSettings.PaymentGateway_Cenpos_Password;
                processCardRequest1.Password = password;
                int merchantId = customSettings.PaymentGateway_Cenpos_MerchantId;
                processCardRequest1.MerchantId = merchantId;
                Decimal amount = parameter.Amount;
                processCardRequest1.Amount = amount;
                string referenceNumber = parameter.ReferenceNumber;
                processCardRequest1.InvoiceNumber = referenceNumber; // the invoicenumber in SpForce will be same as original transaction reference number?
                string currencyCode = parameter.CurrencyCode;
                processCardRequest1.CurrencyCode = currencyCode;
                // setting SpecialForce for sale transaction type for invoice amount
                //recurringSaleRequest.TransactionType = parameter.TransactionType == TransactionType.Sale ? "RecurringSale2" : "RecurringAuth";
                switch (parameter.TransactionType)
                {
                case TransactionType.Authorization:
                    processCardRequest1.TransactionType = "Auth";
                    break;

                case TransactionType.Capture:
                    processCardRequest1.TransactionType = "RecurringSale2";       //saving card through invoice
                    break;

                case TransactionType.Sale:
                    processCardRequest1.TransactionType = "Sale";                 //only payment through invoicing
                    break;

                case TransactionType.Void:
                    processCardRequest1.TransactionType = "Void";
                    break;

                case TransactionType.Credit:
                    processCardRequest1.TransactionType = "Refund";
                    break;

                default:
                    processCardRequest1.TransactionType = "Auth";
                    break;
                }

                string str3 = parameter.PaymentProfileId + "|" + (object)merchantId;
                processCardRequest1.TokenId = str3;
            }
            return(processCardRequest1);
        }
Ejemplo n.º 6
0
        private void SubmitReversalTransaction(SubmitTransactionParameter submitTransactionParameter, SubmitTransactionResult submitTransactionResult)
        {
            SubmitTransactionParameter transactionParameter = new SubmitTransactionParameter()
            {
                TransactionType      = TransactionType.Reversal,
                CustomerNumber       = submitTransactionParameter.CustomerNumber,
                ReferenceNumber      = submitTransactionParameter.ReferenceNumber,
                CurrencyCode         = submitTransactionParameter.CurrencyCode,
                BillToAddress        = submitTransactionParameter.BillToAddress,
                ShipToAddress        = submitTransactionParameter.ShipToAddress,
                PaymentProfileId     = submitTransactionParameter.PaymentProfileId,
                CreditCard           = submitTransactionParameter.CreditCard,
                Amount               = submitTransactionParameter.Amount,
                WebsiteId            = submitTransactionParameter.WebsiteId,
                OriginalRequestToken = submitTransactionResult.ResponseToken
            };
            CreditCardTransaction creditCardTransaction = this.CreateCreditCardTransaction(transactionParameter);

            submitTransactionParameter.OriginalRequestToken = submitTransactionResult.ResponseToken;
            SubmitTransactionResult submitTransactionResult1 = this.GetPaymentGateway().SubmitTransaction(transactionParameter);

            this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult1);
        }
Ejemplo n.º 7
0
        private AddPaymentTransactionResult SubmitNewTransaction(AddPaymentTransactionParameter parameter)
        {
            Customer billTo1;
            Customer shipTo1;

            if (parameter.IsAdmin)
            {
                ICustomerRepository typedRepository = this.UnitOfWork.GetTypedRepository <ICustomerRepository>();
                if (!parameter.BillToId.HasValue)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.NotFound, "BillToId is empty"));
                }
                Guid?nullable = parameter.ShipToId;
                if (!nullable.HasValue)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.NotFound, "ShipToId is empty"));
                }
                ICustomerRepository customerRepository1 = typedRepository;
                nullable = parameter.BillToId;
                Guid id1 = nullable.Value;
                billTo1 = customerRepository1.Get(id1);
                ICustomerRepository customerRepository2 = typedRepository;
                nullable = parameter.ShipToId;
                Guid id2 = nullable.Value;
                shipTo1 = customerRepository2.Get(id2);
            }
            else
            {
                GetBillToResult billTo2 = this.GetBillTo(parameter.BillToId);
                if (billTo2.ResultCode != ResultCode.Success)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(billTo2.SubCode, billTo2.Message));
                }
                billTo1 = billTo2.BillTo;
                GetShipToResult shipTo2 = this.GetShipTo(parameter.BillToId, parameter.ShipToId);
                if (shipTo2.ResultCode != ResultCode.Success)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(shipTo2.SubCode, shipTo2.Message));
                }
                shipTo1 = shipTo2.ShipTo;
            }
            SubmitTransactionParameter transactionParameter = new SubmitTransactionParameter()
            {
                TransactionType  = parameter.TransactionType,
                CustomerNumber   = billTo1.CustomerNumber,
                ReferenceNumber  = parameter.ReferenceNumber,
                CurrencyCode     = parameter.CurrencyCode,
                BillToAddress    = CreateCreditCardAddress(billTo1, parameter.CreditCard),
                ShipToAddress    = CreateCreditCardAddress(shipTo1, (CreditCardDto)null),
                PaymentProfileId = parameter.PaymentProfileId,
                CreditCard       = parameter.CreditCard,
                Amount           = parameter.Amount,
                WebsiteId        = parameter.WebsiteId
            };

            if (!parameter.PaymentProfileId.IsBlank())
            {
                UserProfile userProfile = this.UnitOfWork.GetRepository <UserProfile>().Get(SiteContext.Current.UserProfileDto.Id);
                transactionParameter.CustomerProfileId = userProfile.GetProperty("StoredCustomerProfileId", string.Empty);
            }
            CreditCardTransaction creditCardTransaction = this.CreateCreditCardTransaction(transactionParameter);

            transactionParameter.CreditCardTransactionId = new Guid?(creditCardTransaction.Id);
            SubmitTransactionResult submitTransactionResult = (parameter.CreditCard.CardType == "PayPal" ? this.paymentGatewayFactory.GetPaymentGateway("PaypalExpress") : this.GetPaymentGateway()).SubmitTransaction(transactionParameter);

            if (submitTransactionResult.ResponseMessages.Count > 0)
            {
                LogHelper.For(this).Error(transactionParameter.CustomerNumber + submitTransactionResult.ResponseMessages.FirstOrDefault() + submitTransactionResult.Success, "CenposResponse");
            }
            if (!submitTransactionResult.Success)
            {
                this.UnitOfWork.RollbackTransaction();
                this.UnitOfWork.Clear(true);
                this.UnitOfWork.BeginTransaction();
                this.ResetContext();
                this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult);
                if (submitTransactionResult.IsConnectionError)
                {
                    this.SubmitReversalTransaction(transactionParameter, submitTransactionResult);
                }
                return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.CreditCardFailed, string.Join(Environment.NewLine, (IEnumerable <string>)submitTransactionResult.ResponseMessages)));
            }
            return(new AddPaymentTransactionResult()
            {
                CreditCardTransaction = this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult)
            });
        }
Ejemplo n.º 8
0
        private CreditCardTransaction UpdateCreditCardTransaction(CreditCardTransaction creditCardTransaction, SubmitTransactionParameter submitTransactionParameter, SubmitTransactionResult submitTransactionResult)
        {
            creditCardTransaction.Result    = submitTransactionResult.Success ? "0" : "1";
            creditCardTransaction.AuthCode  = submitTransactionResult.ResponseNumber;
            creditCardTransaction.RequestId = submitTransactionResult.ResponseNumber;
            creditCardTransaction.PNRef     = submitTransactionResult.ResponseToken ?? string.Empty;
            creditCardTransaction.Status    = !submitTransactionResult.Success ? "Error" : (submitTransactionParameter.TransactionType == TransactionType.Authorization ? "Open" : "Submitted");
            //Save CC last 4 digit and CardType
            string ccNumber = (submitTransactionParameter.CreditCard.CardNumber.Length > 3) ? submitTransactionParameter.CreditCard.CardNumber.Substring(submitTransactionParameter.CreditCard.CardNumber.Length - 4, 4) : submitTransactionParameter.CreditCard.CardNumber;

            creditCardTransaction.CreditCardNumber = ccNumber;
            creditCardTransaction.CardType         = this.GetCardType(submitTransactionParameter.CreditCard.CardType);
            //End
            this.UnitOfWork.GetRepository <CreditCardTransaction>().Insert(creditCardTransaction);
            if (!submitTransactionResult.Success)
            {
                creditCardTransaction.RespText = string.Join(Environment.NewLine, (IEnumerable <string>)submitTransactionResult.ResponseMessages);
                return(creditCardTransaction);
            }
            if (submitTransactionParameter.TransactionType == TransactionType.Capture || submitTransactionParameter.TransactionType == TransactionType.Void)
            {
                CreditCardTransaction creditCardTransaction1 = this.UnitOfWork.GetRepository <CreditCardTransaction>().GetTable().FirstOrDefault <CreditCardTransaction>((Expression <Func <CreditCardTransaction, bool> >)(c => c.RequestId.Equals(submitTransactionParameter.OriginalRequestNumber)));
                if (creditCardTransaction1 != null)
                {
                    creditCardTransaction1.Status = submitTransactionParameter.TransactionType == TransactionType.Capture ? "Captured" : "Voided";
                }
            }
            return(creditCardTransaction);
        }
Ejemplo n.º 9
0
        private CreditCardTransaction CreateCreditCardTransaction(SubmitTransactionParameter submitTransactionParameter)
        {
            CreditCardTransaction creditCardTransaction = this.UnitOfWork.GetRepository <CreditCardTransaction>().Create();

            creditCardTransaction.TransactionType = submitTransactionParameter.TransactionType == TransactionType.Authorization ? "A" : (submitTransactionParameter.TransactionType == TransactionType.Sale ? "S" : (submitTransactionParameter.TransactionType == TransactionType.Capture ? "D" : (submitTransactionParameter.TransactionType == TransactionType.Void ? "V" : (submitTransactionParameter.TransactionType == TransactionType.Reversal ? "R" : "C"))));
            creditCardTransaction.TransactionDate = DateTimeProvider.Current.Now;
            creditCardTransaction.Amount          = submitTransactionParameter.Amount;
            creditCardTransaction.CustomerNumber  = submitTransactionParameter.CustomerNumber;
            creditCardTransaction.OrderNumber     = submitTransactionParameter.ReferenceNumber;
            CreditCardDto creditCard1 = submitTransactionParameter.CreditCard;

            creditCardTransaction.Name    = (creditCard1 != null ? creditCard1.CardHolderName : (string)null) ?? string.Empty;
            creditCardTransaction.AvsAddr = this.GetAvsAddr(submitTransactionParameter);
            CreditCardAddressDto billToAddress = submitTransactionParameter.BillToAddress;

            creditCardTransaction.AvsZip = (billToAddress != null ? billToAddress.PostalCode : (string)null) ?? string.Empty;
            CreditCardDto creditCard2 = submitTransactionParameter.CreditCard;
            string        str1        = (creditCard2 != null ? creditCard2.CardNumber : (string)null) ?? string.Empty;
            CreditCardDto creditCard3 = submitTransactionParameter.CreditCard;
            int           num;
            string        str2;

            if (creditCard3 == null)
            {
                str2 = (string)null;
            }
            else
            {
                num  = creditCard3.ExpirationMonth;
                str2 = num.ToString("00");
            }
            if (str2 == null)
            {
                str2 = string.Empty;
            }
            string        str3        = "/";
            CreditCardDto creditCard4 = submitTransactionParameter.CreditCard;
            string        str4;

            if (creditCard4 == null)
            {
                str4 = (string)null;
            }
            else
            {
                num  = creditCard4.ExpirationYear;
                str4 = num.ToString();
            }
            if (str4 == null)
            {
                str4 = string.Empty;
            }
            creditCardTransaction.ExpirationDate = str2 + str3 + str4;
            string str5;

            if (str1.Length <= 4)
            {
                str5 = str1;
            }
            else
            {
                string str6 = str1;
                str5 = str6.Substring(str6.Length - 4);
            }
            creditCardTransaction.CreditCardNumber = str5;
            creditCardTransaction.OrigId           = submitTransactionParameter.OriginalRequestNumber;
            creditCardTransaction.Site             = SiteContext.Current.WebsiteDto.Name;
            return(creditCardTransaction);
        }
        protected virtual ProcessCreditCardRequest GetCardRequest(SubmitTransactionParameter parameter)
        {
            ProcessCreditCardRequest processCardRequest;//BUSA-462 : Ability to save Credit Cards (in CenPos) and offer it to users
            ProcessCreditCardRequest request;
            int expirationMonth;

            if (parameter.PaymentProfileId != null)
            {
                ProcessCreditCardRequest processCardRecurringSaleRequest = new ProcessCreditCardRequest()
                {
                    UserId     = this.UserId,
                    Password   = this.Password,
                    MerchantId = this.MerchantId,
                    Amount     = parameter.Amount
                };
                expirationMonth = parameter.CreditCard.ExpirationMonth;
                string str = expirationMonth.ToString("00");
                expirationMonth = parameter.CreditCard.ExpirationYear;
                processCardRecurringSaleRequest.CardExpirationDate     = string.Concat(str, expirationMonth.ToString().Substring(2));
                processCardRecurringSaleRequest.CustomerCode           = parameter.CustomerNumber;
                processCardRecurringSaleRequest.CustomerBillingAddress = parameter.BillToAddress.Address1;

                //BUSA-296  Changes Start
                if (string.IsNullOrEmpty(parameter.BillToAddress.Email))
                {
                    var userInfo = SiteContext.Current.UserProfileDto;
                    if (userInfo != null)
                    {
                        processCardRecurringSaleRequest.CustomerEmailAddress = userInfo.UserName;
                    }
                }
                else
                {
                    processCardRecurringSaleRequest.CustomerEmailAddress = parameter.BillToAddress.Email;
                }
                //BUSA-296  Changes end

                processCardRecurringSaleRequest.CustomerZipCode = parameter.BillToAddress.PostalCode;
                processCardRecurringSaleRequest.InvoiceNumber   = parameter.ReferenceNumber;
                processCardRecurringSaleRequest.CurrencyCode    = parameter.CurrencyCode;
                processCardRecurringSaleRequest.TransactionType = "RecurringAuth";
                // processCardRecurringSaleRequest.RecurringSaleTokenId = string.Concat(parameter.PaymentProfileId, "|", this.MerchantId);

                //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly start
                var  companyNameIdentifier = customSettings.CompanyNameIdentifier;
                bool isNewUser             = (SiteContext.Current.UserProfileDto != null && !SiteContext.Current.UserProfileDto.IsGuest && processCardRecurringSaleRequest.CustomerCode == companyNameIdentifier + "1055357");
                if (isNewUser)
                {
                    UserProfile userProfile = this.UnitOfWork.GetRepository <UserProfile>().Get(SiteContext.Current.UserProfileDto.Id);
                    processCardRecurringSaleRequest.CustomerBillingAddress = string.IsNullOrEmpty(parameter.CreditCard.PostalCode) ? GetCurrentUserPropertyValue(userProfile.CustomProperties, "NewUsrBTAddress1") : parameter.CreditCard.Address1;
                    processCardRecurringSaleRequest.CustomerZipCode        = string.IsNullOrEmpty(parameter.CreditCard.PostalCode) ?GetCurrentUserPropertyValue(userProfile.CustomProperties, "NewUsrBTPostalCode") : parameter.CreditCard.PostalCode;
                }
                //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly end
                request = processCardRecurringSaleRequest;
            }
            else if (parameter.TransactionType != TransactionType.Void)
            {
                //BUSA-462 : Ability to save Credit Cards (in CenPos) and offer it to users Starts
                processCardRequest = new ProcessCreditCardRequest()
                {
                    UserId     = this.UserId,
                    Password   = this.Password,
                    MerchantId = this.MerchantId,
                    //// setting SpecialForce for sale transaction type for invoice amount
                    //TransactionType =  parameter.TransactionType == TransactionType.Sale ? "RecurringSale" : "RecurringAuth",
                    TerminalCapabilities = "Manual",
                    NameOnCard           = parameter.CreditCard.CardHolderName,
                    Amount = parameter.Amount
                };

                switch (parameter.TransactionType)
                {
                case TransactionType.Authorization:
                    processCardRequest.TransactionType = "RecurringAuth";
                    break;

                case TransactionType.Capture:
                    processCardRequest.TransactionType = "RecurringSale2";       //saving card through invoice
                    break;

                case TransactionType.Sale:
                    processCardRequest.TransactionType = "Sale";                 // payment through invoicing without saving card
                    break;

                case TransactionType.Void:
                    processCardRequest.TransactionType = "Void";
                    break;

                case TransactionType.Credit:
                    processCardRequest.TransactionType = "Refund";
                    break;

                default:
                    processCardRequest.TransactionType = "RecurringAuth";
                    break;
                }

                //BUSA-462 : Ability to save Credit Cards (in CenPos) and offer it to users Ends
                expirationMonth = parameter.CreditCard.ExpirationMonth;
                string str1 = expirationMonth.ToString("00");
                expirationMonth = parameter.CreditCard.ExpirationYear;
                processCardRequest.CardExpirationDate = string.Concat(str1, expirationMonth.ToString().Substring(2));
                processCardRequest.CardNumber         = parameter.CreditCard.CardNumber;
                string lastfourdigit = parameter.CreditCard.CardNumber.Substring(parameter.CreditCard.CardNumber.Length - 4);
                processCardRequest.CardLastFourDigits     = lastfourdigit;
                processCardRequest.InvoiceNumber          = parameter.ReferenceNumber;
                processCardRequest.CurrencyCode           = parameter.CurrencyCode;
                processCardRequest.CustomerBillingAddress = parameter.BillToAddress.Address1;
                processCardRequest.CustomerCity           = parameter.BillToAddress.City;
                processCardRequest.CustomerCode           = parameter.CustomerNumber;

                //BUSA-296  Changes Start
                if (string.IsNullOrEmpty(parameter.BillToAddress.Email))
                {
                    var userInfo = SiteContext.Current.UserProfileDto;
                    if (userInfo != null)
                    {
                        processCardRequest.CustomerEmailAddress = userInfo.UserName;
                    }
                }
                else
                {
                    processCardRequest.CustomerEmailAddress = parameter.BillToAddress.Email;
                }
                //BUSA-296  Changes end

                processCardRequest.CustomerPhone   = parameter.BillToAddress.Phone;
                processCardRequest.CustomerState   = parameter.BillToAddress.State;
                processCardRequest.CustomerZipCode = parameter.BillToAddress.PostalCode;

                //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly start
                var  companyNameIdentifier = customSettings.CompanyNameIdentifier;
                bool isNewUser             = (SiteContext.Current.UserProfileDto != null && !SiteContext.Current.UserProfileDto.IsGuest && processCardRequest.CustomerCode == companyNameIdentifier + "1055357");
                if (isNewUser)
                {
                    var userProfile    = SiteContext.Current.UserProfileDto;
                    var userProperties = UnitOfWork.GetRepository <CustomProperty>().GetTable().Where(x => x.ParentId == userProfile.Id).ToList();
                    //processCardRequest.CustomerBillingAddress = GetCurrentUserPropertyValue(userProperties, "NewUsrBTAddress1");
                    //processCardRequest.CustomerZipCode = GetCurrentUserPropertyValue(userProperties, "NewUsrBTPostalCode");

                    processCardRequest.CustomerBillingAddress = string.IsNullOrEmpty(parameter.CreditCard.Address1) ? GetCurrentUserPropertyValue(userProperties, "NewUsrBTAddress1") : parameter.CreditCard.Address1;
                    processCardRequest.CustomerZipCode        = string.IsNullOrEmpty(parameter.CreditCard.PostalCode) ? GetCurrentUserPropertyValue(userProperties, "NewUsrBTPostalCode") : parameter.CreditCard.PostalCode;
                }
                //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly end
                request = processCardRequest;
            }
            else
            {
                request = new ProcessCreditCardRequest()
                {
                    TransactionType = this.GetTransactionType(parameter.TransactionType),
                    ReferenceNumber = parameter.OriginalRequestToken
                };
            }
            return(request);
        }