Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2021
bilbur bilbur is offline
Miembro
 
Registrado: dic 2019
Posts: 62
Poder: 7
bilbur Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En esta página hemos hablado de ese error:
https://www.clubdelphi.com/foros/sho...d.php?p=540615

Posible que esté relacionado con la codificación.
Revisa además si tienes caracteres extraños en el mensaje (en la razón social, por ejemplo) como ñáéüç..
.
En las direcciones que no puedes escribir es posible que tengas acentos en "Política de firma..", en direcciones URI
Elimina los acentos en el xml previo a la firma y también en el firmador que utilices

Espero que sea eso
Responder Con Cita
  #2  
Antiguo 12-05-2021
sline sline is offline
Miembro
 
Registrado: may 2021
Posts: 18
Poder: 0
sline Va por buen camino
Cita:
Empezado por bilbur Ver Mensaje
En las direcciones que no puedes escribir es posible que tengas acentos en "Política de firma..", en direcciones URI
Elimina los acentos en el xml previo a la firma y también en el firmador que utilices

Espero que sea eso

no tengo ningún carácter con tilde en el xml.
Responder Con Cita
  #3  
Antiguo 12-05-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por sline Ver Mensaje
no tengo ningún carácter con tilde en el xml.

Revisa entonces que en algun momento no esté cambiando la codificación o que estés realizando el envío con una codificación incorrecta.
Por ejemplo, que no estés guardando en un paso intermedio a fichero y al guardar/recuperar esté cambiando.
__________________
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.
Responder Con Cita
  #4  
Antiguo 12-05-2021
sline sline is offline
Miembro
 
Registrado: may 2021
Posts: 18
Poder: 0
sline Va por buen camino
Genero el xml y a continuación lo firmo como indicó bilbur, en php.
Lo que no sé es si han tenido en cuenta que el carácter + forma parte de base64
https_//es.wikipedia.org/wiki/Base64

Hay un párrafo que pone:
Cita:
Por esta razón existe un Base64 Modificado para URL, donde no se usa el carácter '=' de marcado de relleno, y los caracteres '+' y '/' del Base64 estándar son sustituidos por '-' y '_' respectivamente, de manera que ya no se necesita usar codificadores de URL. Además, no tiene impacto en el tamaño de la codificación, dejándola intacta para uso en base de datos relacionales, formularios web e identificadores de objetos en general.
https_//stackoverflow.com/questions/1228701/code-for-decoding-encoding-a-modified-base64-url
¿sería posible reemplazar los caracteres '+' y '/' por '-' y '_' de la firma y que esta siga siendo válida?



Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Revisa entonces que en algun momento no esté cambiando la codificación o que estés realizando el envío con una codificación incorrecta.
Por ejemplo, que no estés guardando en un paso intermedio a fichero y al guardar/recuperar esté cambiando.
Responder Con Cita
  #5  
Antiguo 12-05-2021
bilbur bilbur is offline
Miembro
 
Registrado: dic 2019
Posts: 62
Poder: 7
bilbur Va por buen camino
Cita:
Empezado por sline Ver Mensaje
Genero el xml y a continuación lo firmo como indicó bilbur, en php.
Lo que no sé es si han tenido en cuenta que el carácter + forma parte de base64
https_//es.wikipedia.org/wiki/Base64

Hay un párrafo que pone:

https_//stackoverflow.com/questions/1228701/code-for-decoding-encoding-a-modified-base64-url
¿sería posible reemplazar los caracteres '+' y '/' por '-' y '_' de la firma y que esta siga siendo válida?

Ejemplo con + en firma

https://tbai.prep.gipuzkoa.eus/qr/?i...i=18.81&cr=075


Funciona
Responder Con Cita
  #6  
Antiguo 13-05-2021
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
Hola, gracias por las respuestas bilbur y Neftali


Pues sí que va a ser eso de los acentos... al leer vuestras respuestas he revisado la factura que me daba ese error y he visto que en la dirección del cliente había un acento "ú".
He hecho otra factura exactamente igual pero poniendo la letra sin acento y ya no ha dado el error de la firma.


Lo que no acabo de ver es como solucionarlo porque ya estoy haciendo todo lo que proponéis (creo).
1. Al crear el fichero TicketBAI y guardarlo en disco lo hago en UTF8:


Código:
     var encoding = System.Text.Encoding.UTF8;
     FileMgr.Save(Path.Combine(filePath, fileName), xmltbai, encoding, false);
2. Al leer el fichero xml de disco para firmarlo le indico que es UTF8, después de firmar al salvar el xml firmado a disco también:


