Descarga Masiva CFDI
Publicado: Mar Nov 20, 2018 1:49 pm
hola buen dia alguien logro ya poder utilizar los web services del sat para descargar masivamente los xml.
FACTURA ELECTRONICA EN MEXICO
https://www.validacfd.com/phpbb3/
crono81 escribió:Tengo información de un acceso, que yo uso, es el siguiente (aclaro que no es para el web service, sino para otro servicio del sat):A ver si sirve de algoCódigo: Seleccionar todo
cadena := tokenuuid + '|' + Rfc + '|' + NoCert;//cadena se guarda en el archivo c:\cadena.txt //Esta cadena se firma con sha1 y se codifica dos veces a base64 (no se porque) firma := openssl dgst -sha1 -sign c:\llave.key -passin pass:password c:\cadena.txt | openssl enc -base64 -A | openssl enc -base64 -A //El tokenuuid se codifica en base64 (solo el token) //tokenuuid se guarda en c:\tokenuuid.txt token := openssl enc -base64 -A -in c:\tokenuuid.txt //Se concatena el token codificado junto con la firma firma := token + '#' + firma; //firma se guarda en c:\firma.txt //esta concatenacion se codifica nuevamente a base64 (creo que tienen una obsesión con esto) firma := openssl enc -base64 -A -in c:\firma.txt; //Ésta última codificación se usa para acceder al sitio
Código: Seleccionar todo
var laFirma = generaFirma(document.getElementById("privateKeyPassword").value, co);
Código: Seleccionar todo
var co = document.getElementById("tokenuuid").value + "|" + rfc + "|" + numSerie;
Código: Seleccionar todo
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>
caviresa escribió:Buen día a todos!.
Les platico que he seguido las instrucciones de la creación del mensaje de autenticación, sin embargo no logro obtener el token, siempre obtengo la respuesta:
Saben si existe una manera de hacer alguna validación?, la verdad es que ya no sé que más revisar...Código: Seleccionar todo
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>
Adjunto un ejemplo del mensaje que estoy obteniendo.
Agradeceré cualquier ayuda, gracias.
Saludos.
Ok, gracias, usaré comandos de openssl, a ver si hay algún cambio, actualmente estoy usando funciones de PHP nativas, mismas que uso para el timbrado de cfdi sin mayor problema.estebanchambas escribió: Estoy igual, me sale lo mismo, aunque en mi caso estoy atacando estos problemas:
1) las cadenas a firmar o a hacer Digest no deben tener espacios(como en mi caso)
2) Veo que el EncodeBase64 de todos los fabricantes de Software es el mismo. Yo probé con el de XOJO que es el que uso y el de OpenSSL y da valores distintos, por lo que se ve tenemos que apegarnos a usar exclusivamente OpenSSL, para todos los procesos de criptografía y no usar otras librerías
Código: Seleccionar todo
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode>
<faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
crono81 escribió:De acuerdo Dado, ya logré un avance, el problema no es la canonización, es problema en el propio sha1, te comento, nosotros tratabamos de obtener la base64 del hash representado en ascii, lo cual está mal, debe ser la base64 del hash en binario, ya obtengo un DigestValue de la longitud que muestra el request, yo uso openssl y lo resolví así:Lo cual ya me dá el resultado deseado, ahora sigue el SignatureValue, el cual veo en otro foro, que se obtiene de otros datos y no del timestamp como comentabamos antes, dejo la liga:Código: Seleccionar todo
openssl dgst -sha1 -binary "D:\Proyectos\Varios\post web\DescargaSatWS\sign.txt" | openssl enc -base64 -A
https://social.msdn.microsoft.com/Forum ... evelopment
La información que interesa de ahi es esta:For future information seekers, here's what worked for me.
1. Digest value - canonicalize the timestamp xml, do a simple SHA1 hash on it.
2. Place the digestvalue in the 'signedInfo' and canonicalize the SignedInfo XML.
3. Calculate a derived PSHA1 key based on the trust:BinarySecret of the original token request ('main' key) and the trust:BinarySecret (seed/nonce/secondary key) of the token response.
4. Hash the binary version of the base64 of your canonicalized signedxml as HMACSHA1, with the derived key as the secret, and turn the result hash back into Base64, that's your SignatureValue