Esempio n. 1
0
        /// <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()));
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        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));
            }
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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));
            }
        }