/// <summary>Inicializa transacción con Motor de Pagos</summary> /// <param name="productToken">Token del producto en Freemium</param> /// <param name="pais">Sigla (2 dígitos) que representa al país</param> /// <param name="user">ID usuario externo del 3rd party</param> /// <param name="m">Monto (valor) codificado de la transacción</param> /// <param name="idPerfil">(opcional) Recibe el perfil que debe ser seteado (para flujo distinto)</param> /// <returns>ActionResult, redirección hacia ruta correspondiente</returns> public ActionResult PagarPerfilPremium(string productToken, string pais, string user, string m, string idPerfil) { string baseUrlBillingService = configurationRepository.GetConfig("BaseUrlBillingService"); string methodUrlBillingService = configurationRepository.GetConfig("MethodUrlBillingService"); // Descodifico el monto recibido byte[] data = Convert.FromBase64String(m); string decodedString = Encoding.UTF8.GetString(data); string[] arrAmount = decodedString.Split('@'); // valor multiplicado @ ghost @ multiplicador int total = Convert.ToInt32(arrAmount[0]); int multiplier = Convert.ToInt32(arrAmount[arrAmount.Length - 1]); int amount = total / multiplier; // Obtengo el producto var product_id = productsRepository.GetProductId(productToken); // productToken = idApp var product = productsRepository.GetProduct(product_id); var perfilPremium = profilesRepository.GetPaidProfiles(product_id).FirstOrDefault(); //URLS string FreemiumUrlOk = product.BillingUrlOk; string FreemiumUrlError = product.BillingUrlError; string FreemiumUrlNotify = configurationRepository.GetConfig("FreemiumUrlNotify"); //notifica a freemium sobre la suscripcion string FreemiumCommerceId = configurationRepository.GetConfig("FreemiumCommerceId"); if (product_id == 1) // MG { FreemiumCommerceId = configurationRepository.GetConfig("FreemiumCommerceIdMG"); } else if (product_id == 2) // SSZ { FreemiumCommerceId = configurationRepository.GetConfig("FreemiumCommerceIdSSZ"); } else if (product_id == 5) // Zana { FreemiumCommerceId = configurationRepository.GetConfig("FreemiumCommerceIdZana"); } if (product.DemoMode == true) { //en caso de que el propduicto esté en modo demo, abre la pantalla de pago de prueba //return RedirectToAction("Index", "FormularioPago", new { form = form, plan = plan, user = user }); } // Llamado a InitTransaction del Motor de Pagos Wach.WachHelper billingService = new Wach.WachHelper(baseUrlBillingService); // Creo un codExternal con los datos obtenidos Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; // idUserExternal, idPlan, idApp son requeridos para notify billing string idPerfilX = idPerfil == null?perfilPremium.IdProfile.ToString() : idPerfil; string codExternal = product_id + "-" + idPerfilX + "-" // idPlan (perfil) + user + "-" // idUserExternal + productToken + "-" // idApp + unixTimestamp.ToString(); var content = new FormUrlEncodedContent( new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("idUserExternal", user), new KeyValuePair <string, string>("codExternal", codExternal), // requiere trx de wp new KeyValuePair <string, string>("urlOk", FreemiumUrlOk), new KeyValuePair <string, string>("urlError", FreemiumUrlError), new KeyValuePair <string, string>("urlNotify", FreemiumUrlNotify), new KeyValuePair <string, string>("commerceID", FreemiumCommerceId), new KeyValuePair <string, string>("amount", amount.ToString()) }); // Respuesta del motor de pagos var respuesta = billingService.PostSimple <RetornoInit>(methodUrlBillingService, content); new EventLogRepository().SetLog("Seleccion planes", "Realizando POST a " + respuesta.message); if (respuesta.code == 0) { // Transacción inicializada correctamente en el motor de pagos // Redirecciona a formulario de pago con valor de transacción return(Redirect(respuesta.paymentForm + respuesta.result)); } else { // El motor retorna error return(Content(respuesta.message)); } }