Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2021
YellowStone YellowStone is offline
Miembro
 
Registrado: feb 2007
Ubicación: Adeje
Posts: 34
Poder: 0
YellowStone Va por buen camino
Cita:
Empezado por Band Ver Mensaje
Hola keys, gracias por la respuesta.
Mi problema es que no puedo usar el Txmldocument de momento
No sé si es problema del Msxml2.DOMDocument.6.0, porque así Código Delphi [-]Documento.DocumentElement.ChildNodes[4].ChildNodes[1].Text;

tampoco consigo referenciarlo.

Seguiré investigando.
Aparte del código proporcionado por Keys, yo lo he conseguido de la siguiente manera (código Delphi 2007):

Código Delphi [-]
function BuscaSignatureValue(documento: IXMLDocument): string;
var ANode1: IXMLNode;
    i: integer;
begin
  result := '';
  for i := 0 to documento.DocumentElement.ChildNodes.Count - 1 do
    begin
      if documento.DocumentElement.ChildNodes.Nodes[i].NodeName = 'ds:Signature' then
        begin
          ANode1 := documento.DocumentElement.ChildNodes.Nodes[i];
          if ANode1.ChildNodes.FindNode('ds:SignatureValue') <> nil then
            begin
              result := ANode1.ChildNodes['ds:SignatureValue'].Text;
              result := AnsiReplaceStr(result, #10, '');               // Quitamos los saltos de línea del nodo
              result := Copy(Trim(result), 1, 100);                    // Cogemos los 100 primeros caracteres
              break;
            end;
        end;
    end;
end;

La solución de Keys es estupenda, pero con el inconveniente de que si en algún momento se cambia o se añade algún nodo en el fichero, va a dejar de ser funcional.

Última edición por Neftali [Germán.Estévez] fecha: 08-07-2021 a las 11:59:27. Razón: Añadir TAGs al código Delphi
Responder Con Cita
  #2  
Antiguo 08-07-2021
Avatar de b4aronDeLaBirr4
b4aronDeLaBirr4 b4aronDeLaBirr4 is offline
Miembro
 
Registrado: jul 2021
Posts: 67
Poder: 3
b4aronDeLaBirr4 Va por buen camino
Realización de la firma

Buenas!

Os quería preguntar sobre la realización de la firma. Por ejemplo, en mi caso compongo mi archivo XML en C# rellenando aquellos campos normales (importe, nif....) pero ¿cómo procedo con la firma del documento cuando lo tengo ya rellenado? (Porque qué hacer con el campo Signature del XML?)
He estado leyendo sobre la política de firma y demás, pero tampoco es que me haya quedado claro del todo. Gracias de antemano.

Un saludo
Responder Con Cita
  #3  
Antiguo 08-07-2021
tejano tejano is offline
Miembro
 
Registrado: dic 2020
Posts: 128
Poder: 4
tejano Va por buen camino
Cita:
Empezado por b4aronDeLaBirr4 Ver Mensaje
Buenas!

Os quería preguntar sobre la realización de la firma. Por ejemplo, en mi caso compongo mi archivo XML en C# rellenando aquellos campos normales (importe, nif....) pero ¿cómo procedo con la firma del documento cuando lo tengo ya rellenado? (Porque qué hacer con el campo Signature del XML?)
He estado leyendo sobre la política de firma y demás, pero tampoco es que me haya quedado claro del todo. Gracias de antemano.

Un saludo
Yo utilizo el comando autofirmacommandline del programa Autofirma, pero tarda unos sg en firmar.

En mi caso no tengo mucho problema porque hacemos unas 200 facturas x mes, pero no sé para vosotros.

Si buscas en el foro, verás el comando que se utilza.

Saludos
Responder Con Cita
  #4  
Antiguo 08-07-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por YellowStone Ver Mensaje
...
Responder Con Cita
  #5  
Antiguo 08-07-2021
YellowStone YellowStone is offline
Miembro
 
Registrado: feb 2007
Ubicación: Adeje
Posts: 34
Poder: 0
YellowStone Va por buen camino
A ver ahora:



Código Delphi [-]
function BuscaSignatureValue(documento: string): string;
var xml: IXMLDocument;
    ANode1: IXMLNode;
    i: integer;
begin
  result := '';
  try
    xml := LoadXmlDocument(documento);
    for i := 0 to xml.DocumentElement.ChildNodes.Count - 1 do
      begin
        if xml.DocumentElement.ChildNodes.Nodes[i].NodeName = 'ds:Signature' then
          begin
            ANode1 := xml.DocumentElement.ChildNodes.Nodes[i];
            if ANode1.ChildNodes.FindNode('ds:SignatureValue') <> nil then
              begin
                result := ANode1.ChildNodes['ds:SignatureValue'].Text;
                result := AnsiReplaceStr(result, #10, '');               // Quitamos los saltos de línea del nodo
                result := Copy(Trim(result), 1, 100);                    // Cogemos los 100 primeros caracteres
                break;
              end;
          end;
      end;
  finally
    FreeAndNil(xml);
  end;
end;


No sé por qué FindNode no encuentra "ds:Signature", de ahí el bucle buscando por el NoneName, que ahí si lo encuentra.
Responder Con Cita
  #6  
Antiguo 09-07-2021
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
¿Te refieres a esto?


Código PHP:
<Cabecera>
        <
IDVersionTBAI>1.2</IDVersionTBAI>
    </
Cabecera>
    <
Sujetos>
        <
Emisor>
            <
NIF>J69552834</NIF>
            <
ApellidosNombreRazonSocial>Empresa de Test</ApellidosNombreRazonSocial>
        </
Emisor>
        <
Destinatarios>
            <
IDDestinatario>
                <
NIF>A86868189</NIF>
                <
ApellidosNombreRazonSocial>C1</ApellidosNombreRazonSocial>
                <
CodigoPostal>22050</CodigoPostal>
                <
Direccion>CLMenor77203040 Mod</Direccion>
            </
IDDestinatario>
        </
Destinatarios>
        <
VariosDestinatarios>N</VariosDestinatarios>
        <
EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
    </
Sujetos>
    <
Factura>
        <
CabeceraFactura>
            <
SerieFactura/>
            <
NumFactura>5</NumFactura>
            <
FechaExpedicionFactura>20-04-2021</FechaExpedicionFactura>
            <
HoraExpedicionFactura>00:00:00</HoraExpedicionFactura>
            <
FacturaSimplificada>N</FacturaSimplificada>
            <
FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
        </
CabeceraFactura>
        <
DatosFactura>
            <
DescripcionFactura>Factura de ejemplos 1</DescripcionFactura>
            <
DetallesFactura>
                <
IDDetalleFactura>
                    <
DescripcionDetalle/>
                    <
Cantidad>1.00</Cantidad>
                    <
ImporteUnitario>55.00000000</ImporteUnitario>
                    <
Descuento>0.00</Descuento>
                    <
ImporteTotal>66.55</ImporteTotal>
                </
IDDetalleFactura>
            </
DetallesFactura>
            <
ImporteTotalFactura>66.55</ImporteTotalFactura>
            <
Claves>
                <
IDClave>
                    <
ClaveRegimenIvaOpTrascendencia>51</ClaveRegimenIvaOpTrascendencia>
                </
IDClave>
            </
Claves>
        </
DatosFactura>
        <
TipoDesglose>
            <
DesgloseFactura>
                <
Sujeta>
                    <
NoExenta>
                        <
DetalleNoExenta>
                            <
TipoNoExenta>S1</TipoNoExenta>
                            <
DesgloseIVA>
                                <
DetalleIVA>
                                    <
BaseImponible>55.00</BaseImponible>
                                    <
TipoImpositivo>21.00</TipoImpositivo>
                                    <
CuotaImpuesto>11.55</CuotaImpuesto>
                                    <
TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                    <
CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                    <
OperacionEnRecargoDeEquivalenciaORegimenSimplificado>S</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                </
DetalleIVA>
                            </
DesgloseIVA>
                        </
DetalleNoExenta>
                    </
NoExenta>
                </
Sujeta>
            </
DesgloseFactura>
        </
TipoDesglose>
    </
Factura

Sí gracias, Neftali. Eso quería.

Pues lo tengo prácticamnente igual. Tengo una duda con la primera línea. Te pongo mi fichero

Código PHP:
<?xml version="1.0" encoding="UTF-8"?><T:TicketBai xmlns:T="urn:ticketbai:emision">
<Cabecera>
<IDVersionTBAI>1.2</IDVersionTBAI>
</Cabecera>
<Sujetos>
<Emisor>
<NIF>nif empresa facturadoara6</NIF>
<ApellidosNombreRazonSocial>EDARI</ApellidosNombreRazonSocial>
</Emisor>
<Destinatarios>
<IDDestinatario>
<NIF>nif cliente</NIF>
<ApellidosNombreRazonSocial>nombre cliente</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>
<VariosDestinatarios>N</VariosDestinatarios>
<EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
</Sujetos>
<Factura>
<CabeceraFactura>
<SerieFactura>02</SerieFactura>
<NumFactura>1000035</NumFactura>
<FechaExpedicionFactura>01-07-2021</FechaExpedicionFactura>
<HoraExpedicionFactura>00:06:28</HoraExpedicionFactura>
<FacturaSimplificada>N</FacturaSimplificada>
<FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
</CabeceraFactura>
<DatosFactura>
<DescripcionFactura>factura a cliente</DescripcionFactura>
<DetallesFactura>
<IDDetalleFactura>
<DescripcionDetalle>BARRIL DAMM</DescripcionDetalle>
<Cantidad>1.00</Cantidad>
<ImporteUnitario>40.00</ImporteUnitario>
<Descuento>0.00</Descuento>
<ImporteTotal>40.00</ImporteTotal>
</IDDetalleFactura>
</DetallesFactura>
<ImporteTotalFactura>50.48</ImporteTotalFactura>
<Claves>
<IDClave>
<ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
</IDClave>
</Claves>
</DatosFactura>
<TipoDesglose>
<DesgloseFactura>
<Sujeta>
<NoExenta>
<DetalleNoExenta>
<TipoNoExenta>S1</TipoNoExenta>
<DesgloseIVA>
<DetalleIVA>
<BaseImponible>40.00</BaseImponible>
<TipoImpositivo>21.00</TipoImpositivo>
<CuotaImpuesto>8.40</CuotaImpuesto>
<TipoRecargoEquivalencia>05.20</TipoRecargoEquivalencia>
<CuotaRecargoEquivalencia>2.08</CuotaRecargoEquivalencia>
</DetalleIVA>
</DesgloseIVA>
</DetalleNoExenta>
</NoExenta>
</Sujeta>
</DesgloseFactura>
</TipoDesglose>
</Factura>
<HuellaTBAI>
<Software>
<LicenciaTBAI>mi licencia como empresa</LicenciaTBAI>
<EntidadDesarrolladora>
<NIF>nuestro nif</NIF>
</EntidadDesarrolladora>
<Nombre>EDARI</Nombre>
<Version>1.0</Version>
</Software>
<NumSerieDispositivo>el numero de serie de mi dispositivo</NumSerieDispositivo>
</HuellaTBAI>
</T:TicketBai>
Lo firmo desde símbolo de comando con

\autofirma\autofirma\autofirmacommandline.exe sign -i FACTURA.XML -o FACTURA_FIRMADA.XML -store pkcs12:\CERTIFICADO\MI_CERTIFICADO_DE_DISPOSITIVO.p12 -password MI_PASSWD -filter \CERTIFICADO\MI_CERTIFICADO_DE_DISPOSITIVO.p12 -format xades -xml -config "format=XAdES Enveloped \npolicyIdentifier=identificativo \npolicyIdentifierHash=codigo_HASH \npolicyIdentifierHashAlgorithm=h t t p ://w w w .w3.org/2001/04/xmlenc#sha256 \npolicyQualifier=identificativo

El certificado de dispositivo lo bajamos de Izenpe para la máquina donde hago las pruebas

Al lanzarlo me da este mensaje, que aunque da algunos errores al final dice que lo ha generado bien

...
GRAVE: No se ha podido establecer la propiedad de seguridad en la factoria XML
java.lang.IllegalArgumentException: La propiedad "h t t p ://javax.xml.XMLConstants/property/accessExternalStylesheet" no se ha reconocido.
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl.setAttribute(Unknown Source)
at es.gob.afirma.signers.xades.XAdESUtil.<clinit>(XAdESUtil.java:97)
at es.gob.afirma.signers.xades.XAdESSigner.sign(XAdESSigner.java:429)
at es.gob.afirma.signers.xades.AOXAdESSigner.sign(AOXAdESSigner.java:405)
at es.gob.afirma.standalone.CommandLineLauncher.sign(CommandLineLauncher.java:797)
at es.gob.afirma.standalone.CommandLineLauncher.signByCommandLine(CommandLineLauncher.java:624)
at es.gob.afirma.standalone.CommandLineLauncher.processCommandLine(CommandLineLauncher.java:152)
at es.gob.afirma.standalone.CommandLineLauncher.main(CommandLineLauncher.java:1006)
at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:573)

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See h t t p://w w w.slf4j.org/codes.html#StaticLoggerBinder for further details.
<afirma><result>true</result><response><msg>La operacion ha terminado correctamente </msg></response></afirma>

y lanzo el curl con

curl.exe --data-binary @FACTURA_FIRMADA.XML --cert-type P12 --cert certificadodispositivo.p12:230175 -H "Content-Type: application/xml;charset=UTF8" -X POST h t t p s://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta -o RESPUESTA.XML

Y siempre me da este error

<Codigo>002</Codigo>

<Descripcion>Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-datatype-valid.1.2.1: 'codigo_HASH' is not a valid value for 'base64Binary'.</Descripcion>


Gracias de nuevo
Responder Con Cita
  #7  
Antiguo 09-07-2021
sEngine sEngine is offline
Miembro
 
Registrado: jul 2021
Posts: 53
Poder: 3
sEngine Va por buen camino
Estas poniendo los valores correspondientes en codigo_hash y demas al firmarlo? Porque por el error parece que estes poniendo la variable sin mas

Por ejemplo el codigo hash de guipuzkoa es 6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=
Responder Con Cita
  #8  
Antiguo 09-07-2021
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Cita:
Empezado por sEngine Ver Mensaje
Estas poniendo los valores correspondientes en codigo_hash y demas al firmarlo? Porque por el error parece que estes poniendo la variable sin mas

Por ejemplo el codigo hash de guipuzkoa es 6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=

Error de novato.



Vi la string entera y no cai en el que el hash era un código


Gracias
Responder Con Cita
  #9  
Antiguo 09-07-2021
Avatar de Eric Mtz
Eric Mtz Eric Mtz is offline
Miembro
 
Registrado: jun 2021
Ubicación: Vitoria-Gasteiz
Posts: 43
Poder: 0
Eric Mtz Va por buen camino
¡Muy buenas a todos!, ¿Cómo lo lleváis?, llevo un par de días callado observando desde las sombras. (Insertar risa diabólica)

Bueno, volviendo a nuestro odio común, sigo con lo de usar el DNI a modo de certificado en el envío del 140 a quien no debe de ser nombrado.

Os pongo en situación de manera teatral:

Ubicación: Foro TBAI
Pregunta: #934
Usuario: HerensugeBeltz
Hora: Indefinida (Solo pone "Hace 2 Días")
Música: Alguna de ascensor... nose... de esas que se ponen en bucle y que ralentizan el ascenso de lo repetitivas que son.

Cita:
En mis pruebas yo utilizo el certificado de mi DNI electrónico, que exporté a un .pfx e instalé en el almacén de certificados de Windows.
Vuelvo a retomar mi soliloquio, ¿Cómo has exportado el certificado del DNI a .pfx?, he estado googleando pero no encuentro nah, tengo conectado mi DNI al PC con un cacharro de esos que te lo leen y hasta solicité el certificado de persona física pero no he obtenido buenos resultados con ninguno de mis intentos.

Si alguien puede aportar algo que acuda a la caja de comentarios por favor. (Eso ha sonado muy supermercado).

Bueno, pues esto ha sido todo señores, cómo veis, ahora puedo insertar sonidos en mis mensajes gracias al poder de la imaginación, en fin, gracias por leer una vez mas mis dudas, pasad un buen fin de semana.
Responder Con Cita
  #10  
Antiguo 09-07-2021
tejano tejano is offline
Miembro
 
Registrado: dic 2020
Posts: 128
Poder: 4
tejano Va por buen camino
Cita:
Empezado por Eric Mtz Ver Mensaje
¡Muy buenas a todos!, ¿Cómo lo lleváis?, llevo un par de días callado observando desde las sombras. (Insertar risa diabólica)

Bueno, volviendo a nuestro odio común, sigo con lo de usar el DNI a modo de certificado en el envío del 140 a quien no debe de ser nombrado.

Os pongo en situación de manera teatral:

Ubicación: Foro TBAI
Pregunta: #934
Usuario: HerensugeBeltz
Hora: Indefinida (Solo pone "Hace 2 Días")
Música: Alguna de ascensor... nose... de esas que se ponen en bucle y que ralentizan el ascenso de lo repetitivas que son.



Vuelvo a retomar mi soliloquio, ¿Cómo has exportado el certificado del DNI a .pfx?, he estado googleando pero no encuentro nah, tengo conectado mi DNI al PC con un cacharro de esos que te lo leen y hasta solicité el certificado de persona física pero no he obtenido buenos resultados con ninguno de mis intentos.

Si alguien puede aportar algo que acuda a la caja de comentarios por favor. (Eso ha sonado muy supermercado).

Bueno, pues esto ha sido todo señores, cómo veis, ahora puedo insertar sonidos en mis mensajes gracias al poder de la imaginación, en fin, gracias por leer una vez mas mis dudas, pasad un buen fin de semana.
De momento hasta que no tengas el certificado, utiliza el certificado de producción de Izenpe.

Si miras unas páginas arriba, tienes dónde localizarlo.

https://www.izenpe.eus/web_corporati...ificados.shtml

Saludos
Responder Con Cita
  #11  
Antiguo 12-07-2021
Avatar de b4aronDeLaBirr4
b4aronDeLaBirr4 b4aronDeLaBirr4 is offline
Miembro
 
Registrado: jul 2021
Posts: 67
Poder: 3
b4aronDeLaBirr4 Va por buen camino
Buenas!

¿Pero os están funcionando los certificados de Izenpe? Porque a mí me está devolviendo:

"Certificado remitente incorrecto (revocado o no homologado)" tanto por Postman como por cUrl.
Responder Con Cita
  #12  
Antiguo 09-07-2021
JoseLeeTo JoseLeeTo is offline
Miembro
 
Registrado: jun 2021
Posts: 65
Poder: 3
JoseLeeTo Va por buen camino
Post Alava

Hola a tod@s;

He preguntado a Álava acerca de las especificaciones técnicas, y me han respondido que esperan que para Septiembre esperan tenerlo todo listo y publicarlas en la Web.

Me dijeron lo mismo hace meses y que esperaban que para Junio estuviese.... Ahora es para Septiembre.

....
Se admiten apuestas.

Última edición por JoseLeeTo fecha: 09-07-2021 a las 10:33:11.
Responder Con Cita
  #13  
Antiguo 09-07-2021
Sistel Sistel is offline
Miembro
 
Registrado: nov 2019
Ubicación: Bilbao
Posts: 373
Poder: 5
Sistel Va por buen camino
Cita:
Empezado por JoseLeeTo Ver Mensaje
Hola a tod@s;

He preguntado a Álava acerca de las especificaciones técnicas, y me han respondido que esperan que para Septiembre esperan tenerlo todo listo y publicarlas en la Web.

Me dijeron lo mismo hace meses y que esperaban que para Junio estuviese.... Ahora es para Septiembre.

....
Se admiten apuestas.
Hola,

Eso de las apuestas, déjaselo al colega Key que tiene unos "pálpitos" muy atinados

https://www.clubdelphi.com/foros/sho...&postcount=862

Saludos
Responder Con Cita
Respuesta



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 3557 Hace 1 Semana 17:42:47
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 23:22:07.


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
Copyright 1996-2007 Club Delphi