Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03

Duda de Como Autentificarse en los WebService de Descarga de los XML

Todo lo que no cabe en los demas foros........
estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor estebanchambas » Jue Sep 27, 2018 8:21 am

DADO escribió:@estebanchambas

Segun yo no deberias enviar este header

Código: Seleccionar todo

--header "Content-Length: 3912"


Eso indica el tamaño en bytes del mensaje SOAP que estas enviando, pero puede variar y creo que CURL te calcula automaticamente este valor y lo envia

El problema es que si no es correcto puedes estar cortando el SOAP o enviando informacion de mas, haz tus pruebas y checalo

Y si, obtener el error "An error occurred when verifying security for the message" aunque no lo parezca ya es un avance importante, ya por lo menos te estas conectando y estas recibiendo una respuesta


Gracias Dado.
Les debo una, seguiré haciendo pruebas a ver como me va y si, estoy emocionado que al fin me esté respondiendo el Servidor, ahora por la meta, por ese token sagrado jejeje

crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor crono81 » Jue Sep 27, 2018 9:23 am

Perfecto Dado, es lo ultimo que estuve probando ayer tambien, pero sin exito. Solo una duda, como realizas la firma?:

Código: Seleccionar todo

dgst -sha1 -sign base64
o
dgst -sha1 -binary -sign base64

Otra cosa, el xml final lo envias canonizado (con los namespaces agregados y nodos expandidos), o normal como el request que compartiste inicialmente?
Otra más, como haces el envio del xml, como post directamente o con httprio (lo que uso yo) y antes de enviar el mensaje lo editas. Si es post, como agregas el xml al enviarlo, yo intenté con IDHTTP (componentes indy) pero no se como agregar el xml, si como texto o binario...

EDIT: si envío el request con SOAPui, obtengo esto:

Código: Seleccionar todo

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <s:Header>
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <u:Timestamp u:Id="_0">
            <u:Created>2018-09-27T15:54:39.428Z</u:Created>
            <u:Expires>2018-09-27T15:59:39.428Z</u:Expires>
         </u:Timestamp>
      </o:Security>
   </s:Header>
   <s:Body>
      <s:Fault>
         <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
         <faultstring xml:lang="en-US">El certificado no es válido</faultstring>
         <detail>
            <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
               <HelpLink i:nil="true"/>
               <InnerException i:nil="true"/>
               <Message>El certificado no es válido</Message>
               <StackTrace>at Sat.Cfdi.Seguridad.Autenticacion.Autenticacion.Autentica()
   at SyncInvokeAutentica(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>
               <Type>System.ServiceModel.InvalidMessageContractException</Type>
            </ExceptionDetail>
         </detail>
      </s:Fault>
   </s:Body>
</s:Envelope>

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor estebanchambas » Jue Sep 27, 2018 10:09 am

DADO escribió:Si, lo hago a mano

Solo el hash del nodo que se firma y el certificado lo codifico en base64, pero todo el SOAP no

Ahi mencione que uso como SOAPAction, checalo nuevamente

Si, este es el Autentica, donde obtienes el token para los demas servicios

Dado, una pregunta viendo tu Request, veo que en el archivo descargable, no Trae estas etiquetas, debajo de <s:Header>
<a:Action>https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/#Autentica</a:Action>
<a:To>https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc</a:To>
<a:MessageID>uuid:e0461b44-3654-712a-ab90-38bbacbfdb02</a:MessageID>

que habías publicado antes, imagino que esta sección de código te la genera el servidor al Responder no?

Saludos y perdón por la molestia

Avatar de Usuario
Dado
Mensajes: 15838
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor Dado » Jue Sep 27, 2018 10:24 am

El TimeStamp lo firmo CON EL NAMESPACE, pero lo envio SIN NAMESPACE

El Security Token, lo firmo y lo envio igual

El sellado lo hago con rutinas internas de Delphi que se comunicacion con OpenSSL, no hago llamda en linea de comando como tu, de todos modos es *exactamente* la misma rutina que uso para sellar los CFDI

El envio lo hago con POST directamente, uso una libreria llamada Synapse ( http://www.ararat.cz/synapse/ ) (que ya es muy vieja, no te recomendaria usarla para proyectos nuevos)

Te recomiendo usar un sniffer, yo uso uno de paga llamado HTTAnalyzer ($69usd - https://www.ieinspector.com/httpanalyzer/index.html ) pero dicen que hay uno llamado Fiddler gratuito. Con estos programas ves *exactamente* que se esta enviando y que esta respondiendo

@estebanchambas

No, yo no uso <a:Action> ni <a:To> para nada, igual eso es de otra forma de programacion porque en Delphi no lo requerimos

En Delphi, definimos un objeto llamado HTTP y luego atravez de sus metodos le agregamos headers, le agregamos las URL, etc. Todo eso antes de usar el metodo POST, pero como vez todo es interno en programacion, no lo incluyo en los request
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor estebanchambas » Jue Sep 27, 2018 10:46 am

@Dado
muchas gracias, tomo nota, saludos

crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor crono81 » Jue Sep 27, 2018 11:16 am

Gracias Dado, ya obengo respuesta satisfactoria con indy, pero el token me llega al parecer en binario, debe ser configuracion del componente. Y con el HttpRio me quedo en el error del inicio

EDITO: en efecto, era un configuración del componente, ya obtengo el token.
A seguirle, saludos

Avatar de Usuario
Dado
Mensajes: 15838
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor Dado » Jue Sep 27, 2018 11:41 am

Que bien !!

Como ves si le seguimos en otro tema ? aqui fue "Auntentificarse", vamos a publicar aca, que ya es la parte de Crear Nueva Peticion (clic aqui)

Aqui echenle ganas compañeros que nos han estado siguiendo, nos vemos en la segunda parte :D
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor estebanchambas » Jue Sep 27, 2018 11:52 am

@Dado
Hola, Para el TimeStamp,
veo que trae dos etiquetas , la de <u:Created> y la de <u:Expires>

También veo que en la de u:Created trae la fecha impresa al momento, en mi caso desde mi lenguaje XOJO, saco una variable del tipo DATE y le pido me saque la fecha Actual en formato SQLDateTime a lo cual me arroja algo como esto:

2018-09-27 12:50:19 a lo cual sustituyo ese espacio por una "T", pero me surge una duda, en tu Request Muestra al final de los segundos viene seguido de un "Punto" y 763Z, ¿763, son milésimas de segundo? y después va seguido de una Z?


También alcanzo a entender que en Expires, es la misma fecha, solo que le subes 5 minutos, cierto?

Saludos

Avatar de Usuario
Dado
Mensajes: 15838
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor Dado » Jue Sep 27, 2018 12:05 pm

Si, todo correcto lo que comentas, son milisegundos, es una zeta, son 5 minutos mas en el Expire

Para los milisegundos yo le invente un ".000Z" fijo

Y he insistido muchisimo cada vez que toco el tema que la hora debe ser hora GMT, esto es, la hora de la ciudad de Mexico mas 5, y es que hice pruebas especificamente en esto y si pones la hora de CDMX tal cual te marca el consabido error de "An error occurred when verifying security for the message"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensajepor estebanchambas » Jue Sep 27, 2018 12:45 pm

Chicos, hola que tal.
Una pregunta

En la parte donde pone en el Request:
<o:BinarySecurityToken u:Id="uuid-7de252ad-a383-458d-a467-8aadb076df4f-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">


la parte que dice u:Id="uuid-7de252ad-a383-458d-a467-8aadb076df4f-1" imagino que eso no lo tengo que poner, ya que eso lo ha de generar el Servidor al responder cierto? o hay que generarlo a partir de algo?

Saludos


Volver a “Otros”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados