Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

thinkows 14-07-2021 12:39:20

Cita:

Empezado por batuzail (Mensaje 541780)
Aqui tienes lo que tengo hasta el momento, está un poco guarrete y con cosas a piñón, ya que estoy de pruebas aún, pero como punto de partida te funcionará, por lo menos para Gipuzkoa, yo tengo que implemetar los tres envíos. Como ves usando Chilkat no es muy complejo, además hay ejemplos y utilidades.

Muy agradecido por la info ... voy a probar^\||/^\||/^\||/^\||/

Neftali [Germán.Estévez] 14-07-2021 12:46:29

Cita:

Empezado por NVS (Mensaje 541784)
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?


Si, nosotros es uno de los que hemos utilizado.
Asegúrate de que te tienen dada de alta y asociado tu certificado de dispositivo a los datos con los que envías.

Si envías un correo te dan de alta si no lo estás.

NVS 14-07-2021 13:03:54

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 541789)
Si, nosotros es uno de los que hemos utilizado.
Asegúrate de que te tienen dada de alta y asociado tu certificado de dispositivo a los datos con los que envías.

Si envías un correo te dan de alta si no lo estás.

Tiene que ser eso, que no lo tengo asociado, voy a pedir que me lo asocien. MUUUCHAS GRACIAS

skatologiko 14-07-2021 13:58:37

Otro problema que estoy teniendo es cuando quiero transmitir una factura de un NIF de fuera de España, que me dice el fichero no cumple el esquema XSD.
¿os ha pasado?

Neftali [Germán.Estévez] 14-07-2021 14:04:48

Cita:

Empezado por skatologiko (Mensaje 541791)
Otro problema que estoy teniendo es cuando quiero transmitir una factura de un NIF de fuera de España, que me dice el fichero no cumple el esquema XSD.
¿os ha pasado?


¿Dónde la estás enviando?
y

¿Qué estás enviando? (puedes poner el trozo del XML)
(sección de <Destinatarios>)

batuzail 14-07-2021 15:29:24

Resuperar ds:SignatureValue
 
Hola,
Alguien sabe como recuperar la firma de un xml firmado con Chilckat?


Saludos

batuzail 14-07-2021 16:09:04

Cita:

Empezado por batuzail (Mensaje 541793)
Hola,
Alguien sabe como recuperar la firma de un xml firmado con Chilckat?


Saludos

Ya lo he encontrado:
Dim xml as new ChilckatXml
.... cargamos el xml

ds_SignatureValue = xml.GetChildContent("ds:Signature|ds:SignatureValue")


Gracias

b4aronDeLaBirr4 14-07-2021 16:59:59

Crc-8
 
Hola!

He utilizado chilkat para firmar el XML pero me surge una duda, el CRC-8 se está realizando automáticamente en algún momento dado? Porque el servidor recibe la factura y me retorna el código TBAI (que contiene 3 dígitos de haber aplicado el CRC-8). Porque vosotros el TBAI lo obtenéis de la respuesta del server o lo formáis manualmente?

skatologiko 14-07-2021 17:24:08

A Guipuzcoa. Si envío un NIF español, sí que llega

<Destinatarios>
<IDDestinatario>
<NIF>NL855820627B01</NIF>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Y me da el siguiente error:
Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NL855820627B01' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.</Descripcion>

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 541792)
¿Dónde la estás enviando?
y

¿Qué estás enviando? (puedes poner el trozo del XML)
(sección de <Destinatarios>)


skatologiko 14-07-2021 20:27:26

Bueno, parece que finalmente sí que consigo enviar el XML, recoger la firma para encadenar y generar el QR (al menos para Guipuzcoa)
Lo que no consigo es que dicho QR sea correcto. No sé si porque estoy obtieniendo el CRC mal, o cual es el motivo. (Y tampoco he visto ninguna url que funcione en todo el hilo)
Me genera la siguiente cadena:
https ://tbai.prep.gipuzkoa.eus/qr/?id=TBAI-B09500307-130521-YiT5C1USVoYiN-002&s=MP&nf=210914&i=5348.20&cr=245
No accede a la factura pero si accedo desde : https ://tbai.prep.gipuzkoa.eus/qr/verificar , ahí si que la encuentra
También he probado con: https ://tbai.egoitza.gipuzkoa.eus/qr/verificar ,pero ahí tampoco la encuentra ¿qué diferencia hay entre un subdominio y el otro?

La función en VB que utilizo para el cálculo del CRC es:

Public Function calculateCRC8(ByVal AppID As String) As String
Dim CRC8 As Byte
Dim i As Integer
Dim j As Integer
Dim AppIDarray() As Byte '<--- explicitly dimensioned as a Byte array to avoid confusion
Dim aidLength As Integer


CRC8 = &HC7

