示例#1
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)
            });
        }
示例#2
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)
            });
        }
        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);
        }
示例#4
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);
        }
示例#5
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)
            });
        }
示例#6
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);
        }