Cita:
Empezado por b4aronDeLaBirr4
podrías postear el fichero XML que envías
|
Cita:
Empezado por Neftali [Germán.Estévez]
¿puedes poner el fichero que estás enviando?
|
Es un poco tocho :-(. Ahí va. He cambiado/quitado algún dato para "anonimizarlo" pero la estructura se mantiene
Código:
<?xml version="1.0" encoding="utf-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
<Cabecera>
<IDVersionTBAI>1.2</IDVersionTBAI>
</Cabecera>
<Sujetos>
<Emisor>
<NIF>xxxxxxxxx</NIF>
<ApellidosNombreRazonSocial>Empresa para Desarrollo</ApellidosNombreRazonSocial>
</Emisor>
<Destinatarios>
<IDDestinatario>
<IDOtro>
<CodigoPais>DE</CodigoPais>
<IDType>03</IDType>
<ID>U85XXXXX</ID>
</IDOtro>
<ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
<CodigoPostal>28036</CodigoPostal>
<Direccion>C/ Inexistente. Madrid. ESP</Direccion>
</IDDestinatario>
</Destinatarios>
<VariosDestinatarios>N</VariosDestinatarios>
<EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
</Sujetos>
<Factura>
<CabeceraFactura>
<SerieFactura>2021-</SerieFactura>
<NumFactura>0008</NumFactura>
<FechaExpedicionFactura>27-05-2021</FechaExpedicionFactura>
<HoraExpedicionFactura>00:00:00</HoraExpedicionFactura>
<FacturaSimplificada>N</FacturaSimplificada>
<FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
</CabeceraFactura>
<DatosFactura>
<FechaOperacion>27-05-2021</FechaOperacion>
<DescripcionFactura></DescripcionFactura>
<DetallesFactura>
<IDDetalleFactura>
<DescripcionDetalle>Un servicio</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>2000.00000000</ImporteUnitario>
<Descuento>0.00</Descuento>
<ImporteTotal>2420.00</ImporteTotal>
</IDDetalleFactura>
<IDDetalleFactura>
<DescripcionDetalle>Producto 1</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>5.83710987</ImporteUnitario>
<Descuento>1.17</Descuento>
<ImporteTotal>5.65</ImporteTotal>
</IDDetalleFactura>
<IDDetalleFactura>
<DescripcionDetalle>Producto 2</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>2363.79000000</ImporteUnitario>
<Descuento>756.41</Descuento>
<ImporteTotal>1944.93</ImporteTotal>
</IDDetalleFactura>
<IDDetalleFactura>
<DescripcionDetalle>Producto 3 (Exento)</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>200.00000000</ImporteUnitario>
<Descuento>0.00</Descuento>
<ImporteTotal>200.00</ImporteTotal>
</IDDetalleFactura>
<IDDetalleFactura>
<DescripcionDetalle>Producto 4 (No sujeto)</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>400.00000000</ImporteUnitario>
<Descuento>0.00</Descuento>
<ImporteTotal>400.00</ImporteTotal>
</IDDetalleFactura>
<IDDetalleFactura>
<DescripcionDetalle>Producto 5</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>79.80172200</ImporteUnitario>
<Descuento>15.96</Descuento>
<ImporteTotal>77.25</ImporteTotal>
</IDDetalleFactura>
</DetallesFactura>
<ImporteTotalFactura>4543.04</ImporteTotalFactura>
<RetencionSoportada>0.00</RetencionSoportada>
<Claves>
<IDClave>
<ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
</IDClave>
</Claves>
</DatosFactura>
<TipoDesglose>
<DesgloseTipoOperacion>
<PrestacionServicios>
<Sujeta>
<NoExenta>
<DetalleNoExenta>
<TipoNoExenta>S1</TipoNoExenta>
<DesgloseIVA>
<DetalleIVA>
<BaseImponible>1800.00</BaseImponible>
<TipoImpositivo>21.00</TipoImpositivo>
<CuotaImpuesto>378.00</CuotaImpuesto>
<TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
<CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
<OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
</DetalleIVA>
</DesgloseIVA>
</DetalleNoExenta>
</NoExenta>
</Sujeta>
</PrestacionServicios>
<Entrega>
<Sujeta>
<Exenta>
<DetalleExenta>
<CausaExencion>E1</CausaExencion>
<BaseImponible>180.00</BaseImponible>
</DetalleExenta>
</Exenta>
<NoExenta>
<DetalleNoExenta>
<TipoNoExenta>S1</TipoNoExenta>
<DesgloseIVA>
<DetalleIVA>
<BaseImponible>1508.30</BaseImponible>
<TipoImpositivo>21.00</TipoImpositivo>
<CuotaImpuesto>316.74</CuotaImpuesto>
<TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
<CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
<OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
</DetalleIVA>
</DesgloseIVA>
</DetalleNoExenta>
</NoExenta>
</Sujeta>
<NoSujeta>
<DetalleNoSujeta>
<Causa>OT</Causa>
<Importe>360.00</Importe>
</DetalleNoSujeta>
</NoSujeta>
</Entrega>
</DesgloseTipoOperacion>
</TipoDesglose>
</Factura>
<HuellaTBAI>
<EncadenamientoFacturaAnterior>
<SerieFacturaAnterior>2021-</SerieFacturaAnterior>
<NumFacturaAnterior>0007</NumFacturaAnterior>
<FechaExpedicionFacturaAnterior>13-03-2021</FechaExpedicionFacturaAnterior>
<SignatureValueFirmaFacturaAnterior>asdf</SignatureValueFirmaFacturaAnterior>
</EncadenamientoFacturaAnterior>
<Software>
</Software>
</HuellaTBAI>
<ds:Signature xmlns:ds="h t t p://w w w . w3.org/2000/09/xmldsig#" Id="Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="h t t p://w w w . w3.org/TR/2001/REC-xml-c14n-20010315" /><ds:SignatureMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmldsig-more#rsa-sha256" /><ds:Reference Id="Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8" URI=""><ds:Transforms><ds:Transform Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#enveloped-signature" /></ds:Transforms><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>o1QqNl5sJpAl65C/BqAYVhusYNSi6ohFRmcOlj/XvS0=</ds:DigestValue></ds:Reference><ds:Reference Id="ReferenceKeyInfo" URI="#KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>9Ot9CoT4axGDWrd2B2KUoiGUM9dotSbXN7VTW1ZSEzg=</ds:DigestValue></ds:Reference><ds:Reference Type="h t t p://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>ou5WE9zmPnbJIGd/8a1PdT8yjojsvnRHQL5mU/CUB6Y=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id="SignatureValue-de680881-c7b4-47c6-aba5-6587d516d7f8">ndpqqvNMKU7TLGzTuFaA34shuQMMV6D8i18U21wxr4uPVCOh79W6ws9Uaf/9v2xLeAJG0Xuxb7Tun5akz6v+lw/JthiulnG23G8No7FARMBi3/JvqPfWQT/3dZs/858JQRg5qOBSxy1UiXHrgHk8mwzAw8PqvmJX+Ah9RsBM9nHmvDW/Ezj+D6SgTinwUbe5AgxZ2FCubMpEf4BA0oBmkNgno4Gu62huvYYcm/XTfzuBgJsPWmF8Y2AB3YlMEZBqdZT7uSJYFoYLbku26UV8WQU9eQbErxFPI+3eiqqq+g0cKlq0mYmeQms9NAjWjJyOEYAZy6noD1OxghMzhsmbWw==</ds:SignatureValue><ds:KeyInfo Id="KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>qqnHp05M8zTtA1mOGyn52Zg2MxIdVoq0i+nq1UBsyD0YTbDvrFxorop1lVmwD9zFcU7g97YYHzUh6ZKzrDBxRR5DuEj7ZWxmM8zdrUE4qj4RPaEn56yBspcfsXAnAElWhi8ZO6upkdwezKplh0sIv9rC3yVEmenUA+t3vpjvUjuVI83M8E2OmlO9wspX7oAagyG86X79QLoUCiMNaklhtts/bAhjaUf1NjiByA1oVJ/h5vPXRmjzIMSYOG4Nqx6oDS4EDjzodr9qWWR/rO/y8pAANFvhPviGC30oLEDU9QeImrYt9hLRHiI3Z3f+k8bthyY/NHw97LARgkl46UkQOQ==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id="XadesObjectId-57c1a5af-ffe1-461d-88df-f9eff65f7ae3"><xades:QualifyingProperties xmlns:xades="h t t p://uri.etsi.org/01903/v1.3.2#" Id="QualifyingProperties-1175f181-69af-4b92-89cd-01f8370fc991" Target="#Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedProperties Id="SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedSignatureProperties><xades:SigningTime>2021-07-22T07:25:38+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>4BZFYhzQCbqva/Vw8wyM2GXhf8lML3xaiMioujojtqQ=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=AC FNMT Usuarios, OU=Ceres, O=FNMT-RCM, C=ES</ds:X509IssuerName><ds:X509SerialNumber>348708523848XXXXXXXXXXXX13XX4566539550</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier><xades:SignaturePolicyId><xades:SigPolicyId><xades:Identifier>h t t p://ticketbai.eus/politicafirma</xades:Identifier><xades:Description /></xades:SigPolicyId><xades:SigPolicyHash><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#sha1" /><ds:DigestValue>Ohixl6upD6av8N7pEvDABhEL6hM=</ds:DigestValue></xades:SigPolicyHash></xades:SignaturePolicyId></xades:SignaturePolicyIdentifier><xades:SignerRole><xades:ClaimedRoles><xades:ClaimedRole>emisor</xades:ClaimedRole><xades:ClaimedRole>sujeto</xades:ClaimedRole><xades:ClaimedRole>SERIALNUMBER</xades:ClaimedRole></xades:ClaimedRoles></xades:SignerRole></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8"><xades:MimeType>text/xml</xades:MimeType><xades:Encoding>UTF-8</xades:Encoding></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object></ds:Signature></T:TicketBai>
Cita:
Empezado por b4aronDeLaBirr4
qué certificado estás usando
|
Uso mi certificado personal, de la FNMT
Cita:
Empezado por b4aronDeLaBirr4
el orden de los elementos en el XML es importante que sea acorde al XSD
|
Esto está revisado. Con la segunda opción me dió algunos errores de no concordancia con el XSD que corregí, así que aquí no creo que haya problema.
Cita:
Empezado por Neftali [Germán.Estévez]
El certificado debe ser válido (de producción por decirelo así), no valen certificados de prueba. ¿Qué tipo de certificado estás utilizando?
|
Cita:
Empezado por b4aronDeLaBirr4
que la petición de alta al servicio la estés realizando con el certificado también (además de firmar con él)
|
Creo que aquí está el problema (para el segúndo método). Para el envío no usaba el certificado del alta en el servicio ¡Gracias!
Cita:
Empezado por b4aronDeLaBirr4
podrías probar en POSTMAN previamente o algo. Yo hice esto para ir descartando estos errores, te lo recomiendo.
|
No lo he usado nunca. Le echaré un vistazo. Gracias.
Cita:
Empezado por b4aronDeLaBirr4
Por cierto, cómo estás firmando el XML? (Esto ya porque a mí me interesa ver otras opciones jeje)
|
Lo firmo con la librería FirmaXadesNet del Ayuntamiento de Cartagena (h t t p s://w w w . administracionelectronica.gob.es/ctt/firmaxadesnet). No hay documentación para ella pero en el código fuente (que también puedes descargar) tienes ejemplos de uso. Si quieres probarla (si no la usas ya) y no te aclaras, puedo poner el borrador que tengo para la firma; es más: lo pongo ya:
Código:
public void FirmaDoc()
{
XadesService xadesService = new XadesService();
SignatureParameters parametros = new SignatureParameters();
parametros.SignaturePolicyInfo = new SignaturePolicyInfo();
parametros.SignaturePolicyInfo.PolicyIdentifier = "h t t p://ticketbai.eus/politicafirma";
parametros.SignaturePolicyInfo.PolicyHash = "Ohixl6upD6av8N7pEvDABhEL6hM=";
parametros.SignaturePackaging = SignaturePackaging.ENVELOPED;
parametros.DataFormat = new DataFormat();
parametros.DataFormat.MimeType = "text/xml";
parametros.SignerRole = new SignerRole();
parametros.SignerRole.ClaimedRoles.Add("emisor");
System.Security.Cryptography.X509Certificates.X509Certificate2 certificado;
certificado = FirmaXadesNet.Utils.CertUtil.SelectCertificate();
using (parametros.Signer = new Signer(certificado))
{
using (FileStream fs = new FileStream(_ficheroXml, FileMode.Open))
{
SignatureDocument documentoFirma = xadesService.Sign(fs, parametros);
documentoFirma.Save(Path.Combine(Path.GetDirectoryName(_ficheroXml), Path.GetFileNameWithoutExtension(_ficheroXml) + ".XSIG"));
MessageBox.Show("Fichero guardado correctamente.");
}
}
}
Cita:
Empezado por Neftali [Germán.Estévez]
También puedes comprar tú mismo la estructura del que estás enviando con algunos de los ejemplos que hay en los mensajes del foro o los que te puedes descargar, a ver si te estás olvidando algún nodo (ya no sólo de los datos, sino de las firmas,...)
|
La verdad es que he mirado para ver si veía ejemplos (sobre todo de firmas) y no he visto nada más que algunas líneas sueltas... :-(
Cita:
Empezado por Neftali [Germán.Estévez]
También puedes escribirles un mail con el fichero que estás enviando y los errores que te dan; Para el primer caso te dirán qué te falta y para el segundo caso, te darán de alta el certificado (si es necesario) y lo asociarán a los datos que estás usando para el envío (NIF / RAZON SOCIAL).
|
Gracias Neftalí. Voy a hacerlo también para ver si resuelvo el primer caso. El segundo con tus aportaciones y las de b4aronDeLaBirr4 creo que está resuelto. He hecho una subida tras cambiar el certificado de firma y ahora el error da pie a entender que ¡sí ha funcionado!. Este es el resultado:
Código:
<ResultadosValidacion>
<Codigo>005</Codigo>
<Descripcion>Error: Fichero de alta TicketBAI ya registrado en el sistema.</Descripcion>
<Azalpena>Errorea: TicketBAI fitxategia sisteman erregistratuta dago jada.</Azalpena>
</ResultadosValidacion>
Probaré con otro documento y os cuento.