'The AppID is actually bytes stored in hexadecimal in a string. You have to convert them back to bytes before you can run a crc8 on them.
AppIDarray = HexToByte(AppID)
aidLength = UBound(AppIDarray)
For j = 0 To aidLength
CRC8 = CRC8 Xor AppIDarray(j)
For i = 1 To 8
If CRC8 And &H80 Then
'masking off the left-most bit before shifting prevents the Overflow error.
CRC8 = ((&H7F And CRC8) * 2) Xor &H1D
Else
CRC8 = CRC8 * 2
End If
Next i
Next j
calculateCRC8 = CRC8
End Function

Private Function HexToByte(strHex As String) As Byte()
Dim i As Integer
Dim j As Integer
Dim tempByte As Byte
Dim outBytes() As Byte
Dim Char As String
ReDim outBytes(Len(strHex) \ 2 - 1)
For i = 0 To Len(strHex) \ 2 - 1
For j = 0 To 1
Char = Mid(strHex, i * 2 + j + 1, 1)
Select Case Char
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
tempByte = tempByte Or (Asc(Char) - 48)
Case "A", "B", "C", "D", "E", "F":
tempByte = tempByte Or (Asc(Char) - 55)
End Select
If j = 0 Then
tempByte = tempByte * 2 ^ 4
Else
outBytes(i) = tempByte
tempByte = 0
End If
Next
Next
HexToByte = outBytes
End Function

jaiser 15-07-2021 08:04:45

Te paso la que tengo yo hecha en vb.net a ver si te sirve o te da pistas.

Public Shared Function calculatecrc8(ByVal input As String) As String
Dim crc8_table() As Byte = New Byte() {CByte(&H0), CByte(&H7), CByte(&HE), CByte(&H9), CByte(&H1C), CByte(&H1B), CByte(&H12), CByte(&H15), CByte(&H38), CByte(&H3F), CByte(&H36), CByte(&H31), CByte(&H24), CByte(&H23), CByte(&H2A), CByte(&H2D), CByte(&H70), CByte(&H77), CByte(&H7E), CByte(&H79), CByte(&H6C), CByte(&H6B), CByte(&H62), CByte(&H65), CByte(&H48), CByte(&H4F), CByte(&H46), CByte(&H41), CByte(&H54), CByte(&H53), CByte(&H5A), CByte(&H5D), CByte(&HE0), CByte(&HE7), CByte(&HEE), CByte(&HE9), CByte(&HFC), CByte(&HFB), CByte(&HF2), CByte(&HF5), CByte(&HD8), CByte(&HDF), CByte(&HD6), CByte(&HD1), CByte(&HC4), CByte(&HC3), CByte(&HCA), CByte(&HCD), CByte(&H90), CByte(&H97), CByte(&H9E), CByte(&H99), CByte(&H8C), CByte(&H8B), CByte(&H82), CByte(&H85), CByte(&HA8), CByte(&HAF), CByte(&HA6), CByte(&HA1), CByte(&HB4), CByte(&HB3), CByte(&HBA), CByte(&HBD), CByte(&HC7), CByte(&HC0), CByte(&HC9), CByte(&HCE), CByte(&HDB), CByte(&HDC), CByte(&HD5), CByte(&HD2), CByte(&HFF), CByte(&HF8), CByte(&HF1), CByte(&HF6), CByte(&HE3), CByte(&HE4), CByte(&HED), CByte(&HEA), CByte(&HB7), CByte(&HB0), CByte(&HB9), CByte(&HBE), CByte(&HAB), CByte(&HAC), CByte(&HA5), CByte(&HA2), CByte(&H8F), CByte(&H88), CByte(&H81), CByte(&H86), CByte(&H93), CByte(&H94), CByte(&H9D), CByte(&H9A), CByte(&H27), CByte(&H20), CByte(&H29), CByte(&H2E), CByte(&H3B), CByte(&H3C), CByte(&H35), CByte(&H32), CByte(&H1F), CByte(&H18), CByte(&H11), CByte(&H16), CByte(&H3), CByte(&H4), CByte(&HD), CByte(&HA), CByte(&H57), CByte(&H50), CByte(&H59), CByte(&H5E), CByte(&H4B), CByte(&H4C), CByte(&H45), CByte(&H42), CByte(&H6F), CByte(&H68), CByte(&H61), CByte(&H66), CByte(&H73), CByte(&H74), CByte(&H7D), CByte(&H7A), CByte(&H89), CByte(&H8E), CByte(&H87), CByte(&H80), CByte(&H95), CByte(&H92), CByte(&H9B), CByte(&H9C), CByte(&HB1), CByte(&HB6), CByte(&HBF), CByte(&HB8), CByte(&HAD), CByte(&HAA), CByte(&HA3), CByte(&HA4), CByte(&HF9), CByte(&HFE), CByte(&HF7), CByte(&HF0), CByte(&HE5), CByte(&HE2), CByte(&HEB), CByte(&HEC), CByte(&HC1), CByte(&HC6), CByte(&HCF), CByte(&HC8), CByte(&HDD), CByte(&HDA), CByte(&HD3), CByte(&HD4), CByte(&H69), CByte(&H6E), CByte(&H67), CByte(&H60), CByte(&H75), CByte(&H72), CByte(&H7B), CByte(&H7C), CByte(&H51), CByte(&H56), CByte(&H5F), CByte(&H58), CByte(&H4D), CByte(&H4A), CByte(&H43), CByte(&H44), CByte(&H19), CByte(&H1E), CByte(&H17), CByte(&H10), CByte(&H5), CByte(&H2), CByte(&HB), CByte(&HC), CByte(&H21), CByte(&H26), CByte(&H2F), CByte(&H28), CByte(&H3D), CByte(&H3A), CByte(&H33), CByte(&H34), CByte(&H4E), CByte(&H49), CByte(&H40), CByte(&H47), CByte(&H52), CByte(&H55), CByte(&H5C), CByte(&H5B), CByte(&H76), CByte(&H71), CByte(&H78), CByte(&H7F), CByte(&H6A), CByte(&H6D), CByte(&H64), CByte(&H63), CByte(&H3E), CByte(&H39), CByte(&H30), CByte(&H37), CByte(&H22), CByte(&H25), CByte(&H2C), CByte(&H2B), CByte(&H6), CByte(&H1), CByte(&H8), CByte(&HF), CByte(&H1A), CByte(&H1D), CByte(&H14), CByte(&H13), CByte(&HAE), CByte(&HA9), CByte(&HA0), CByte(&HA7), CByte(&HB2), CByte(&HB5), CByte(&HBC), CByte(&HBB), CByte(&H96), CByte(&H91), CByte(&H98), CByte(&H9F), CByte(&H8A), CByte(&H8D), CByte(&H84), CByte(&H83), CByte(&HDE), CByte(&HD9), CByte(&HD0), CByte(&HD7), CByte(&HC2), CByte(&HC5), CByte(&HCC), CByte(&HCB), CByte(&HE6), CByte(&HE1), CByte(&HE8), CByte(&HEF), CByte(&HFA), CByte(&HFD), CByte(&HF4), CByte(&HF3)}

Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(input)
Dim len As Integer = data.Length
Dim crc As Byte = 0
For i As Integer = 0 To len - 1
crc = crc8_table((crc Xor data(i)) And 255)
Next i
Return String.Format("{0:D3}", crc And &HFFL)
End Function

