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) }); }
protected UpdateCartResult ProcessCreditCardTransaction(IUnitOfWork unitOfWork, CustomerOrder cart, UpdateCartParameter parameter, UpdateCartResult result) { AddPaymentTransactionParameter parameter1 = new AddPaymentTransactionParameter(); if (parameter.Properties.Count() > 0 && parameter.Properties.ContainsKey("AddNewCard") && parameter.Status.EqualsIgnoreCase("SaveNewCard")) { parameter1.ReferenceNumber = string.Empty; parameter1.Amount = 0; CurrencyDto currency = SiteContext.Current.CurrencyDto; string str = (currency != null ? currency.CurrencyCode : (string)null) ?? string.Empty; parameter1.CurrencyCode = str; } parameter1.TransactionType = this.paymentSettings.SubmitSaleTransaction ? TransactionType.Sale : TransactionType.Authorization; parameter1.CreditCard = parameter.CreditCard; string paymentProfileId = parameter.PaymentProfileId; parameter1.PaymentProfileId = paymentProfileId; AddPaymentTransactionResult transactionResult = this.paymentService.Value.AddPaymentTransaction(parameter1); if (transactionResult.CreditCardTransaction != null) { if (parameter.Properties.Count() > 0 && parameter.Properties.ContainsKey("AddNewCard")) { transactionResult.CreditCardTransaction.CustomerOrderId = null; } else { transactionResult.CreditCardTransaction.CustomerOrderId = new Guid?(cart.Id); } } if (transactionResult.ResultCode != ResultCode.Success) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, transactionResult.SubCode, transactionResult.Message)); } if (parameter.StorePaymentProfile) { if (parameter.Properties.Count() > 0 && parameter.Properties.ContainsKey("AddNewCard")) { this.paymentService.Value.AddPaymentProfile(new AddPaymentProfileParameter() { CurrencyCode = parameter1.CurrencyCode, BillToId = SiteContext.Current.BillTo.Id, CreditCard = parameter.CreditCard }); } else { this.paymentService.Value.AddPaymentProfile(new AddPaymentProfileParameter() { CurrencyCode = cart.Currency.CurrencyCode, BillToId = new Guid?(cart.Customer.Id), CreditCard = parameter.CreditCard }); } } return(result); }
public AddPaymentTransactionResult AddPaymentTransaction(AddPaymentTransactionParameter parameter) { if (SiteContext.Current.UserProfileDto == null) { return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.Forbidden, MessageProvider.Current.Forbidden)); } if (parameter.TransactionType != TransactionType.Authorization && parameter.TransactionType != TransactionType.Sale && parameter.TransactionType != TransactionType.Capture) { return(this.SubmitReferenceTransaction(parameter)); } return(this.SubmitNewTransaction(parameter)); }
protected UpdateCartResult ProcessInvoiceCredit(IUnitOfWork unitOfWork, CustomerOrder cart, UpdateCartParameter parameter, UpdateCartResult result) { string orderTotalDue = "0"; string invoiceNumber = string.Empty; decimal Amount = 0; culture = CultureInfo.CreateSpecificCulture("en-US"); AddPaymentTransactionParameter parameter1 = new AddPaymentTransactionParameter(); parameter.Properties.TryGetValue("creditAmount", out orderTotalDue); parameter.Properties.TryGetValue("creditInvoiceList", out invoiceNumber); invoiceList = JsonConvert.DeserializeObject <List <InvoiceList> >(invoiceNumber); if (parameter.Properties.Count() > 0 && parameter.Properties.ContainsKey("creditAmount")) { //BUSA-1152 Amount = Math.Round(Convert.ToDecimal(orderTotalDue, culture), 2); if (Amount <= 0) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, SubCode.Forbidden, "The amount should be greater than zero")); } } try { var response = PostCreditToInfor(Amount, invoiceNumber); if (!response) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, SubCode.GetPaymentProfileFailed, "Your invoice payment failed")); } } catch (Exception ex) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, SubCode.GeneralFailure, "Your invoice payment failed" + ex)); } finally { unitOfWork.Save(); } return(result); }
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) }); }
protected UpdateCartResult ProcessInvoicePayment(IUnitOfWork unitOfWork, CustomerOrder cart, UpdateCartParameter parameter, UpdateCartResult result) { string orderTotalDue = "0"; string invoiceNumber = string.Empty; AddPaymentTransactionParameter parameter1 = new AddPaymentTransactionParameter(); parameter.Properties.TryGetValue("payAmount", out orderTotalDue); parameter.Properties.TryGetValue("invoiceList", out invoiceNumber); invoiceList = JsonConvert.DeserializeObject <List <InvoiceList> >(invoiceNumber); culture = CultureInfo.CreateSpecificCulture("en-US"); if (parameter.Properties.Count() > 0 && parameter.Properties.ContainsKey("payAmount")) { if (!invoiceList.Any()) { parameter1.ReferenceNumber = "OBAL"; } else if (invoiceList.Count == 1) { parameter1.ReferenceNumber = invoiceList.FirstOrDefault().InvoiceNo; } else { parameter1.ReferenceNumber = "INV" + "-" + invoiceList.FirstOrDefault().InvoiceNo; } //BUSA-1144 : Creating US culture as amount is not coming as "," separated from UI for french. parameter1.Amount = Math.Round(Convert.ToDecimal(orderTotalDue, culture), 2); if (parameter1.Amount <= 0) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, SubCode.Forbidden, "The amount should be greater than zero")); } CurrencyDto currency = SiteContext.Current.CurrencyDto; string str = (currency != null ? currency.CurrencyCode : (string)null) ?? string.Empty; parameter1.CurrencyCode = str; } parameter1.CreditCard = parameter.CreditCard; if (parameter.PaymentProfileId != null) { parameter1.PaymentProfileId = parameter.PaymentProfileId; UserPaymentProfile userPaymentProfile = unitOfWork.GetRepository <UserPaymentProfile>().GetTable().FirstOrDefault(p => p.CardIdentifier == parameter.PaymentProfileId); if (userPaymentProfile != null) { CreditCardDto cc = new CreditCardDto(); cc.CardNumber = userPaymentProfile.MaskedCardNumber; cc.CardType = userPaymentProfile.CardType; if (!string.IsNullOrEmpty(userPaymentProfile.ExpirationDate)) { cc.ExpirationMonth = Convert.ToInt32(userPaymentProfile.ExpirationDate.Substring(0, 2)); cc.ExpirationYear = Convert.ToInt32(userPaymentProfile.ExpirationDate.Substring(2, 2)); } parameter1.CreditCard = cc; } } parameter1.TransactionType = TransactionType.Capture; if (parameter.StorePaymentProfile) { transactionResult = this.paymentService.Value.AddPaymentTransaction(parameter1); if (transactionResult.ResultCode != ResultCode.Success) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, transactionResult.SubCode, "The card transaction was declined. Please contact our customer support team.")); } this.paymentService.Value.AddPaymentProfile(new AddPaymentProfileParameter() { CurrencyCode = parameter1.CurrencyCode, BillToId = SiteContext.Current.BillTo.Id, CreditCard = parameter.CreditCard }); } else { //payment with saved card //if (parameter1.PaymentProfileId == null || parameter1.PaymentProfileId == "") //{ // parameter1.TransactionType = TransactionType.Sale; //only payment with new card. //} parameter1.TransactionType = TransactionType.Sale; transactionResult = this.paymentService.Value.AddPaymentTransaction(parameter1); if (transactionResult.ResultCode != ResultCode.Success) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, transactionResult.SubCode, "The card transaction was declined. Please contact our customer support team.")); } } if (transactionResult.CreditCardTransaction != null) { transactionResult.CreditCardTransaction.CustomerOrderId = null; } if (result.ResultCode != ResultCode.Success) { return(result); } else { try { var response = PostPaymentToInfor(transactionResult, parameter1, invoiceNumber); if (!response) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, transactionResult.SubCode, "Your invoice payment failed")); } } catch (Exception ex) { return(this.CreateErrorServiceResult <UpdateCartResult>(result, transactionResult.SubCode, "Your invoice payment failed" + ex)); } }