FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1021
|
||||
|
||||
Oh vale, yo es que Bizkaia no he probado todavía ya que estoy con lo de la firma pero ánimo, a ver si nos enteramos jeje
|
#1022
|
||||
|
||||
Firma XML Chilkat
Buenas, gente!
Estoy ahora intentando firmar el XML con Chilkat, y me entran dudas en alguna cosa. Yo utilizo la herramienta para que me genere el código C# a partir de un XML firmado (que he cogido de un ejemplo de ellos). Hablando del XML de Gipuzkoa, me genera, en parte, lo siguiente: Código PHP:
|
#1023
|
|||
|
|||
Cita:
Yo uso CR8.5 y para generar el QR encontre un dll que lo genera y permite guardarlo como imagen, ya que la versión de CR no permite crear QR. Si necesitas ayuda te puedo pasar ejemplos para el envío. Saludos |
#1024
|
||||
|
||||
Cita:
2. Correcto. Lo puedes firmar con autofirma o con otro sistema. 3 Tienes que formar el TBAI sacando lo que dice la norma del fichero que acabas de generar y formar el codigo QR. Dentro de la factura en papel lo debes poner, ya sea en jpg o como tu quieras. Pero tiene que estar en la imagen de la factura, pdf, etc.... 4 Ese fichero hay que enviarlo a hacienda. Que yo sepa no hay ninguna forma gratuita de firmar los exe. El de la fnmt no sirve. Yo el mas economico que he encontrado es este https://www.ksoftware.net/code-signing-certificates/ |
#1025
|
|||
|
|||
Cita:
Una pregunta, las librerias de Chilkat NO son gratuitas, ¿verdad? o ¿si? |
#1026
|
|||
|
|||
Cita:
No, pero no son muy caras, para un empresa, unos 289$ licencia de por vida. Te van ha facilitar muchisimo la vida. |
#1027
|
|||
|
|||
OK, muchas gracias
|
#1028
|
||||
|
||||
Loados los hados del VB6
Cita:
aquí estoy .... Saludos y gracias de antemano |
#1029
|
||||
|
||||
Yo mismo recomendé en su momento Postman para hacer las pruebas y ahora he probado envíos a Vizcaya con Postman y también me están dando problemas. La verdad es que en su momento fue algo simple, y no se si ha cambiado algo, pero no consigo respuesta. He realizado una prueba sencilla con insomnia (que es similar a Postman) y me ha funcionado sin problemas (como en su dia lo hizo Postman), así que os dejo los pasos. 1) descargar insomnia (Insomnia.Core-2021.4.1.exe): https://insomnia.rest/download 2) Ejecutar el fichero directamente. Se abre en programa con un entorno de pruebas. 3) Al entrar la primera vez, aceptar los dialogos iniciales y acceder al Dashboard (o crear uno nuevo) 4) Configurar el certificado cliente desde Dashboard/Insomnia/Collection settings: Una vez creado debe aparecer así: 5) Montar una nueva petición (POST) con la URL de Vizcaya. En el Body, seleccionar "binary file" y seleccionar nuestro fichero de LROE codificado como gzip Sólo añadir el fichero, detecta el tipo y nos pregunta si cambia esto; Le decimos que si: 6) En Header, añadimos los parámetros que nos piden: Y realizamos en SEND. 7) Obtenemos respuesta: Y en el Header de la Response, ya podemos ver respuesta de Batuz. En mi caso, la factura era incorrecta y eso es lo que me están diciendo. Esto tan sencillo (o muy similar) funcionaba en Postman y ahora no se porqué está dando problemas. Si lo queréis probar con insomnia a ver si os funciona, ya diréis cual es el resultado y si os da problemas.
__________________
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. Última edición por Neftali [Germán.Estévez] fecha: 14-07-2021 a las 11:41:01. |
#1030
|
|||
|
|||
Cita:
Bienvenido a este fascinante mundo del TicketBAI Efectivamente, los pasos (en el caso de arquitectura de escritorio) son: 1.- Crear el XML de la factura a emitir, incluyendo (además de los datos habituales de la factura): - Datos de la última factura emitida: serie, número, fecha y 100 primeros caracteres de su firma - Datos del software garante (licencia TBAI, NIF de la entidad desarrolladora, nombre del software y versión). - Nº de serie del dispositivo, que puede ser uno de éstos: - Nº de serie del equipo - Nº de serie de la placa base - Dirección MAC de red - IMEI del dispositivo móvil (en el caso de un dispositivo móvil) 2.- Firmar el XML con un certificado válido. Por ejemplo con un certificado de dispositivo. (Los certificados de dispositivo de IZENPE para TicketBAI son gratuitos y tienen una validez de 10 años) 3.- Obtener los códigos TBAI y QR El código TBAI lleva algunos datos de la factura + los 13 primeros dígitos de la firma + un código CRC-8 El código QR lleva datos del código TBAI + otro código CRC-8 4.- Imprimir o guardar la factura con los códigos TBAI y QR insertados con el tamaño y posición que se detalla en la normativa TicketBAI 5.- Enviar el XML firmado de la factura a la Hacienda Foral correspondiente. En el caso de Álava o Gipuzkoa, de forma inmediata. En el caso de Bizkaia, dentro del plazo de declaraciones de IVA (o de SII si se está obligado) en formato capítulo 1.1 del LROE (modelo 140 para autónomos o modelo 240 para empresas) Aunque no tengo ni idea de Windows, (mis aplicaciones TicketBAI no son de arquitectura de escritorio sino de servidor y en Linux), sí que entendí que en el caso de que se instale la aplicación de facturación en un PC con Windows, el fichero .EXE debe ir firmado con un certificado de aplicación (que no son ni los de IZENPE ni los de FNMT). Saludos Última edición por Sistel fecha: 14-07-2021 a las 11:42:14. |
#1031
|
||||
|
||||
Se puede guardar la respuesta desde:
Os da por defecto un XML, debéis guardarlo como GZIP; Esto está relacionado con el "bug" o "caracteristica" (para la gente de Batuz) de que la respuesta llega comprimida 2 veces. Si lo guardáis en formato Gzip, tenéis el fichero de respuesta con el XML y la estructura de la documentación.
__________________
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. |
#1032
|
||||
|
||||
Cita:
Lo siento, todavía no. Pero no parece muy complicado, ¿no?
__________________
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. |
#1033
|
|||
|
|||
Cita:
Código:
Attribute VB_Name = "TicketBAI" Option Explicit Public Function GenerarXMLTbai() '(ejercicio As Integer, serie As String, factura As Long) As Boolean Dim success As Long Dim rsFactura As Recordset Dim sSQL As String success = 1 ' Create the XML to be signed... Dim xmlToSign As New ChilkatXml xmlToSign.Tag = "T:TicketBai" success = xmlToSign.AddAttribute("xmlns:T", "urn:ticketbai:emision") xmlToSign.UpdateChildContent "Cabecera|IDVersionTBAI", "1.2" xmlToSign.UpdateChildContent "Sujetos|Emisor|NIF", "B00000034" xmlToSign.UpdateChildContent "Sujetos|Emisor|ApellidosNombreRazonSocial", "HOTEL ADIBIDEZ" xmlToSign.UpdateChildContent "Sujetos|Destinatarios|IDDestinatario|NIF", "B26248146" xmlToSign.UpdateChildContent "Sujetos|Destinatarios|IDDestinatario|ApellidosNombreRazonSocial", "EMPRESA LANTEGIA" xmlToSign.UpdateChildContent "Factura|CabeceraFactura|SerieFactura", "B2022" xmlToSign.UpdateChildContent "Factura|CabeceraFactura|NumFactura", "0100" xmlToSign.UpdateChildContent "Factura|CabeceraFactura|FechaExpedicionFactura", "30-01-2021" xmlToSign.UpdateChildContent "Factura|CabeceraFactura|HoraExpedicionFactura", "18:00:17" xmlToSign.UpdateChildContent "Factura|DatosFactura|DescripcionFactura", "Servicios Hotel" xmlToSign.UpdateChildContent "Factura|DatosFactura|DetallesFactura|IDDetalleFactura|DescripcionDetalle", "" xmlToSign.UpdateChildContent "Factura|DatosFactura|DetallesFactura|IDDetalleFactura|Cantidad", "1" xmlToSign.UpdateChildContent "Factura|DatosFactura|DetallesFactura|IDDetalleFactura|ImporteUnitario", "55" xmlToSign.UpdateChildContent "Factura|DatosFactura|DetallesFactura|IDDetalleFactura|Descuento", "0" xmlToSign.UpdateChildContent "Factura|DatosFactura|DetallesFactura|IDDetalleFactura|ImporteTotal", "66.55" xmlToSign.UpdateChildContent "Factura|DatosFactura|ImporteTotalFactura", "66.55" xmlToSign.UpdateChildContent "Factura|DatosFactura|Claves|IDClave|ClaveRegimenIvaOpTrascendencia", "01" xmlToSign.UpdateChildContent "Factura|TipoDesglose|DesgloseFactura|Sujeta|NoExenta|DetalleNoExenta|TipoNoExenta", "S1" xmlToSign.UpdateChildContent "Factura|TipoDesglose|DesgloseFactura|Sujeta|NoExenta|DetalleNoExenta|DesgloseIVA|DetalleIVA|BaseImponible", "55.00" xmlToSign.UpdateChildContent "Factura|TipoDesglose|DesgloseFactura|Sujeta|NoExenta|DetalleNoExenta|DesgloseIVA|DetalleIVA|TipoImpositivo", "21.00" xmlToSign.UpdateChildContent "Factura|TipoDesglose|DesgloseFactura|Sujeta|NoExenta|DetalleNoExenta|DesgloseIVA|DetalleIVA|CuotaImpuesto", "11.55" xmlToSign.UpdateChildContent "HuellaTBAI|EncadenamientoFacturaAnterior|SerieFacturaAnterior", "B2022" xmlToSign.UpdateChildContent "HuellaTBAI|EncadenamientoFacturaAnterior|NumFacturaAnterior", "0099" xmlToSign.UpdateChildContent "HuellaTBAI|EncadenamientoFacturaAnterior|FechaExpedicionFacturaAnterior", "29-01-2022" xmlToSign.UpdateChildContent "HuellaTBAI|EncadenamientoFacturaAnterior|SignatureValueFirmaFacturaAnterior", "BeMkKwXaFsxHQec65SKpVP7EU9o4nUXOx7SAftIToFsxH+2j2tXPXhpBUnS26dhdSpiMl2DlTuqRsFdZfWyYazaGHgSRQHZZAnFt" xmlToSign.UpdateChildContent "HuellaTBAI|Software|LicenciaTBAI", "TBAXXXXX" xmlToSign.UpdateChildContent "HuellaTBAI|Software|EntidadDesarrolladora|NIF", "XXXXXX" xmlToSign.UpdateChildContent "HuellaTBAI|Software|Nombre", "XXXXXXX" xmlToSign.UpdateChildContent "HuellaTBAI|Software|Version", App.Major & "." & App.Minor & "." & App.Revision FirmarXMLTbai xmlToSign End Function Public Function FirmarXMLTbai(xmlToSign As ChilkatXml) As Boolean Dim gen As New ChilkatXmlDSigGen Dim success As Long success = 1 gen.SigLocation = "T:TicketBai" gen.SigLocationMod = 0 gen.SigId = "Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-Signature" gen.SigNamespacePrefix = "ds" gen.SigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#" gen.SigValueId = "Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-SignatureValue" gen.SignedInfoCanonAlg = "C14N" gen.SignedInfoDigestMethod = "sha256" ' Set the KeyInfoId before adding references.. gen.KeyInfoId = "Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-KeyInfo" ' Create an Object to be added to the Signature. Dim object1 As New ChilkatXml object1.Tag = "xades:QualifyingProperties" success = object1.AddAttribute("xmlns:xades", "http://uri.etsi.org/01903/v1.3.2#") success = object1.AddAttribute("Id", "Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-QualifyingProperties") success = object1.AddAttribute("Target", "#Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-Signature") success = object1.AddAttribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#") success = object1.UpdateAttrAt("xades:SignedProperties", 1, "Id", "Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-SignedProperties") object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningTime", "TO BE GENERATED BY CHILKAT" success = object1.UpdateAttrAt("xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestMethod", 1, "Algorithm", "http://www.w3.org/2001/04/xmlenc#sha512") object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestValue", "TO BE GENERATED BY CHILKAT" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509IssuerName", "TO BE GENERATED BY CHILKAT" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509SerialNumber", "TO BE GENERATED BY CHILKAT" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyId|xades:Identifier", "https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyId|xades:Description", "" success = object1.UpdateAttrAt("xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyHash|ds:DigestMethod", 1, "Algorithm", "http://www.w3.org/2001/04/xmlenc#sha256") object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyHash|ds:DigestValue", "Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es=" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyQualifiers|xades:SigPolicyQualifier|xades:SPURI", "https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf" success = object1.UpdateAttrAt("xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat", 1, "ObjectReference", "#Reference-cf54e6a9-7bf2-4128-8cae-474a267a16a1") object1.UpdateChildContent "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:Description", "" success = object1.UpdateAttrAt("xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:ObjectIdentifier|xades:Identifier", 1, "Qualifier", "OIDAsURN") object1.UpdateChildContent "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:ObjectIdentifier|xades:Identifier", "urn:oid:1.2.840.10003.5.109.10" object1.UpdateChildContent "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:ObjectIdentifier|xades:Description", "" object1.UpdateChildContent "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:MimeType", "text/xml" object1.UpdateChildContent "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:Encoding", "" success = gen.AddObject("", object1.GetXml(), "", "") ' -------- Reference 1 -------- success = gen.AddSameDocRef("", "sha512", "C14N", "", "http://www.w3.org/2000/09/xmldsig#Object") success = gen.SetRefIdAttr("", "Reference-cf54e6a9-7bf2-4128-8cae-474a267a16a1") ' -------- Reference 2 -------- success = gen.AddObjectRef("Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-SignedProperties", "sha512", "", "", "http://uri.etsi.org/01903#SignedProperties") ' -------- Reference 3 -------- success = gen.AddSameDocRef("Signature-a53a6ab2-f904-4f7c-be64-603333f651bf-KeyInfo", "sha512", "", "", "") ' Provide a certificate + private key. (PFX password is test123) Dim cert As New ChilkatCert success = cert.LoadPfxFile("ruta.pfx", "1234") If (success <> 1) Then Debug.Print cert.LastErrorText Exit Function End If success = gen.SetX509Cert(cert, 1) gen.KeyInfoType = "X509Data+KeyValue" gen.X509Type = "Certificate" ' Load XML to be signed... Dim sbXml As New ChilkatStringBuilder success = xmlToSign.GetXmlSb(sbXml) gen.Behaviors = "IndentedSignature,TransformSignatureXPath" ' Sign the XML... success = gen.CreateXmlDSigSb(sbXml) If (success <> 1) Then Debug.Print gen.LastErrorText Exit Function End If ' Save the signed XML to a file. success = sbXml.WriteFile("c:\signedXml.xml", "utf-8", 0) 'Debug.Print sbXml.GetAsString() VerificarFirmaXMLTbai sbXml End Function Public Function VerificarFirmaXMLTbai(sbXml As ChilkatStringBuilder) As Boolean Dim verifier As New ChilkatXmlDSig Dim success As Long success = 1 success = verifier.LoadSignatureSb(sbXml) If (success <> 1) Then Debug.Print verifier.LastErrorText Exit Function End If Dim numSigs As Long numSigs = verifier.NumSignatures Dim verifyIdx As Long verifyIdx = 0 Do While verifyIdx < numSigs verifier.selector = verifyIdx Dim verified As Long verified = verifier.VerifySignature(1) If (verified <> 1) Then Debug.Print verifier.LastErrorText Exit Function End If verifyIdx = verifyIdx + 1 Loop Debug.Print "All signatures were successfully verified." End Function Public Sub EnviarXMLTbai() Dim Http As New ChilkatHttp Dim success As Boolean success = Http.SetSslClientCertPfx("ruta.pfx", "1234") If (success = False) Then Debug.Print Http.LastErrorText Exit Sub End If ' Get the XML we wish to send in the body of the request. Dim sbXml As New ChilkatStringBuilder success = sbXml.LoadFile("c:\signedXml.xml", "utf-8") If (success = False) Then Debug.Print ("Failed to load XML that is to be the HTTP request body") Exit Sub End If Dim url As String url = "https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta" Dim bGzip As Boolean bGzip = True Dim resp As ChilkatHttpResponse Set resp = Http.PostXml(url, sbXml.GetAsString, "utf-8") If (Http.LastMethodSuccess = False) Then Debug.Print (Http.LastErrorText) Exit Sub End If Http.ClearHeaders Debug.Print ("response status code: " & resp.StatusCode) ' Examine the response (it is already decompressed) Debug.Print ("response body:") Debug.Print (resp.BodyStr) End Sub |
#1034
|
|||
|
|||
Muchas gracias, pues sí que lo agradecería. Acabo de adquirir la licencia de Chilkat (que justo además la necesitaba también para otra cosa, jejeje )
Cita:
|
#1035
|
|||
|
|||
Cita:
MUCHAS GRACIAS Neftali, intentaré probar con insomnia!!! Última edición por Neftali [Germán.Estévez] fecha: 14-07-2021 a las 13:48:12. Razón: Modificado para eliminar las imágenes duplicadas |
#1036
|
||||
|
||||
Disculpa, a ti no te sale este error al enviar? Me da el fichero como recibido pero me dice lo siguiente:
Código PHP:
|
#1037
|
|||
|
|||
Postman
Me funciona con Insomnia, bueno me dice Error 500 Internal server error:
eus-bizkaia-n3-mensaje-respuesta: El interesado no est� identificado. eus-bizkaia-n3-codigo-respuesta: N3_0000002 Utilizo un certificado de dispositivo, y es su xml de pruebas... entiendo que será por eso... ¿sabeis si en pruebas se puede usar certificado de dispositivo? Pero ya no tengo error 400!! Un saludo, |
#1038
|
||||
|
||||
De lujo compañero !!!!! muy agradecido voy ha probar
|
#1039
|
|||
|
|||
Cita:
Si alguien necesita la estructura de la anulación, emisión o consulta de las emitidas que me diga y le paso ejemplos puesto que en la página de Batuz no existen ejemplos. |
#1040
|
|||
|
|||
Cita:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice | newtron | Internet | 3594 | Hace 3 Semanas 20:44:37 |
Como utilizar la ayuda del nuevo Sistema Operativo | gluglu | Humor | 3 | 24-09-2007 10:39:05 |
Aplicacion Agencia De Viajes | ArdiIIa | Varios | 9 | 20-01-2007 17:49:53 |
El Vasco Aguirre | Al González | La Taberna | 5 | 26-05-2006 10:22:28 |
Microsoft ha lanzado su nuevo sistema operativo | DarkByte | Humor | 0 | 25-01-2004 10:21:14 |
|