jaiser 15-07-2021 08:08:18

Y la función en java de las dipus, que yo a partir de esa hice la de vb.net

10. 3. ERANSKINA – CRC EGIAZTATZEKO ALGORITMOA / 10. ANEXO 3 – ALGORITMO CRC DE COMPROBACIÓN
package net.ticketbai;
import java.io.UnsupportedEncodingException;
public class CRC8{
private static final String UTF_8 = “UTF-8”;
// CRC-8,
// Poly = x^8 + x^2 + x^1 + x^0
// Init = 0
// RefIn = false
// RefOut = false
// XorOut = 0
private static final byte[] crc8_table =
new byte[] {
(byte) 0x00, (byte) 0x07, (byte) 0x0E, (byte) 0x09, (byte) 0x1C, (byte) 0x1B, (byte) 0x12, (byte) 0x15,
(byte) 0x38, (byte) 0x3F, (byte) 0x36, (byte) 0x31, (byte) 0x24, (byte) 0x23, (byte) 0x2A, (byte) 0x2D,
(byte) 0x70, (byte) 0x77, (byte) 0x7E, (byte) 0x79, (byte) 0x6C, (byte) 0x6B, (byte) 0x62, (byte) 0x65,
(byte) 0x48, (byte) 0x4F, (byte) 0x46, (byte) 0x41, (byte) 0x54, (byte) 0x53, (byte) 0x5A, (byte) 0x5D,
(byte) 0xE0, (byte) 0xE7, (byte) 0xEE, (byte) 0xE9, (byte) 0xFC, (byte) 0xFB, (byte) 0xF2, (byte) 0xF5,
(byte) 0xD8, (byte) 0xDF, (byte) 0xD6, (byte) 0xD1, (byte) 0xC4, (byte) 0xC3, (byte) 0xCA, (byte) 0xCD,
(byte) 0x90, (byte) 0x97, (byte) 0x9E, (byte) 0x99, (byte) 0x8C, (byte) 0x8B, (byte) 0x82, (byte) 0x85,
(byte) 0xA8, (byte) 0xAF, (byte) 0xA6, (byte) 0xA1, (byte) 0xB4, (byte) 0xB3, (byte) 0xBA, (byte) 0xBD,
(byte) 0xC7, (byte) 0xC0, (byte) 0xC9, (byte) 0xCE, (byte) 0xDB, (byte) 0xDC, (byte) 0xD5, (byte) 0xD2,
(byte) 0xFF, (byte) 0xF8, (byte) 0xF1, (byte) 0xF6, (byte) 0xE3, (byte) 0xE4, (byte) 0xED, (byte) 0xEA,
(byte) 0xB7, (byte) 0xB0, (byte) 0xB9, (byte) 0xBE, (byte) 0xAB, (byte) 0xAC, (byte) 0xA5, (byte) 0xA2,
(byte) 0x8F, (byte) 0x88, (byte) 0x81, (byte) 0x86, (byte) 0x93, (byte) 0x94, (byte) 0x9D, (byte) 0x9A,
(byte) 0x27, (byte) 0x20, (byte) 0x29, (byte) 0x2E, (byte) 0x3B, (byte) 0x3C, (byte) 0x35, (byte) 0x32,
(byte) 0x1F, (byte) 0x18, (byte) 0x11, (byte) 0x16, (byte) 0x03, (byte) 0x04, (byte) 0x0D, (byte) 0x0A,
(byte) 0x57, (byte) 0x50, (byte) 0x59, (byte) 0x5E, (byte) 0x4B, (byte) 0x4C, (byte) 0x45, (byte) 0x42,
(byte) 0x6F, (byte) 0x68, (byte) 0x61, (byte) 0x66, (byte) 0x73, (byte) 0x74, (byte) 0x7D, (byte) 0x7A,
(byte) 0x89, (byte) 0x8E, (byte) 0x87, (byte) 0x80, (byte) 0x95, (byte) 0x92, (byte) 0x9B, (byte) 0x9C,
(byte) 0xB1, (byte) 0xB6, (byte) 0xBF, (byte) 0xB8, (byte) 0xAD, (byte) 0xAA, (byte) 0xA3, (byte) 0xA4,
(byte) 0xF9, (byte) 0xFE, (byte) 0xF7, (byte) 0xF0, (byte) 0xE5, (byte) 0xE2, (byte) 0xEB, (byte) 0xEC,
(byte) 0xC1, (byte) 0xC6, (byte) 0xCF, (byte) 0xC8, (byte) 0xDD, (byte) 0xDA, (byte) 0xD3, (byte) 0xD4,
(byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x60, (byte) 0x75, (byte) 0x72, (byte) 0x7B, (byte) 0x7C,
(byte) 0x51, (byte) 0x56, (byte) 0x5F, (byte) 0x58, (byte) 0x4D, (byte) 0x4A, (byte) 0x43, (byte) 0x44,
(byte) 0x19, (byte) 0x1E, (byte) 0x17, (byte) 0x10, (byte) 0x05, (byte) 0x02, (byte) 0x0B, (byte) 0x0C,
(byte) 0x21, (byte) 0x26, (byte) 0x2F, (byte) 0x28, (byte) 0x3D, (byte) 0x3A, (byte) 0x33, (byte) 0x34,
(byte) 0x4E, (byte) 0x49, (byte) 0x40, (byte) 0x47, (byte) 0x52, (byte) 0x55, (byte) 0x5C, (byte) 0x5B,
(byte) 0x76, (byte) 0x71, (byte) 0x78, (byte) 0x7F, (byte) 0x6A, (byte) 0x6D, (byte) 0x64, (byte) 0x63,
(byte) 0x3E, (byte) 0x39, (byte) 0x30, (byte) 0x37, (byte) 0x22, (byte) 0x25, (byte) 0x2C, (byte) 0x2B,
(byte) 0x06, (byte) 0x01, (byte) 0x08, (byte) 0x0F, (byte) 0x1A, (byte) 0x1D, (byte) 0x14, (byte) 0x13,
(byte) 0xAE, (byte) 0xA9, (byte) 0xA0, (byte) 0xA7, (byte) 0xB2, (byte) 0xB5, (byte) 0xBC, (byte) 0xBB,
(byte) 0x96, (byte) 0x91, (byte) 0x98, (byte) 0x9F, (byte) 0x8A, (byte) 0x8D, (byte) 0x84, (byte) 0x83,
(byte) 0xDE, (byte) 0xD9, (byte) 0xD0, (byte) 0xD7, (byte) 0xC2, (byte) 0xC5, (byte) 0xCC, (byte) 0xCB,
(byte) 0xE6, (byte) 0xE1, (byte) 0xE8, (byte) 0xEF, (byte) 0xFA, (byte) 0xFD, (byte) 0xF4, (byte) 0xF3 };
/**
*Calculate the CRC value with data from input string.
*@param input input string
*@return The calculated CRC value. Left padding with zeros.
* @throws UnsupportedEncodingException
*/
public static String calculate(String input) throws UnsupportedEncodingException {
byte[] data = input.getBytes(UTF_8);
int len = data.length;
byte crc = 0;
for (int i = 0; i < len; i++)
crc = crc8_table[(crc ^ data[i]) & 0xff];
return String.format(“%03d”, crc & 0xFFL);
}}

Neftali [Germán.Estévez] 15-07-2021 08:19:16

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541795)
Porque vosotros el TBAI lo obtenéis de la respuesta del server o lo formáis manualmente?


