/// <summary> /// Maneja excepciones de tipo ExcepcionCEC /// </summary> /// <param name="context">Información del request</param> /// <param name="excepcionCEC">Excepcion</param> /// <returns></returns> private Task ManejarExcepcionCEC(HttpContext context, CusException excepcionCEC) { string recurso = context.Request.Path; context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; RespuestaError respuesta = GestionErrores.ConstruirRespuestaError(excepcionCEC); logger.LogError(excepcionCEC, respuesta.ToJson()); return(context.Response.WriteAsync(respuesta.ToJson())); }
/// <summary> /// Comprueba que la fecha es válida y genera una respuesta de parámetros incorrectos si no lo es. /// </summary> /// <param name="fecha"></param> /// <param name="respuesta"></param> /// <returns>Devuelve NULL si la fecha no es válida. Un DateTime si sí lo es</returns> public static DateTime?CheckParamFecha(String fecha, ref byte[] respuesta) { DateTime fechaOut; if (!DateTime.TryParse(fecha, out fechaOut)) { RespuestaError re = new RespuestaError() { Error = "Los parámetros de fecha no tienen el formato correcto. Formato necesario: YYYY-MM-DD" }; respuesta = Funciones.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(re)); return(null); } else { return(fechaOut); } }
public IActionResult AuthHpp3DS2() { // configure client & request settings var service = new HostedService(new GatewayConfig { MerchantId = "addonnettest", AccountId = "3ds2", SharedSecret = "secret", ServiceUrl = "https://hpp.sandbox.addonpayments.com/pay", HostedPaymentConfig = new HostedPaymentConfig { Version = "2" } }); // Add 3D Secure 2 Mandatory and Recommended Fields var hostedPaymentData = new HostedPaymentData { CustomerEmail = "*****@*****.**", CustomerPhoneMobile = "34|914353028", AddressesMatch = false }; var billingAddress = new Address { StreetAddress1 = "Dirección de facturación 1", StreetAddress2 = "Dirección de facturación 2", StreetAddress3 = "Dirección de facturación 3", City = "Elche", PostalCode = "03201", Country = "826" }; var shippingAddress = new Address { StreetAddress1 = "Dirección de envío 1", StreetAddress2 = "Dirección de envío 2", StreetAddress3 = "Dirección de envío 3", City = "Elche", State = "ES", PostalCode = "03201", Country = "724", }; try { // Lanzamos la operación al servidor de Addon Payments var hppJson = service.Charge(19.99m) .WithCurrency("EUR") .WithHostedPaymentData(hostedPaymentData) .WithAddress(billingAddress, AddressType.Billing) .WithAddress(shippingAddress, AddressType.Shipping) .Serialize(); return(Content(hppJson)); } catch (ApiException exce) { RespuestaError respuesta = new RespuestaError { resultado = "Error en el envío de datos <br><br>" + exce }; return(BadRequest(respuesta)); } }
/// <summary> /// Presenta la declaración. /// <param name="test">Indica si la presentación se realiza en el entorno en pruebas de la AEAT.</param> /// <param name="certRef">Ruta de certificado para la presentación, en caso de que se utilice uno externo.</param> /// <param name="certClave">Contraseña del certificado.</param> /// </summary> /// <returns>Respuesta a la operación de presentación.</returns> public override Respuesta Presentar(bool test = false, string certRef = null, string certClave = null) { if (!_Confirmado) { throw new InvalidOperationException(Errores.MostrarMensaje("RegistroMod.003")); } int indiceUltimaPagina = RegistroCampos.Count; string registroTipo1 = null; string registroTipo2 = RegistroCampos[indiceUltimaPagina].AFichero(); for (decimal p = 1; p < indiceUltimaPagina; p++) { registroTipo1 += RegistroCampos[p].AFichero(); } VariablesEnvio.Clear(); VariablesEnvio.Add("", registroTipo1); OrdenVariablesEnvio = new string[1] { "" }; // 1. Inicialización var peticionInicializarEnvio = new PeticionTgvi(this, test, certRef, certClave, "InicializarEnvio"); peticionInicializarEnvio.PreparaPeticion(); if (string.IsNullOrWhiteSpace(this["ModeloDeclaracion"].Valor.ToString())) { throw new InvalidOperationException("Debe indicar el número de modelo en la casilla 'ModeloDeclaracion' en la página princial"); } string numeroModelo = this["ModeloDeclaracion"].Valor.ToString(); peticionInicializarEnvio.PeticionHttp.Headers.Add("MODELO", numeroModelo); peticionInicializarEnvio.PeticionHttp.Headers.Add("EJERCICIO", Ejercicio); peticionInicializarEnvio.PeticionHttp.Headers.Add("PERIODO", Periodo); peticionInicializarEnvio.PeticionHttp.Headers.Add("NDC", $"{this["NIF"].Valor}"); peticionInicializarEnvio.PeticionHttp.Headers.Add("IDIOMA", "ES"); peticionInicializarEnvio.PeticionHttp.Headers.Add("NUMBLOQUES", "1"); peticionInicializarEnvio.PeticionHttp.Headers.Add("CODIFICACION", "ISO-8859-1"); var respuestaTgvi = peticionInicializarEnvio.Presentar() as RespuestaTgvi; if (respuestaTgvi.Erronea) { return(respuestaTgvi); } string cookie = respuestaTgvi.Cookie; // 2. Envío datos if ((RegistroCampos[indiceUltimaPagina] as ConjuntoDeEmpaquetables).Empaquetables.Count > 40000) { throw new NotImplementedException("No implementada la paginación."); } VariablesEnvio[""] = registroTipo2; var peticionEnvio = new PeticionTgvi(this, test, certRef, certClave, "EnviarDatos", Encoding.UTF8, "text/plain; charset=UTF-8"); peticionEnvio.PreparaPeticion(); peticionEnvio.PeticionHttp.Headers.Add("IDENVIO", respuestaTgvi.IdEnvio); peticionEnvio.PeticionHttp.Headers.Add("NUMBLOQUE", "1"); peticionEnvio.PeticionHttp.Headers.Add("CODIFICACION", "UTF-8"); peticionEnvio.PeticionHttp.Headers.Add("Set-Cookie", cookie); respuestaTgvi = peticionEnvio.Presentar() as RespuestaTgvi; if (respuestaTgvi.Erronea) { RespuestaError errorInicial = respuestaTgvi.Errores[0]; // Obtenemos el fichero con los registros erróneos. var peticionErrores = new PeticionTgvi(this, test, certRef, certClave, "RecuperarErrores", Encoding.UTF8, "text/plain; charset=UTF-8"); peticionErrores.PreparaPeticion(); peticionErrores.PeticionHttp.Headers.Add("IDENVIO", respuestaTgvi.IdEnvio); peticionErrores.PeticionHttp.Headers.Add("CODIFICACION", "UTF-8"); peticionErrores.PeticionHttp.Headers.Add("Set-Cookie", cookie); respuestaTgvi = peticionErrores.Presentar() as RespuestaTgvi; respuestaTgvi.Errores.Add(errorInicial); return(respuestaTgvi); } // 3. Presentación VariablesEnvio[""] = ""; var peticionPresentacion = new PeticionTgvi(this, test, certRef, certClave, "PresentarEnvio", Encoding.UTF8, "text/plain; charset=UTF-8"); peticionPresentacion.PreparaPeticion(); peticionPresentacion.PeticionHttp.Headers.Add("IDENVIO", respuestaTgvi.IdEnvio); peticionPresentacion.PeticionHttp.Headers.Add("FIRNIF", peticionPresentacion.CertificadoTitular.NIF); peticionPresentacion.PeticionHttp.Headers.Add("FIRNOMBRE", peticionPresentacion.CertificadoTitular.Nombre); peticionPresentacion.PeticionHttp.Headers.Add("FIR", "FirmaBasica"); peticionEnvio.PeticionHttp.Headers.Add("Set-Cookie", cookie); respuestaTgvi = peticionPresentacion.Presentar() as RespuestaTgvi; if (respuestaTgvi.Erronea) { return(respuestaTgvi); } string pdfUrlServer = Parametros.Actuales.Pruebas ? "www6.aeat.es" : (test ? "www6.aeat.es" : "www2.agenciatributaria.gob.es"); string pdfUrl = $"https://{pdfUrlServer}/wlpl/inwinvoc/es.aeat.dit.adu.eeca.catalogo.VisualizaSc?COMPLETA=SI&ORIGEN=D&CSV={respuestaTgvi.CSV}"; respuestaTgvi.DescargaPdfEnlace(pdfUrl); return(respuestaTgvi); }
/// <summary> /// Tarea encargada de ejecutar el proceso HTTP /// </summary> /// <param name="context"></param> private void HttpListenerCallback(HttpListenerContext context) { byte[] respuesta = new byte[0]; String data_text = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding).ReadToEnd(); try { String[] ruta = context.Request.RawUrl.Split('/'); //La ruta es /fichero/{usuario} y es un POST if (ruta[1].CompareTo("fichero") == 0 && context.Request.HttpMethod.CompareTo("POST") == 0 && ruta.Length == 3) { Logger.Log("Servicio POST fichero iniciado"); byte[] fichero = Convert.FromBase64String(data_text); if (fichero.Length > 5 * 1024 * 1024) { context.Response.StatusCode = 413; context.Response.StatusDescription = "Request Entity Too Large"; RespuestaError re = new RespuestaError() { Error = "El fichero no puede ser más grande de 5 MB" }; respuesta = Funciones.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(re)); } else { FicheroMP3 ficheroMP3 = new FicheroMP3() { Usuario = ruta[2], FechaRecepcion = DateTime.UtcNow, Estado = FicheroMP3.EstadosFicheroMP3.Pendiente, FechaTranscripcion = null, Transcripcion = null }; BD.AddFicheroMP3(ficheroMP3); using (FileStream fs = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + ficheroMP3.Id + ".mp3", FileMode.Create, FileAccess.Write)) { fs.Write(fichero, 0, fichero.Length); } context.Response.StatusCode = 200; context.Response.StatusDescription = "Ok"; } } //La ruta es /ficheros/{usuario} y es un GET. Los parámetros desde y hasta al ser opcionales no van en formato Friendly, sino en Query Parameters else if (ruta[1].CompareTo("ficheros") == 0 && context.Request.HttpMethod.CompareTo("GET") == 0 && ruta.Length == 3) { Logger.Log("Servicio GET ficheros iniciado"); DateTime?desde = null; DateTime?hasta = null; Boolean paramsOK = true; if (context.Request.QueryString["desde"] != null) { desde = Funciones.CheckParamFecha(context.Request.QueryString["desde"], ref respuesta); if (desde == null) { paramsOK = false; } } if (context.Request.QueryString["hasta"] != null) { hasta = Funciones.CheckParamFecha(context.Request.QueryString["hasta"], ref respuesta); if (hasta == null) { paramsOK = false; } } if (paramsOK) { context.Response.StatusCode = 200; context.Response.StatusDescription = "Ok"; respuesta = Funciones.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(BD.GetLista(ruta[2].Split('?')[0], desde, hasta))); } else { context.Response.StatusCode = 400; context.Response.StatusDescription = "Bad Request"; } } //La ruta es /fichero/{usuario}/{id} y es un GET else if (ruta[1].CompareTo("fichero") == 0 && context.Request.HttpMethod.CompareTo("GET") == 0 && ruta.Length == 4) { Logger.Log("Servicio GET fichero iniciado"); Int32 id; if (Int32.TryParse(ruta[3], out id)) { RespuestaTranscripcion rt = BD.GetTranscripcion(ruta[2], id); if (rt.Codigo == 0) { context.Response.StatusCode = 200; context.Response.StatusDescription = "Ok"; respuesta = Funciones.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(rt)); } else if (rt.Codigo == -1) { context.Response.StatusCode = 404; context.Response.StatusDescription = "Not Found"; } else if (rt.Codigo == -2) { context.Response.StatusCode = 410; context.Response.StatusDescription = "Gone"; } else { context.Response.StatusCode = 204; context.Response.StatusDescription = "No Content"; } } else { context.Response.StatusCode = 400; context.Response.StatusDescription = "Bad Request"; } } //Cualquier otro caso la ruta no existe y se devuelve Not Found. else { context.Response.StatusCode = 404; context.Response.StatusDescription = "Not Found"; } } catch (System.Exception ex) { //Si se produce una excepción se devuelve un Internal Server Error (500) context.Response.StatusCode = 500; context.Response.StatusDescription = "Internal Server Error"; respuesta = Funciones.GetBytes(ex.ToString()); } context.Response.ContentLength64 = respuesta.Length; context.Response.OutputStream.Write(respuesta, 0, respuesta.Length); context.Response.Close(); }
public IActionResult DatosAdicionalesHpp3DS2() { // configure client & request settings var service = new HostedService(new GatewayConfig { MerchantId = "addonnettest", AccountId = "3ds2", SharedSecret = "secret", ServiceUrl = "https://hpp.sandbox.addonpayments.com/pay", HostedPaymentConfig = new HostedPaymentConfig { Version = "2" } }); // Add 3D Secure 2 Mandatory and Recommended Fields var hostedPaymentData = new HostedPaymentData { CustomerEmail = "*****@*****.**", CustomerPhoneMobile = "34|914353028", AddressesMatch = false, // Campos recomendados de 3D Secure 2 ChallengeRequest = ChallengeRequestIndicator.NO_PREFERENCE, CustomerWorkNumber = "44|07123456789", AccountAgeDate = "20190110", AccountAgeIndicator = "NO_ACCOUNT", AccountChangeDate = "20190128", CustomerHomeNumber = "44|07123456789", AccountChangeIndicator = "THIS_TRANSACTION", AccountPassChangeDate = "20190115", AccountPassChangeIndicator = "THIS_TRANSACTION", AccountPurchaseCount = "3", TransactionType = "GOODS_SERVICE_PURCHASE", CardholderAccountIdentifier = "1f0aae6b-0bac-479f-9ee5-29b9b6cf3aa0", SuspiciousActivity = "SUSPICIOUS_ACTIVITY", ProvisionAttemptsDay = "1", PaymentAccountAge = "201901101", PaymentAccountAgeIndicator = "NO_ACCOUNT", DeliveryEmail = "*****@*****.**", DeliveryTimeframe = "TWO_DAYS_OR_MORE", ShipIndicator = "UNVERIFIED_ADDRESS", ShippingAddressUsage = "20190128", ShippingAddressUsageIndicator = "THIS_TRANSACTION", ShippingNameIndicator = "TRUE", PreorderDate = "20190212", ReorderItemIndicator = "FIRST_TIME_ORDER", TransactionActivityDay = "1", TransactionActivityYear = "3", // GiftCardAmount = "250", // GiftCardCount = "1", // GiftCardCurrency = "EUR", RecurringMaxInstallments = "5", RecurringExpiry = "20190205", RecurringFrequency = "25", PriorTransAuthMethod = "FRICTIONLESS_AUTHENTICATION", PriorTransAuthIdentifier = "26c3f619-39a4-4040-bf1f-6fd433e6d615", PriorTransAuthTimestamp = "20190110125733", PriorTransAuthData = "string", CardLoginAuthType = "MERCHANT_SYSTEM_AUTHENTICATION", CardLoginAuthTimestamp = "20180613110212", CardLoginAuthData = "string", WhiteListStatus = "false" }; var billingAddress = new Address { StreetAddress1 = "Dirección de facturación 1", StreetAddress2 = "Dirección de facturación 2", StreetAddress3 = "Dirección de facturación 3", City = "Elche", PostalCode = "03201", Country = "826" }; var shippingAddress = new Address { StreetAddress1 = "Dirección de envío 1", StreetAddress2 = "Dirección de envío 2", StreetAddress3 = "Dirección de envío 3", City = "Elche", State = "ES", PostalCode = "03201", Country = "724", }; try { // Lanzamos la operación al servidor de Addon Payments var hppJson = service.Charge(19.99m) .WithCurrency("EUR") .WithHostedPaymentData(hostedPaymentData) .WithAddress(billingAddress, AddressType.Billing) .WithAddress(shippingAddress, AddressType.Shipping) .Serialize(); return(Content(hppJson)); } catch (ApiException exce) { RespuestaError respuesta = new RespuestaError { resultado = "Error en el envío de datos <br><br>" + exce }; return(BadRequest(respuesta)); } }