![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#3101
|
|||
|
|||
Cita:
|
#3102
|
|||
|
|||
Cita:
Edit: Disculpa , ya lo encontré, en cotejo de documentos Última edición por pablog2k fecha: 22-10-2024 a las 10:02:03. |
#3103
|
|||
|
|||
Cita:
Hola ermendalenda como lo haces para obtener toda la respuesta html completa en el caso de un error en el certificado? Acabo de hacer la prueba con un certificado no válido y ha saltado una excepción al enviar, de tipo ProtocolException y en el mensaje hay los primeros 1024 caracteres de lo que has posteado tu pero no está entero y no puedo ver la parte del error de certificado. Dice solo esto: Código PHP:
Yo utilizo C# .Net Muchas gracias |
#3104
|
||||
|
||||
Cita:
Sobretodo ahora que aveces responden el nuevo campo type vacio y da error. |
#3105
|
|||
|
|||
Cita:
Gracias |
#3106
|
|||
|
|||
Me apunto a la explicacion
|
#3107
|
|||
|
|||
si trabajais con Delphi, en el componente HTTPRIO que hace el envío, evento OnAfterExecute:
ahí os guarda la respuesta en la ruta que indiquéis |
#3108
|
|||
|
|||
Sabéis si han cambiado algo respecto al calculo de la huella digital. ???
De repente me dice que no coincide. esto es lo que indica la respuesta de AEAT DescripcionErrorRegistro>El cálculo de la huella suministrada es incorrecta. Datos de entrada cálculo huella: IDEmisorFactura=33461360V&NumSerieFactura=02-2024-13784&FechaExpedicionFactura=21-10-2024&TipoFactura=F1&CuotaTotal=1.81&ImporteTotal=10.45&Huella=C0E0A0F622EFF0A77A41E4 7C13972AEAB8E05A85E81D6B873942238A1A670BC5&FechaHoraHusoGenRegistro=2024-10-22T11:15:05+02:00 Huella calculada: 12EB4A6836E721DB0737F03A04EBDFF73D35B3A3D097F549548F00A259C65AFD |
#3109
|
||||
|
||||
Cita:
Hola, he implementado esta funcion , si la de aeat da error de serializacion o otro no interpretable uso esta. Código:
/// <summary> /// Envio del registro de la factura a la aeat /// </summary> /// <param name="facAPresentar">Registro creado con las funciones de la aeat.</param> /// <param name="action">Accion a realizar por defecto registro alta</param> /// <returns>Devuelve la respuesta completa de la aeat</returns> public string consultaAEAT(RegFactuSistemaFacturacion facAPresentar,string action = "RegistroAlta") { XmlSerializer serializaFactura = new XmlSerializer(typeof(RegFactuSistemaFacturacion)); string facXml = ""; using (var xmlw = new StringWriter()) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; using (XmlWriter writter = XmlWriter.Create(xmlw, settings)) { serializaFactura.Serialize(writter, facAPresentar); facXml = xmlw.ToString(); } } facXml = facXml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header /> <soapenv:Body >"); facXml = facXml.Replace("<RegFactuSistemaFacturacion xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<RegFactuSistemaFacturacion xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\">"); //facXml = facXml.Replace("</SistemaInformatico>", "</SistemaInformatico> \r\n <FechaHoraHusoGenRegistro xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\">" + timeStamp +"</FechaHoraHusoGenRegistro>"); facXml = facXml + " </soapenv:Body> </soapenv:Envelope > "; ////////////////////////// <----- Prueba extraccion sin serializar XmlDocument doc = new XmlDocument(); doc.LoadXml(facXml.Replace("utf-16", "utf-8")); HttpWebRequest webRequest = CreateWebRequest("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP", action); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; X509Certificate2 certificate = new X509Certificate2(Program.certificado, Program.passcertificado); //requiere estas variables globalescontienen el certificado y su clave var tiempo = certificate.SubjectName; if (certificate == null) throw new ArgumentNullException( "Certificate is null. Maybe serial number in configuration was wrong."); if (certificate.NotAfter < DateTime.Now) throw new ArgumentNullException( $"Certificate is out of date. NotAfter: {certificate.NotAfter}."); webRequest.ClientCertificates.Add(certificate); using (Stream stream = webRequest.GetRequestStream()) { doc.Save(stream); } HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); string statusDescription = response.StatusDescription; Stream dataStream = response.GetResponseStream(); string responseFromServer; using (StreamReader reader = new StreamReader(dataStream)) { responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); } return responseFromServer; //retorno = client.RegFactuSistemaFacturacion(facAPresentar); } |
#3110
|
||||
|
||||
Cita:
|
#3111
|
||||
|
||||
Cita:
Código:
/// <summary> /// Crea la instancia WebRequest para enviar la petición /// al web service de la AEAT. /// </summary> /// <param name="url">Url del web service.</param> /// <param name="action">Acción del web service.</param> /// <returns></returns> private static HttpWebRequest CreateWebRequest(string url, string action) { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Headers.Add("SOAPAction", action); webRequest.ContentType = "text/xml;charset=\"utf-8\""; webRequest.Accept = "text/xml"; webRequest.Method = "POST"; return webRequest; } Código:
string retornoConsulta = consultaAEAT(facAPresentar); Última edición por bmfranky fecha: 22-10-2024 a las 14:08:16. |
#3112
|
||||
|
||||
Funcion para pasar el xml generado a la AEAT
Hola, adjunto la funcion en c# par aenviar la consulta a la aeat, sin usar la funcion del xlsd, para evitar los fallos de parseo.
Código:
/// <summary> /// Envio el registro de la factura a la aeat /// </summary> /// <param name="facAPresentar">Registro creado con las funciones de la aeat.</param> /// <param name="certificado">arreglo en bytes que contiene el certificado</param> /// <param name="passcertificado">Password necesario para acceder al certificado</param> /// <returns>Devuelve la respuesta completa de la aeat</returns> public string consultaAEAT(RegFactuSistemaFacturacion facAPresentar,byte[] certificado,string passcertificado) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; XmlSerializer serializaFactura = new XmlSerializer(typeof(RegFactuSistemaFacturacion)); string facXml = ""; using (var xmlw = new StringWriter()) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; using (XmlWriter writter = XmlWriter.Create(xmlw, settings)) { serializaFactura.Serialize(writter, facAPresentar); facXml = xmlw.ToString(); } } facXml = facXml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header /> <soapenv:Body >"); facXml = facXml.Replace("<RegFactuSistemaFacturacion xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<RegFactuSistemaFacturacion xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\">"); //facXml = facXml.Replace("</SistemaInformatico>", "</SistemaInformatico> \r\n <FechaHoraHusoGenRegistro xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\">" + timeStamp +"</FechaHoraHusoGenRegistro>"); facXml = facXml + " </soapenv:Body> </soapenv:Envelope > "; ////////////////////////// <----- Prueba extraccion sin serializar XmlDocument doc = new XmlDocument(); doc.LoadXml(facXml.Replace("utf-16", "utf-8")); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"); //webRequest.Headers.Add("SOAPAction", action); webRequest.ContentType = "text/xml;charset=\"utf-8\""; webRequest.Accept = "text/xml"; webRequest.Method = "POST"; X509Certificate2 certificate = new X509Certificate2(certificado, passcertificado); //requiere estas variables globalescontienen el certificado y su clave var tiempo = certificate.SubjectName; if (certificate == null) throw new ArgumentNullException( "Certificate is null. Maybe serial number in configuration was wrong."); if (certificate.NotAfter < DateTime.Now) throw new ArgumentNullException( $"Certificate is out of date. NotAfter: {certificate.NotAfter}."); webRequest.ClientCertificates.Add(certificate); using (Stream stream = webRequest.GetRequestStream()) { doc.Save(stream); } HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); string statusDescription = response.StatusDescription; Stream dataStream = response.GetResponseStream(); string responseFromServer; using (StreamReader reader = new StreamReader(dataStream)) { responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); } return responseFromServer; } Se usaria asi. Cita:
Ya me comentais si a alguien le ha resultado util. |
#3113
|
||||
|
||||
Gracias por el aporte. Actualizo el mensaje#2
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3114
|
|||
|
|||
Cita:
Muchas gracias bmfranky, de esta forma si puedo obtener el html completo, que en mi caso es una página web de hacienda con el error 403 indicando que hay algún problema con el certificado. a ver si puedo sacar textos limpios para mostrar al usuario. Saludos |
#3115
|
||||
|
||||
Cita:
Hola, puede probar esto, a mi me funciona, me devuelve el codigo de error y el texto del mismo. Cita:
|
#3116
|
|||
|
|||
Lo acabo de probar y me funciona. Muchas gracias bmfranky
|
#3117
|
|||
|
|||
Error con httprio
al ejecutar la siguiente línea de código :
var res:RespuestaRegFactuSistemaFacturacion := RespuestaRegFactuSistemaFacturacion.Create; try ----> res := GetsfPortTypeVerifactu( False, '', HTTPRIO1 ).RegFactuSistemaFacturacion( RegFactuSisFactu ); except end; |
#3118
|
|||
|
|||
Cita:
Hola, estoy planteándome hacer el desarrollo en Delphi o en C# (mundo en el que estoy empezando por completo). ¿Podrías poner un pequeño ejemplo de como una vez importado el wsdl se van inicializando y rellenando los nodos de la factura para posteriormente hacer el envío?. Gracias de antemano. |
#3119
|
||||
|
||||
Ejemplo paso a paso c#
Código:
//creamos la factura paso a paso. RegFactuSistemaFacturacion facAPresentar = new RegFactuSistemaFacturacion(); //rellenamos la cabecera ServicioVerifactu.Cabecera cabecera = new ServicioVerifactu.Cabecera(); //creamos obligado presentador y se lo asignamos. ServicioVerifactu.PersonaFisicaJuridicaESType yo = new ServicioVerifactu.PersonaFisicaJuridicaESType(); yo.NIF = Program.configTaller.Nif; yo.NombreRazon = Program.configTaller.NombreTaller; //se lo asignamos a la cabecera cabecera.ObligadoEmision = yo; //Creamos especificacion de remision voluntaria y la asignamos a la cabecera ServicioVerifactu.CabeceraRemisionVoluntaria voluntaria = new ServicioVerifactu.CabeceraRemisionVoluntaria(); voluntaria.Incidencia = ServicioVerifactu.IncidenciaType.N; voluntaria.FechaFinVeriFactu = ""; voluntaria.IncidenciaSpecified = true; //voluntaria.IncidenciaSpecified = false; cabecera.RemisionVoluntaria = voluntaria; // Asignamos la cabecera a la factura. facAPresentar.Cabecera = cabecera; //creamos el registro de factura podrian ser varios, pero solo asignaremos uno. ServicioVerifactu.RegistroFacturaType[] registroFactura = new ServicioVerifactu.RegistroFacturaType[1]; //Como vamos a dar de alta la factura , creamos el registro de alta ServicioVerifactu.RegistroFacturacionAltaType altaFactura = new ServicioVerifactu.RegistroFacturacionAltaType(); //Asignamos el ID version altaFactura.IDVersion = ServicioVerifactu.VersionType.Item10;//de momento la unica accesible //Identificamos la factura y lo asignamos a el Alta ServicioVerifactu.IDFacturaExpedidaType iDFactura = new ServicioVerifactu.IDFacturaExpedidaType(); iDFactura.FechaExpedicionFactura = fechaFactura.Text;//Fecha de presentacion de la factura. iDFactura.IDEmisorFactura = Program.configTaller.Nif;//NIF del obligado emisor iDFactura.NumSerieFactura = numFactura;//numeo de factura y serie altaFactura.IDFactura = iDFactura; Program.facturaSeleccionada.Fecha = fechaFactura.Text; //asignamos nombre expedidor altaFactura.NombreRazonEmisor = Program.configTaller.NombreTaller; //Es por subsanacion ? altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.N; // Se havia rechazado ? altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N; if(alta == "RECHAZO") { //Es por subsanacion ? altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S; // Se havia rechazado ? altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.X; } if (alta == "SUBSANACION") { //Es por subsanacion ? altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S; // Se havia rechazado ? altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N; } if (alta == "RECHAZO_SUBSANACION") { //Es por subsanacion ? altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S; // Se havia rechazado ? altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.S; } //Que tipo de factura estamos creando? altaFactura.TipoFactura = ServicioVerifactu.ClaveTipoFacturaType.F1; /* //Si es rectificativa lo indicamos y cumplimentamos los datos requeridos ya sea rectificada o sustituida son el mismo diseño altaFactura.TipoRectificativa = ServicioVerifactu.ClaveTipoRectificativaType.I; Program.FacturaSeleccionada.Tipo= //aqui consignariamos los datos de las facturas para sutitucion y demas. int numeroFaR = 1; ServicioVerifactu.IDFacturaARType[] listFacturasRectificadas = new ServicioVerifactu.IDFacturaARType[numeroFaR];// creamos lista de facturas rectificadas. ServicioVerifactu.IDFacturaARType facSust = new ServicioVerifactu.IDFacturaARType();//rellenamos la primera facSust.FechaExpedicionFactura = "FECHA"; //Fecha de emision factura sustituida facSust.IDEmisorFactura = Program.configTaller.Nif;//Nif expedidor. facSust.NumSerieFactura = "Num Serie"; //Numero de serie factura sustituida listFacturasRectificadas[1] = facSust; //le asignamos una por una las facturas rectificadas altaFactura.FacturasSustituidas = listFacturasRectificadas; //Asignamos al mandato //creamos desglose de la rectificacion con los totales a rectificar ServicioVerifactu.DesgloseRectificacionType desgloseRectificacion = new ServicioVerifactu.DesgloseRectificacionType(); desgloseRectificacion.BaseRectificada = ""; // Cuota base a rectificar desgloseRectificacion.CuotaRecargoRectificado = "";// Hay recargo equivalencia ?? desgloseRectificacion.CuotaRectificada = ""; //Cuota iva rectificada; altaFactura.ImporteRectificacion = desgloseRectificacion; // asignamos importe de la rectificacion */ //Asignamos la fecha en que se izo la operacion si no es en la misma que se expide la factura, en este caso si es la misma, si fuera de reparacion puede variar altaFactura.FechaOperacion = fechaFactura.Text.Replace("/", "-"); //Asignamos motivo descripcion de la operacion , en este caso venta de materiales; altaFactura.DescripcionOperacion = "Venta de materiales servidos.";// en caso de reparacion de vehiculo asignar aqui la reparacion. //Es factura simplificada s/n altaFactura.FacturaSimplificadaArt7273 = ServicioVerifactu.SimplificadaCualificadaType.N; //Es factura sin identificar destinatario? s/n altaFactura.FacturaSinIdentifDestinatarioArt61d = ServicioVerifactu.CompletaSinDestinatarioType.N; //por tercero ?? //altaFactura.EmitidaPorTerceroODestinatario = ServicioVerifactu.TercerosODestinatarioType.T; /* // aqui se consignaria todo lo de terceros. ServicioVerifactu.PersonaFisicaJuridicaType Tercero = new ServicioVerifactu.PersonaFisicaJuridicaType(); Tercero.NombreRazon = ""; ServicioVerifactu.IDOtroType idTercero = new ServicioVerifactu.IDOtroType(); idTercero.CodigoPais = ServicioVerifactu.CountryType2.ES; idTercero.ID = "nif"; //identificador idTercero.IDType = ServicioVerifactu.PersonaFisicaJuridicaIDTypeType.Item02; Tercero.Item = idTercero; altaFactura.Tercero = Tercero; */ int numDestinatarios = 1; ServicioVerifactu.PersonaFisicaJuridicaType[] destinatarios = new ServicioVerifactu.PersonaFisicaJuridicaType[numDestinatarios];//lista de destinatarios, para mi siempre 1 //primer destinatario ServicioVerifactu.PersonaFisicaJuridicaType destinatario = new ServicioVerifactu.PersonaFisicaJuridicaType(); //creamos nuevo destinatario if (cmbPais.Text != "ESPAÑA" || _documento.Text != "NIF-IVA") { ServicioVerifactu.IDOtroType idOtro = new ServicioVerifactu.IDOtroType(); destinatario.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text; idOtro.CodigoPais = ServicioVerifactu.CountryType2.ES;// hallar el pais idOtro.ID = Dni.Text; idOtro.IDType = tipoPersona(_documento.SelectedIndex); destinatario.Item = idOtro; } else { //ServicioVerifactu.PersonaFisicaJuridicaESType cliente = new ServicioVerifactu.PersonaFisicaJuridicaESType(); destinatario.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text; //cliente.NIF = Dni.Text; //cliente.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text; destinatario.Item = Dni.Text; //cliente; } destinatarios[0] = destinatario; //se los asignamos a la factura altaFactura.Destinatarios = destinatarios; // ahora creamos el desglose uno por tipo de iva ServicioVerifactu.DetalleType[] desgloses = new ServicioVerifactu.DetalleType[numeroIvas]; //iva 21% if (asignado21) { ServicioVerifactu.DetalleType tipo21 = new ServicioVerifactu.DetalleType(); tipo21.Impuesto = ServicioVerifactu.ImpuestoType.Item01; tipo21.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general tipo21.ClaveRegimenSpecified = true; tipo21.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo... tipo21.TipoImpositivo = "21.00"; tipo21.BaseImponibleOimporteNoSujeto = (base21 + totalPortes).ToString("F2").Replace(",", ".");// impon21.Text.Replace(",", ".").Replace(" €", ""); bases = bases + base21 + totalPortes;// float.Parse(impon21.Text.Replace(" €","")); tipo21.CuotaRepercutida = float.Parse(cuota21.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// cuota21.Text.Replace(",", ".").Replace(" €", ""); cuotas = cuotas + float.Parse(cuota21.Text.Replace(" €", "")); desgloses[numDetalle] = tipo21; numDetalle++; } //iva10% if (asignado10) { ServicioVerifactu.DetalleType tipo10 = new ServicioVerifactu.DetalleType(); tipo10.ClaveRegimenSpecified = true; tipo10.Impuesto = ServicioVerifactu.ImpuestoType.Item01; tipo10.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general tipo10.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo... tipo10.TipoImpositivo = "10.00"; tipo10.BaseImponibleOimporteNoSujeto = float.Parse(impon10.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// impon10.Text.Replace(",", ".").Replace(" €", ""); bases = bases + float.Parse(impon10.Text.Replace(" €", "")); tipo10.CuotaRepercutida = float.Parse(cuota10.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// cuota10.Text.Replace(",", ".").Replace(" €", ""); cuotas = cuotas + float.Parse(cuota10.Text.Replace(" €", "")); desgloses[numDetalle] = tipo10; numDetalle++; } //Iva4% if (asignado4) { ServicioVerifactu.DetalleType tipo04 = new ServicioVerifactu.DetalleType(); tipo04.Impuesto = ServicioVerifactu.ImpuestoType.Item01; tipo04.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general tipo04.ClaveRegimenSpecified = true; tipo04.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo... tipo04.TipoImpositivo = "04.00"; tipo04.BaseImponibleOimporteNoSujeto = float.Parse(impon4.Text.Replace(" €", "")).ToString("F2").Replace(",", "."); //impon4.Text.Replace(",", ".").Replace(" €", ""); bases = bases + float.Parse(impon4.Text.Replace(" €", "")); tipo04.CuotaRepercutida = float.Parse(cuota10.Text.Replace(" €", "")).ToString("F2").Replace(",", "."); // cuota4.Text.Replace(",", ".").Replace(" €", ""); cuotas = cuotas + float.Parse(cuota4.Text.Replace(" €", "")); desgloses[numDetalle] = tipo04; numDetalle++; } //sin iva if (asignado0) { ServicioVerifactu.DetalleType tipo0 = new ServicioVerifactu.DetalleType(); tipo0.Impuesto = ServicioVerifactu.ImpuestoType.Item01; tipo0.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general tipo0.ClaveRegimenSpecified = true; tipo0.Item = ServicioVerifactu.CalificacionOperacionType.N1;//si esta exenta tipo0.TipoImpositivo = "0.00"; tipo0.BaseImponibleOimporteNoSujeto = float.Parse(impon0.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// impon0.Text.Replace(",", ".").Replace(" €", ""); bases = bases + float.Parse(impon0.Text.Replace(" €", "")); //tipo0.CuotaRepercutida = cuota0.Text; desgloses[numDetalle] = tipo0; numDetalle++; } // se lo asignamos a la factura altaFactura.Desglose = desgloses; //asignamos total impuestos altaFactura.CuotaTotal = cuotas.ToString("F2").Replace(",", "."); total = cuotas + bases; //asignamos total factura; altaFactura.ImporteTotal = total.ToString("F2").Replace(",", "."); //creamos el encadenamiento ServicioVerifactu.RegistroFacturacionAltaTypeEncadenamiento cadenaFactura = new ServicioVerifactu.RegistroFacturacionAltaTypeEncadenamiento(); Huella huella = new Huella(); HuellaVerifactu huellaAnterior = new HuellaVerifactu(); string _huella = ""; if (huella.numeroHash() > 0) { ServicioVerifactu.EncadenamientoFacturaAnteriorType anterior = new ServicioVerifactu.EncadenamientoFacturaAnteriorType(); huellaAnterior = huella.huellaAnterior(); anterior.FechaExpedicionFactura = huellaAnterior.FechaFactura; anterior.IDEmisorFactura = huellaAnterior.IdEmisor; anterior.NumSerieFactura = huellaAnterior.NumFactura; anterior.Huella = huellaAnterior.Huella; _huella = huellaAnterior.Huella; cadenaFactura.Item = anterior; } else { cadenaFactura.Item = ServicioVerifactu.PrimerRegistroCadenaType.S; } altaFactura.Encadenamiento = cadenaFactura; //ahora identificamos el software ServicioVerifactu.SistemaInformaticoType programaFacturacion = new ServicioVerifactu.SistemaInformaticoType(); programaFacturacion.NombreSistemaInformatico = "Facturas Taller 2024";//nombre programa programaFacturacion.NombreRazon = " "; programaFacturacion.Item = " "; programaFacturacion.Version = Program.version; programaFacturacion.IdSistemaInformatico = "A1"; programaFacturacion.NumeroInstalacion = Program.numeroInstalacion;//numero de instalacion programaFacturacion.TipoUsoPosibleSoloVerifactu = ServicioVerifactu.SiNoType.S;//es verifactu programaFacturacion.TipoUsoPosibleMultiOT = ServicioVerifactu.SiNoType.N;//varias empresas a la vez programaFacturacion.IndicadorMultiplesOT = ServicioVerifactu.SiNoType.N; //ServicioVerifactu.PersonaFisicaJuridicaType[] Destinatarios = new ServicioVerifactu.PersonaFisicaJuridicaType[1]; altaFactura.SistemaInformatico = programaFacturacion;//asignamos tipo systema altaFactura.TipoHuella = ServicioVerifactu.TipoHuellaType.Item01;//solo se admite un tipo var fechora = DateTime.Now; timeStamp = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK"); altaFactura.FechaHoraHusoGenRegistro = timeStamp;// - new TimeSpan(0, 0, 0, 0, fechora.TimeOfDay.Milliseconds); //timeStamp = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK"); altaFactura.Huella = huella.creaHuellaFactura(Program.configTaller.Nif, numFactura, fechaFactura.Text, tipoFactura, cuotas.ToString("F2").Replace(",", "."), total.ToString("F2").Replace(",", "."), _huella, timeStamp);//asignamos huella //registroFactura[1].Item = altaFactura; ServicioVerifactu.RegistroFacturaType[] fac = new ServicioVerifactu.RegistroFacturaType[1]; //fac.Initialize(); fac[0] = new ServicioVerifactu.RegistroFacturaType(); fac[0].Item = altaFactura; facAPresentar.RegistroFactura = fac; //ServicioVerifactu.RegFactuSistemaFacturacionRequest envio = new ServicioVerifactu.RegFactuSistemaFacturacionRequest(); //envio.RegFactuSistemaFacturacion = facAPresentar; ///////////////////////////// <--- Prueba de serializar la factura ---> XmlSerializer serializaFactura = new XmlSerializer(typeof(ServicioVerifactu.RegFactuSistemaFacturacion)); SoapAttributes soap = new SoapAttributes(); string facXml = ""; using (var xmlw = new StringWriter()) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; using (XmlWriter writter = XmlWriter.Create(xmlw, settings)) { serializaFactura.Serialize(writter, facAPresentar); facXml = xmlw.ToString(); } } System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; RegFactuSistemaFacturacionResponse response = new ServicioVerifactu.RegFactuSistemaFacturacionResponse(); // response.RespuestaRegFactuSistemaFacturacion = respuesta; ServicioVerifactu.RegFactuSistemaFacturacionRequest req = new ServicioVerifactu.RegFactuSistemaFacturacionRequest(facAPresentar); req.RegFactuSistemaFacturacion.Cabecera = cabecera; ServicioVerifactu.X509DataType x59 = new ServicioVerifactu.X509DataType(); ServicioVerifactu.RSAKeyValueType key = new ServicioVerifactu.RSAKeyValueType(); sfPortTypeVerifactuClient client = new ServicioVerifactu.sfPortTypeVerifactuClient(Program.enlaceVerifactu); System.ServiceModel.Description.ClientCredentials credenciales = new System.ServiceModel.Description.ClientCredentials(); //client.ClientCredentials.UserName.UserName = Program.configTaller.Nif; client.ClientCredentials.ClientCertificate.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Program.certificado, Program.passcertificado); client.ClientCredentials.UseIdentityConfiguration = true; client.ClientCredentials.SupportInteractive = true; //client.ClientCredentials.ServiceCertificate.DefaultCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Program.certificado, Program.passcertificado); string test = ""; //client.Open(); RespuestaRegFactuSistemaFacturacionType retorno = new RespuestaRegFactuSistemaFacturacionType(); try { retorno = client.RegFactuSistemaFacturacion(facAPresentar); } Recuerden al importar el webservice cambiar en reference System.DateTyme por string, hay un fallo al serializar la fecha , incluye milisegundos lo que da error, esta mas o menos explicado. Simplemente han de cambiar de donde rellenar los campos, y por ejemplo si envian varios registros a la vez tenerlño en cuenta. |
#3120
|
||||
|
||||
Hola, esta parte de aqui,
Código:
string facXml = ""; using (var xmlw = new StringWriter()) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; using (XmlWriter writter = XmlWriter.Create(xmlw, settings)) { serializaFactura.Serialize(writter, facAPresentar); facXml = xmlw.ToString(); } } |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Hijo de Informáticos | gluglu | Humor | 3 | 13-03-2007 11:05:35 |
Adictos informaticos ... | Trigger | Humor | 2 | 11-10-2004 12:18:32 |
Nosotros los Informáticos | Trigger | Humor | 1 | 10-10-2004 14:58:09 |
Patrón de los Informáticos. | obiwuan | Varios | 20 | 10-09-2003 14:44:54 |
Chistes Informaticos | jhonny | Humor | 2 | 11-08-2003 21:59:09 |
![]() |
|