El TBAI tienes que calcularlo tú, según las especificaciones que vienen en la documentación.
Documento "TicketBAI_Especificaciones funcionales y técnicas_1_X.pdf"
Punto 4: Especificaciones técnicas de la fase de emisión de una factura
4.1: Generación del TBAI

Neftali [Germán.Estévez] 15-07-2021 08:24:44

Cita:

Empezado por skatologiko (Mensaje 541796)
A Guipuzcoa. Si envío un NIF español, sí que llega

<Destinatarios>
<IDDestinatario>
<NIF>NL855820627B01</NIF>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Y me da el siguiente error:
Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NL855820627B01' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.</Descripcion>


Creo que en el caso de clientes extranjeros hay que enviar otra estructura:
Código PHP:

      <Destinatarios>
            <
IDDestinatario>
                <
IDOtro>
                    <
CodigoPais>NL</CodigoPais>
                    <
IDType>04</IDType>
                    <
ID>NL855820627B01</ID>
                </
IDOtro>
                <
ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
                <
CodigoPostal>...</CodigoPostal>
                <
Direccion>...</Direccion>
            </
IDDestinatario>
        </
Destinatarios

En la parte del IDDestinatario:


Y el IDOtro:

jaiser 15-07-2021 08:41:09

Cita:

Empezado por skatologiko (Mensaje 541796)
A Guipuzcoa. Si envío un NIF español, sí que llega

<Destinatarios>
<IDDestinatario>
<NIF>NL855820627B01</NIF>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Y me da el siguiente error:
Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NL855820627B01' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.</Descripcion>

Para nif extranjeros tienes que indicar que nif o documentación estás poniendo por ejemplo asi, donde el 04 es Documento oficial de identificaci`´on expedido por el pais o territorio de residendcia.
las opciones que puedes poner son :
02 nif-iva
03 pasaporte
04 Documento oficial de identificaci`´on expedido por el pais o territorio de residencia.
05 Certificado de residencia
06 Otro documento probatorio

<Destinatarios>
<IDDestinatario>
<IDOtro>
<IDType>04</IDType>
<ID>nif_empresa_extranjero</ID>
</IDOtro>
<ApellidosNombreRazonSocial>nombre_razonsocial_empresa.</ApellidosNombreRazonSocial>
<Direccion />
</IDDestinatario>
</Destinatarios>

Eric Mtz 15-07-2021 08:43:55

Función CRC en C#
 
¡Buenos días gente!, ya que el señor Jaiser está recopilando funciones para el cálculo de CRC en distintos lenguajes aporto la solución en C#, ¡Fijo que a alguien le será de utilidad!

Código:

        private static byte[] crc8_table = new byte[] {
        (byte) 0x00, (byte) 0x07, (byte) 0x0E, (byte) 0x09, (byte) 0x1C, (byte) 0x1B, (byte) 0x12, (byte) 0x15,
        (byte) 0x38, (byte) 0x3F, (byte) 0x36, (byte) 0x31, (byte) 0x24, (byte) 0x23, (byte) 0x2A, (byte) 0x2D,
        (byte) 0x70, (byte) 0x77, (byte) 0x7E, (byte) 0x79, (byte) 0x6C, (byte) 0x6B, (byte) 0x62, (byte) 0x65,
        (byte) 0x48, (byte) 0x4F, (byte) 0x46, (byte) 0x41, (byte) 0x54, (byte) 0x53, (byte) 0x5A, (byte) 0x5D,
        (byte) 0xE0, (byte) 0xE7, (byte) 0xEE, (byte) 0xE9, (byte) 0xFC, (byte) 0xFB, (byte) 0xF2, (byte) 0xF5,
        (byte) 0xD8, (byte) 0xDF, (byte) 0xD6, (byte) 0xD1, (byte) 0xC4, (byte) 0xC3, (byte) 0xCA, (byte) 0xCD,
        (byte) 0x90, (byte) 0x97, (byte) 0x9E, (byte) 0x99, (byte) 0x8C, (byte) 0x8B, (byte) 0x82, (byte) 0x85,
        (byte) 0xA8, (byte) 0xAF, (byte) 0xA6, (byte) 0xA1, (byte) 0xB4, (byte) 0xB3, (byte) 0xBA, (byte) 0xBD,
        (byte) 0xC7, (byte) 0xC0, (byte) 0xC9, (byte) 0xCE, (byte) 0xDB, (byte) 0xDC, (byte) 0xD5, (byte) 0xD2,
        (byte) 0xFF, (byte) 0xF8, (byte) 0xF1, (byte) 0xF6, (byte) 0xE3, (byte) 0xE4, (byte) 0xED, (byte) 0xEA,
        (byte) 0xB7, (byte) 0xB0, (byte) 0xB9, (byte) 0xBE, (byte) 0xAB, (byte) 0xAC, (byte) 0xA5, (byte) 0xA2,
        (byte) 0x8F, (byte) 0x88, (byte) 0x81, (byte) 0x86, (byte) 0x93, (byte) 0x94, (byte) 0x9D, (byte) 0x9A,
        (byte) 0x27, (byte) 0x20, (byte) 0x29, (byte) 0x2E, (byte) 0x3B, (byte) 0x3C, (byte) 0x35, (byte) 0x32,
        (byte) 0x1F, (byte) 0x18, (byte) 0x11, (byte) 0x16, (byte) 0x03, (byte) 0x04, (byte) 0x0D, (byte) 0x0A,
        (byte) 0x57, (byte) 0x50, (byte) 0x59, (byte) 0x5E, (byte) 0x4B, (byte) 0x4C, (byte) 0x45, (byte) 0x42,
        (byte) 0x6F, (byte) 0x68, (byte) 0x61, (byte) 0x66, (byte) 0x73, (byte) 0x74, (byte) 0x7D, (byte) 0x7A,
        (byte) 0x89, (byte) 0x8E, (byte) 0x87, (byte) 0x80, (byte) 0x95, (byte) 0x92, (byte) 0x9B, (byte) 0x9C,
        (byte) 0xB1, (byte) 0xB6, (byte) 0xBF, (byte) 0xB8, (byte) 0xAD, (byte) 0xAA, (byte) 0xA3, (byte) 0xA4,
        (byte) 0xF9, (byte) 0xFE, (byte) 0xF7, (byte) 0xF0, (byte) 0xE5, (byte) 0xE2, (byte) 0xEB, (byte) 0xEC,
        (byte) 0xC1, (byte) 0xC6, (byte) 0xCF, (byte) 0xC8, (byte) 0xDD, (byte) 0xDA, (byte) 0xD3, (byte) 0xD4,
        (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x60, (byte) 0x75, (byte) 0x72, (byte) 0x7B, (byte) 0x7C,
        (byte) 0x51, (byte) 0x56, (byte) 0x5F, (byte) 0x58, (byte) 0x4D, (byte) 0x4A, (byte) 0x43, (byte) 0x44,
        (byte) 0x19, (byte) 0x1E, (byte) 0x17, (byte) 0x10, (byte) 0x05, (byte) 0x02, (byte) 0x0B, (byte) 0x0C,
        (byte) 0x21, (byte) 0x26, (byte) 0x2F, (byte) 0x28, (byte) 0x3D, (byte) 0x3A, (byte) 0x33, (byte) 0x34,
        (byte) 0x4E, (byte) 0x49, (byte) 0x40, (byte) 0x47, (byte) 0x52, (byte) 0x55, (byte) 0x5C, (byte) 0x5B,
        (byte) 0x76, (byte) 0x71, (byte) 0x78, (byte) 0x7F, (byte) 0x6A, (byte) 0x6D, (byte) 0x64, (byte) 0x63,
        (byte) 0x3E, (byte) 0x39, (byte) 0x30, (byte) 0x37, (byte) 0x22, (byte) 0x25, (byte) 0x2C, (byte) 0x2B,
        (byte) 0x06, (byte) 0x01, (byte) 0x08, (byte) 0x0F, (byte) 0x1A, (byte) 0x1D, (byte) 0x14, (byte) 0x13,
        (byte) 0xAE, (byte) 0xA9, (byte) 0xA0, (byte) 0xA7, (byte) 0xB2, (byte) 0xB5, (byte) 0xBC, (byte) 0xBB,
        (byte) 0x96, (byte) 0x91, (byte) 0x98, (byte) 0x9F, (byte) 0x8A, (byte) 0x8D, (byte) 0x84, (byte) 0x83,
        (byte) 0xDE, (byte) 0xD9, (byte) 0xD0, (byte) 0xD7, (byte) 0xC2, (byte) 0xC5, (byte) 0xCC, (byte) 0xCB,
        (byte) 0xE6, (byte) 0xE1, (byte) 0xE8, (byte) 0xEF, (byte) 0xFA, (byte) 0xFD, (byte) 0xF4, (byte) 0xF3
        };

        private static String CalcularCRC(String input)
        {
            byte[] data = Encoding.UTF8.GetBytes(input);
            int len = data.Length;
            byte crc = 0;

            for (int i = 0; i < len; i++)
            {
                crc = crc8_table[(crc ^ data[i]) & 0xff];
            }

            long a = (crc & 0xFFL);

            return a.ToString("D3");
        }


Pd: Quizás deberíamos de plantear el crear un repositorio donde todos podamos aportar código y compartir el dolor de cabeza, que actualmente estamos todos sufriendo en silencio topándonos con los mismos problemas. qP:-)