Código:
     XmlWriterSettings settings = new XmlWriterSettings();
     settings.Encoding = new UTF8Encoding();
     using (var writer = XmlWriter.Create(fileName, settings))
     {
           this.Document.Save(writer);
      }
3. Al leer el fichero xml firmado de disco para enviarlo también le indico UTF8:




Código:
     using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8))
    {
           string content = sr.ReadToEnd();
           return content;
     }
4. Finalmente para enviar también indico UTF8



Código:
   var encoding = Encoding.UTF8;
    byte[] contentBytes = encoding.GetBytes(content);

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.AllowAutoRedirect = true;
    httpWebRequest.ClientCertificates.Add(certificate);
    httpWebRequest.Method = "POST";
    httpWebRequest.ContentType = "application/xml";
    httpWebRequest.ContentLength = contentBytes.Length;

    var postStream = httpWebRequest.GetRequestStream();
    postStream.Write(contentBytes, 0, contentBytes.Length);
    postStream.Flush();
    postStream.Close();
De todas formas si hay un acento en el XML antes de firmar, da el error de verificación de la firma.

He enviado correos con los dos ficheros y la dos respuestas al correo de consultas técnicas de Gipuzkoa pero... deben estar colapsados porque hace mucho que no me contestan, creo que llevan más de 2 semanas de retraso en las respuestas T_T


También he escrito a Araba preguntando por su entorno de pruebas y me han dicho que lo están desarrollando y que tiene previsto que para septiembre estará operativo :'(


Bueno voy a seguir investigando.


Ya sé que el foro es de Delphi y mi código es c# .net pero bueno, si alguien me puede dar otro consejo lo agradeceré.


Muchas gracias!







Cita:
Empezado por bilbur Ver Mensaje
En las direcciones que no puedes escribir es posible que tengas acentos en "Política de firma..", en direcciones URI
Elimina los acentos en el xml previo a la firma y también en el firmador que utilices

Espero que sea eso
Responder Con Cita
  #7  
Antiguo 14-05-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por rci Ver Mensaje
Lo que no acabo de ver es como solucionarlo porque ya estoy haciendo todo lo que proponéis (creo).
1. Al crear el fichero TicketBAI y guardarlo en disco lo hago en UTF8

Revisa cada uno de los pasos con el contenido hexadecimal del fichero o del stream (revisando el character con acento). Desde la generación del XML hasta el envío, a ver si en algún momento encuentras que la codificación de ese character cambia.

Si el envío lo estás haciendo con UTF8, revisa que la firma (el componente o lo que usas) no la esté haciendo como ANSI internamente, eso expñlicaría que lo que has firmado no "cuadra" con lo que estás enviando.
__________________
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.
Responder Con Cita
  #8  
Antiguo 14-05-2021
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
contentType para envio httpWebRequest c#

Buenas tardes y muchas gracias a todos por la ayuda.


Me han contestado de la agencia foral de Gipuzkoa y me han confirmado que el fichero firmado es correcto (se lo envié adjunto) y que es distinto de lo que recibieron ellos (me lo han enviado). La diferencia está en las letras con acentos. Por lo tanto el problema está en el envío.

Para solucionarlo he modificado la sentencia del content type, antes solo tenía el valor "application/xml" y para que funcione correctamente debo indicar que es utf8 también:

Código:
  ...
 
  httpWebRequest.ContentType = "application/xml; charset=utf-8";

  ...
Muchas gracias, buen fin de semana.




Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Revisa cada uno de los pasos con el contenido hexadecimal del fichero o del stream (revisando el character con acento). Desde la generación del XML hasta el envío, a ver si en algún momento encuentras que la codificación de ese character cambia.

Si el envío lo estás haciendo con UTF8, revisa que la firma (el componente o lo que usas) no la esté haciendo como ANSI internamente, eso expñlicaría que lo que has firmado no "cuadra" con lo que estás enviando.
Responder Con Cita
  #9  
Antiguo 14-05-2021
bilbur bilbur is offline
Miembro
 
Registrado: dic 2019
Posts: 62
Poder: 7
bilbur Va por buen camino
Envios a BATUZ

Batuz ha activado la versión 2 de alta emitidas 240
Nueva versión de xmlns es V1_0_2

Código:
$xml  = "<?xml version='1.0' encoding='UTF-8'?>";
    $xml .= "<lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion
    xmlns:lrpjfecsgap='https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd'>";
    $xml .= "<Cabecera>
La versión V1_0_1 da error

Un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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 3716 19-01-2026 20:01:34
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 17:33:33.


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