public ActionResult PaymentInfo() { var model = new PaymentInfoModel(); var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var payPalPlusBrasilPaymentSettings = _settingService.LoadSetting <PayPalPlusBrasilPaymentSettings>(storeScope); var customer = _customerService.GetCustomerById(_workContext.CurrentCustomer.Id); var customerPayPalPlus = _payPalPlusCustomerService.GetCustomerPayPalPlus(customer); string username = payPalPlusBrasilPaymentSettings.RestAPIClientId; string password = payPalPlusBrasilPaymentSettings.RestAPISecrect; TokenResponse tokenResponse = null; PaymentResponse paymentResponse = null; PaymentMessage paymentMessage = null; var number = string.Empty; var complement = string.Empty; var cpfCnpj = string.Empty; try { using (var token = new Token(payPalPlusBrasilPaymentSettings.UseSandbox)) tokenResponse = token.CreateAsync(username, password).ConfigureAwait(false).GetAwaiter().GetResult(); VerifyProfileExperience(payPalPlusBrasilPaymentSettings, tokenResponse); paymentMessage = GetPaymentoMessage(payPalPlusBrasilPaymentSettings, customer); if (payPalPlusBrasilPaymentSettings.Log) { _logger.InsertLog(LogLevel.Information, "Nop.Plugin.Payments.PayPalPlusBrasil.PaymentMessage", JsonConvert.SerializeObject(paymentMessage, _jsonSettings), customer); } using (var paymentCreation = new PaymentCreation(payPalPlusBrasilPaymentSettings.UseSandbox)) paymentResponse = paymentCreation.CreateAsync(paymentMessage, tokenResponse.AcessToken).ConfigureAwait(false).GetAwaiter().GetResult(); if (payPalPlusBrasilPaymentSettings.Log) { _logger.InsertLog(LogLevel.Information, "Nop.Plugin.Payments.PayPalPlusBrasil.PaymentResponse", JsonConvert.SerializeObject(paymentResponse, _jsonSettings), customer); } new AddressHelper(_addressAttributeParser, _workContext).GetCustomNumberAndComplement(customer.BillingAddress.CustomAttributes, out number, out complement, out cpfCnpj); model.ApprovalUrl = GetAprovalUrl(paymentResponse.Links); model.Mode = payPalPlusBrasilPaymentSettings.UseSandbox ? "sandbox" : "live"; model.PayerFirstName = customer.BillingAddress.FirstName; model.PayerLastName = customer.BillingAddress.LastName; string email = !string.IsNullOrWhiteSpace(customer.Email) ? customer.Email : customer.BillingAddress.Email; model.PayerEmail = email; model.PayerPhone = AddressHelper.FormatarCelular(customer.ShippingAddress.PhoneNumber); model.PayerTaxId = cpfCnpj; model.DisableContinue = payPalPlusBrasilPaymentSettings.IdButtonConfirmOrFunction; model.EnableContinue = payPalPlusBrasilPaymentSettings.IdButtonConfirmOrFunction; model.HabilitarParcelamento = payPalPlusBrasilPaymentSettings.HabilitarParcelamento ? "1" : "0"; model.ParcelamentoMaximo = payPalPlusBrasilPaymentSettings.ParcelamentoMaximo.ToString(); model.CPFCNPJ = (cpfCnpj.Length <= 11) ? "BR_CPF" : "BR_CNPJ"; model.PaymentIdPayPal = paymentResponse.Id; model.RememberedCards = (customerPayPalPlus != null) ? customerPayPalPlus.RememberedCards : string.Empty; return(View("~/Plugins/Payments.PayPalPlusBrasil/Views/PaymentPayPalPlusBrasil/PaymentInfo.cshtml", model)); } catch (Exception ex) { _logger.Error("PNop.Plugin.Payments.PayPalPlusBrasil.Controllers", ex, customer); throw; } }
private PaymentMessage GetPaymentoMessage(PayPalPlusBrasilPaymentSettings payPalPlusBrasilPaymentSettings, Customer customer) { var cart = _workContext.CurrentCustomer.ShoppingCartItems. Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); List <AppliedGiftCard> appliedGiftCards; List <Discount> orderAppliedDiscounts; decimal orderDiscountAmount; int redeemedRewardPoints; decimal redeemedRewardPointsAmount; var orderTotal = _orderTotalCalculationService.GetShoppingCartTotal(cart, out orderDiscountAmount, out orderAppliedDiscounts, out appliedGiftCards, out redeemedRewardPoints, out redeemedRewardPointsAmount); decimal tax; List <Discount> shippingTotalDiscounts; var orderShippingTotalInclTax = _orderTotalCalculationService.GetShoppingCartShippingTotal(cart, true, out tax, out shippingTotalDiscounts); decimal orderSubTotalDiscountAmount; List <Discount> orderSubTotalAppliedDiscounts; decimal subTotalWithoutDiscountBase; decimal subTotalWithDiscountBase; _orderTotalCalculationService.GetShoppingCartSubTotal(cart, true, out orderSubTotalDiscountAmount, out orderSubTotalAppliedDiscounts, out subTotalWithoutDiscountBase, out subTotalWithDiscountBase); var paymentMessage = new PaymentMessage(); paymentMessage.Intent = "sale"; paymentMessage.Payer.PaymentMethod = "paypal"; paymentMessage.ExperienceProfileId = payPalPlusBrasilPaymentSettings.IdProfileExperience; var transactionList = new List <Models.Message.Request.Transaction>(); var itemTransaction = new Models.Message.Request.Transaction(); itemTransaction.Amount.Currency = "BRL"; itemTransaction.Amount.Total = orderTotal.Value.ToString("N", new CultureInfo("en-US")); itemTransaction.Amount.Details.Shipping = orderShippingTotalInclTax.Value.ToString("N", new CultureInfo("en-US")); itemTransaction.Amount.Details.Subtotal = subTotalWithoutDiscountBase.ToString("N", new CultureInfo("en-US")); itemTransaction.Amount.Details.Discount = (orderDiscountAmount + orderSubTotalDiscountAmount).ToString("N", new CultureInfo("en-US")); itemTransaction.Description = "This is the payment transaction description"; itemTransaction.PaymentOptions.AllowedPaymentMethod = "IMMEDIATE_PAY"; itemTransaction.InvoiceNumber = string.Empty; var number = string.Empty; var complement = string.Empty; new AddressHelper(_addressAttributeParser, _workContext).GetCustomNumberAndComplement(customer.ShippingAddress.CustomAttributes, out number, out complement); itemTransaction.ItemList.ShippingAddress.RecipientName = AddressHelper.GetFullName(customer.ShippingAddress); itemTransaction.ItemList.ShippingAddress.Line1 = customer.ShippingAddress.Address1; itemTransaction.ItemList.ShippingAddress.Line2 = complement; itemTransaction.ItemList.ShippingAddress.City = customer.ShippingAddress.City; itemTransaction.ItemList.ShippingAddress.CountryCode = customer.ShippingAddress.Country.TwoLetterIsoCode; itemTransaction.ItemList.ShippingAddress.PostalCode = customer.ShippingAddress.ZipPostalCode; itemTransaction.ItemList.ShippingAddress.State = customer.ShippingAddress.StateProvince.Name; itemTransaction.ItemList.ShippingAddress.Phone = AddressHelper.FormatarCelular(customer.ShippingAddress.PhoneNumber); var itemList = new List <Models.Message.Request.Item>(); foreach (var itemCart in cart) { var item = new Models.Message.Request.Item(); item.Name = itemCart.Product.Name; item.Description = itemCart.Product.ShortDescription; item.Quantity = itemCart.Quantity; List <Discount> scDiscounts; decimal discountAmount; var scUnitPrice = _priceCalculationService.GetUnitPrice(itemCart, true, out discountAmount, out scDiscounts); item.Price = decimal.Round(scUnitPrice, 2).ToString("N2", new CultureInfo("en-US")); item.Sku = itemCart.Product.Sku; item.Currency = "BRL"; itemList.Add(item); } itemTransaction.ItemList.Items = itemList.ToArray(); transactionList.Add(itemTransaction); paymentMessage.Transactions = transactionList.ToArray(); string returnUrl = _webHelper.GetStoreLocation(false) + "Plugins/PaymentPayPalPlusBrasil/IPNHandler"; string cancelReturnUrl = _webHelper.GetStoreLocation(false) + "Plugins/PaymentPayPalPlusBrasil/IPNHandler"; paymentMessage.RedirectUrls.ReturnUrl = new Uri(returnUrl); paymentMessage.RedirectUrls.CancelUrl = new Uri(cancelReturnUrl); return(paymentMessage); }
public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest) { var addressHelper = new AddressHelper(_addressAttributeParser, _workContext); var invoiceDate = DateTime.Now.AddDays(3); string urlRedirect = string.Empty; // Act using (var apiInvoice = new Invoice()) { string number = string.Empty; string complement = string.Empty; string cnpjcpf = string.Empty; addressHelper.GetCustomNumberAndComplement(postProcessPaymentRequest.Order.BillingAddress.CustomAttributes, out number, out complement, out cnpjcpf); InvoiceModel invoice; var customVariables = new List <CustomVariables> { new CustomVariables { name = IuguHelper.CODIGO_PEDIDO, value = postProcessPaymentRequest.Order.Id.ToString() } }; var addressModel = new AddressModel() { ZipCode = postProcessPaymentRequest.Order.BillingAddress.ZipPostalCode, District = postProcessPaymentRequest.Order.BillingAddress.Address2, State = postProcessPaymentRequest.Order.BillingAddress.StateProvince.Name, Street = postProcessPaymentRequest.Order.BillingAddress.Address1, Number = number, City = postProcessPaymentRequest.Order.BillingAddress.City, Country = postProcessPaymentRequest.Order.BillingAddress.Country.Name }; var invoiceItems = new Item[postProcessPaymentRequest.Order.OrderItems.Count + 1]; int i = 0; var cartItems = postProcessPaymentRequest.Order.OrderItems; foreach (var item in cartItems) { var productID = string.IsNullOrWhiteSpace(item.Product.Sku) ? item.Product.Id.ToString() : item.Product.Sku; var productName = ProductHelper.GetProcuctName(item); productName = ProductHelper.AddItemDescrition(productName, item); invoiceItems[i] = new Item() { description = productName, price_cents = ObterPrecoCentavos(decimal.Round(item.UnitPriceInclTax, 2)), quantity = item.Quantity }; i++; } invoiceItems[i] = new Item() { description = postProcessPaymentRequest.Order.ShippingMethod, price_cents = ObterPrecoCentavos(decimal.Round(postProcessPaymentRequest.Order.OrderShippingInclTax, 2)), quantity = 1 }; string email = !string.IsNullOrWhiteSpace(postProcessPaymentRequest.Order.Customer.Email)? postProcessPaymentRequest.Order.Customer.Email: postProcessPaymentRequest.Order.BillingAddress.Email; string name = AddressHelper.GetFullName(postProcessPaymentRequest.Order.BillingAddress); string phone = AddressHelper.FormatarCelular(postProcessPaymentRequest.Order.BillingAddress.PhoneNumber); string phoneNumber = AddressHelper.ObterNumeroTelefone(phone); string phonePrefix = AddressHelper.ObterAreaTelefone(postProcessPaymentRequest.Order.BillingAddress.PhoneNumber); string urlRetorno = _storeContext.CurrentStore.Url + "checkout/completed/" + postProcessPaymentRequest.Order.Id.ToString(); string urlNotification = _storeContext.CurrentStore.Url + "Plugins/PaymentIugu/PaymentReturn"; int descontoCentavos = 0; //Desconto aplicado na ordem subtotal if (postProcessPaymentRequest.Order.OrderSubTotalDiscountExclTax > 0) { var discount = postProcessPaymentRequest.Order.OrderSubTotalDiscountExclTax; discount = Math.Round(discount, 2); descontoCentavos += ObterPrecoCentavos(decimal.Round(discount, 2)); } //desconto fixo, dado por cupom, os descontos podem ser cumulativos if (postProcessPaymentRequest.Order.OrderDiscount > 0) { var discount = postProcessPaymentRequest.Order.OrderDiscount; discount = Math.Round(discount, 2); descontoCentavos += ObterPrecoCentavos(decimal.Round(discount, 2)); } var payer = new PayerModel() { CpfOrCnpj = cnpjcpf, Address = addressModel, Email = email, Name = name, Phone = phone, PhonePrefix = phonePrefix }; var invoiceRequest = new InvoiceRequestMessage(email, invoiceDate, invoiceItems) { Payer = payer, ReturnUrl = urlRetorno, NotificationUrl = urlNotification, DiscountCents = descontoCentavos, CustomVariables = customVariables.ToArray() }; invoice = apiInvoice.CreateAsync(invoiceRequest, _iuguPaymentSettings.CustomApiToken).ConfigureAwait(false).GetAwaiter().GetResult(); urlRedirect = invoice.secure_url; }; _orderNoteService.AddOrderNote("Fatura IUGU Bradesco gerada.", true, postProcessPaymentRequest.Order); System.Web.HttpContext.Current.Response.Redirect(urlRedirect); }