Galaxian 15-07-2021 09:07:28

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541783)
Disculpa, a ti no te sale este error al enviar? Me da el fichero como recibido pero me dice lo siguiente:

Código PHP:

<Codigo>008</Codigo>
            <
Descripcion>El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- SignedInfo failed to verifyReference URI="" failed to verifyReference URI="#Signature-63c35f38-2b5f-4600-b3da-3ddee86d62b3-SignedProperties" failed to verifyReference URI="#Signature-63c35f38-2b5f-4600-b3da-3ddee86d62b3-KeyInfo" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)</ 


Buenas,

A mí me ha dado ese error cuando no he enviado los datos en UTF8.

También debes cambiar los "signature" (solo hay dos diferentes) por otros que sean distintos para cada envío, para lo que puedes usar la función generateUuid() de la clase CkCrypt2.

Por ejemplo (código C++):

Cita:

CkCrypt2 crypt;
std::string sig=crypt.generateUuid();
std::string ref=crypt.generateUuid();

object1.AddAttribute("Id","Signature-"+sig+"-QualifyingProperties");
...
gen.SetRefIdAttr("","Reference-"+ref);

edari 15-07-2021 09:28:49

Cita:

Empezado por Eric Mtz (Mensaje 541805)
¡Buenos días gente!, ya que el señor Jaiser está recopilando funciones para el cálculo de CRC en distintos lenguajes aporto la solución en C#, ¡Fijo que a alguien le será de utilidad!

Código:

        private static byte[] crc8_table = new byte[] {
        (byte) 0x00, (byte) 0x07, (byte) 0x0E, (byte) 0x09, (byte) 0x1C, (byte) 0x1B, (byte) 0x12, (byte) 0x15,
        (byte) 0x38, (byte) 0x3F, (byte) 0x36, (byte) 0x31, (byte) 0x24, (byte) 0x23, (byte) 0x2A, (byte) 0x2D,
        (byte) 0x70, (byte) 0x77, (byte) 0x7E, (byte) 0x79, (byte) 0x6C, (byte) 0x6B, (byte) 0x62, (byte) 0x65,
        (byte) 0x48, (byte) 0x4F, (byte) 0x46, (byte) 0x41, (byte) 0x54, (byte) 0x53, (byte) 0x5A, (byte) 0x5D,
        (byte) 0xE0, (byte) 0xE7, (byte) 0xEE, (byte) 0xE9, (byte) 0xFC, (byte) 0xFB, (byte) 0xF2, (byte) 0xF5,
        (byte) 0xD8, (byte) 0xDF, (byte) 0xD6, (byte) 0xD1, (byte) 0xC4, (byte) 0xC3, (byte) 0xCA, (byte) 0xCD,
        (byte) 0x90, (byte) 0x97, (byte) 0x9E, (byte) 0x99, (byte) 0x8C, (byte) 0x8B, (byte) 0x82, (byte) 0x85,
        (byte) 0xA8, (byte) 0xAF, (byte) 0xA6, (byte) 0xA1, (byte) 0xB4, (byte) 0xB3, (byte) 0xBA, (byte) 0xBD,
        (byte) 0xC7, (byte) 0xC0, (byte) 0xC9, (byte) 0xCE, (byte) 0xDB, (byte) 0xDC, (byte) 0xD5, (byte) 0xD2,
        (byte) 0xFF, (byte) 0xF8, (byte) 0xF1, (byte) 0xF6, (byte) 0xE3, (byte) 0xE4, (byte) 0xED, (byte) 0xEA,
        (byte) 0xB7, (byte) 0xB0, (byte) 0xB9, (byte) 0xBE, (byte) 0xAB, (byte) 0xAC, (byte) 0xA5, (byte) 0xA2,
        (byte) 0x8F, (byte) 0x88, (byte) 0x81, (byte) 0x86, (byte) 0x93, (byte) 0x94, (byte) 0x9D, (byte) 0x9A,
        (byte) 0x27, (byte) 0x20, (byte) 0x29, (byte) 0x2E, (byte) 0x3B, (byte) 0x3C, (byte) 0x35, (byte) 0x32,
        (byte) 0x1F, (byte) 0x18, (byte) 0x11, (byte) 0x16, (byte) 0x03, (byte) 0x04, (byte) 0x0D, (byte) 0x0A,
        (byte) 0x57, (byte) 0x50, (byte) 0x59, (byte) 0x5E, (byte) 0x4B, (byte) 0x4C, (byte) 0x45, (byte) 0x42,
        (byte) 0x6F, (byte) 0x68, (byte) 0x61, (byte) 0x66, (byte) 0x73, (byte) 0x74, (byte) 0x7D, (byte) 0x7A,
        (byte) 0x89, (byte) 0x8E, (byte) 0x87, (byte) 0x80, (byte) 0x95, (byte) 0x92, (byte) 0x9B, (byte) 0x9C,
        (byte) 0xB1, (byte) 0xB6, (byte) 0xBF, (byte) 0xB8, (byte) 0xAD, (byte) 0xAA, (byte) 0xA3, (byte) 0xA4,
        (byte) 0xF9, (byte) 0xFE, (byte) 0xF7, (byte) 0xF0, (byte) 0xE5, (byte) 0xE2, (byte) 0xEB, (byte) 0xEC,
        (byte) 0xC1, (byte) 0xC6, (byte) 0xCF, (byte) 0xC8, (byte) 0xDD, (byte) 0xDA, (byte) 0xD3, (byte) 0xD4,
        (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x60, (byte) 0x75, (byte) 0x72, (byte) 0x7B, (byte) 0x7C,
        (byte) 0x51, (byte) 0x56, (byte) 0x5F, (byte) 0x58, (byte) 0x4D, (byte) 0x4A, (byte) 0x43, (byte) 0x44,
        (byte) 0x19, (byte) 0x1E, (byte) 0x17, (byte) 0x10, (byte) 0x05, (byte) 0x02, (byte) 0x0B, (byte) 0x0C,
        (byte) 0x21, (byte) 0x26, (byte) 0x2F, (byte) 0x28, (byte) 0x3D, (byte) 0x3A, (byte) 0x33, (byte) 0x34,
        (byte) 0x4E, (byte) 0x49, (byte) 0x40, (byte) 0x47, (byte) 0x52, (byte) 0x55, (byte) 0x5C, (byte) 0x5B,
        (byte) 0x76, (byte) 0x71, (byte) 0x78, (byte) 0x7F, (byte) 0x6A, (byte) 0x6D, (byte) 0x64, (byte) 0x63,
        (byte) 0x3E, (byte) 0x39, (byte) 0x30, (byte) 0x37, (byte) 0x22, (byte) 0x25, (byte) 0x2C, (byte) 0x2B,
        (byte) 0x06, (byte) 0x01, (byte) 0x08, (byte) 0x0F, (byte) 0x1A, (byte) 0x1D, (byte) 0x14, (byte) 0x13,
        (byte) 0xAE, (byte) 0xA9, (byte) 0xA0, (byte) 0xA7, (byte) 0xB2, (byte) 0xB5, (byte) 0xBC, (byte) 0xBB,
        (byte) 0x96, (byte) 0x91, (byte) 0x98, (byte) 0x9F, (byte) 0x8A, (byte) 0x8D, (byte) 0x84, (byte) 0x83,
        (byte) 0xDE, (byte) 0xD9, (byte) 0xD0, (byte) 0xD7, (byte) 0xC2, (byte) 0xC5, (byte) 0xCC, (byte) 0xCB,
        (byte) 0xE6, (byte) 0xE1, (byte) 0xE8, (byte) 0xEF, (byte) 0xFA, (byte) 0xFD, (byte) 0xF4, (byte) 0xF3
        };

        private static String CalcularCRC(String input)
        {
            byte[] data = Encoding.UTF8.GetBytes(input);
            int len = data.Length;
            byte crc = 0;

            for (int i = 0; i < len; i++)
            {
                crc = crc8_table[(crc ^ data[i]) & 0xff];
            }

            long a = (crc & 0xFFL);

            return a.ToString("D3");
        }

Pd: Quizás deberíamos de plantear el crear un repositorio donde todos podamos aportar código y compartir el dolor de cabeza, que actualmente estamos todos sufriendo en silencio topándonos con los mismos problemas. qP:-)






Porque lo que es imposible es calcular el crc desde cmd con un comando al estilo del autofirmacommandline.exe al que le puedas pasar los parámetros de manera externa, verdad?



Mi lenguaje tiene complicado llamar a dll externas y recuperar como parámetro el resultado y me estoy volviendo un poco gilipichis para encontrar la manera

Galaxian 15-07-2021 09:35:21

Cita:

Empezado por thinkows (Mensaje 541775)
Buenos días creía que era el único en desarrollar en anacrónico VB6 que alegría me has dado, yo también genero el xml y firmo con chilkat ... pero el envío a Guipuzkoa lo tengo muy verde, estoy probando con Advanced Rest Client de SoftEmule el ejemplo que ha puesto un compañero pero siempre me da error 500, podrías poner algun ejemplo de envio a Guipuzkoa ??? te estaría muy agradecido y si necesitas algo mi
aquí estoy ....

Saludos y gracias de antemano

Las librerías Chilkat también tienen su propia clase REST. Aquí tiene un ejemplo en C++ que no debería costarte demasiado "trasplantarlo" a VB6:

NOTAS:
El JSON y el XML ya están creados y cargados en la variable string "jsn" y "xml" respectivamente.
El certificado en un objeto del tipo CkCert llamado "Certificado.
Para más claridad he quitado el control de errores.

Cita:

CkRest rest;
rest.AddHeader("Accept-Encoding","gzip");
rest.AddHeader("Content-Encoding","gzip");
rest.AddHeader("Content-Type","application/octet-stream");
rest.AddHeader("eus-bizkaia-n3-version","1.0");
rest.AddHeader("eus-bizkaia-n3-content-type","application/xml");
rest.AddHeader("eus-bizkaia-n3-data",cCodificacion::Codificar::JsonEscape(jsn));

CkSocket socket;

socket.SetSslClientCert(Certificado);
socket.Connect("pruesarrerak.bizkaia.eus",443,SI,5000);

rest.UseConnection(socket,true);
rest.SendReqStringBody("POST","/N3B4000M/aurkezpena",xml);

rest.ReadResponseHeader(); // Si necesitas las cabeceras para algo. Normalmente no son
std::string cr=rest.responseHeader() // necesarias, pero en caso de error de envío pueden ser útiles.

CkByteData rb;
rest.ReadRespBodyBinary(rb);

// Ya solo queda extraer el gzip que está en la variable rb y descomprimirlo.

b4aronDeLaBirr4 15-07-2021 09:45:09

Siempre al pie del cañón, Eric jeje a mí me viene genial! Y lo del repositorio no es mala idea, porque las funciones al fin y al cabo son siempre las mismas pero con distinto lenguaje.


La franja horaria es GMT +2. Ahora son las 05:27:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi