
DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
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
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Es correcto, tienes que verificar y verificar y verificar......checa el foro al que te hago referencia
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 9
- Registrado: Vie Feb 01, 2019 11:59 am
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Gracias dado, ahora tengo más claro lo que hay que esperar para la descarga de las facturas. Saludos 

-
- Mensajes: 9
- Registrado: Vie Feb 01, 2019 11:59 am
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Hey me surgió otra duda, ya llevo 5 solicitudes que al cabo de dos días me andan rechazando. ¿Es normal? ¿Hay algo que pueda hacer para que me devuelva la solicitud en número 3(terminada)?¿Estoy haciendo algo mal? Saludos
.

Código: Seleccionar todo
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VerificaSolicitudDescargaResponse xmlns="http://DescargaMasivaTerceros.sat.gob.mx">
<VerificaSolicitudDescargaResult CodEstatus="5000" EstadoSolicitud="5" CodigoEstadoSolicitud="5004" NumeroCFDIs="0" Mensaje="Solicitud Aceptada" />
</VerificaSolicitudDescargaResponse>
</s:Body>
</s:Envelope>
-
- Mensajes: 3
- Registrado: Vie Feb 01, 2019 1:45 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Hice cambios en la parte de SOAP y consumir el webservices, ahora ya obtengo una respuesta que es An error occurred when verifying security for the message. Alguna idea de que podría estar mal???Saul_RS escribió:Excelente aporte, hice solo unas pocas modificaciones pero la parte de consumir el servicio no me devuelve ningún valor. Si alguien pudiera apoyarme en el uso de CURL se los agradecería, aquí mi códigomo.rodrigo escribió:Buenas Tardes.
Estoy realizando el consumo del "WebService" en php, pero no me deja me sale error "An error occurred when verifying security for the message.", intente copiar todo al pie de la letra., inclusive obtener el valor canonizado que ponen de ejemplo con las fechas que ponen de ejemplo ( se hace de la misma manera que para cancelar un cfdi)
Código: Seleccionar todo
<?php
/* Obtener fecha con el formato requerido y sumar 5 Horas para coincidir con el horario GMT */
$hora_actual = new DateTime("America/Mexico_City");
$hora_actual->add(new DateInterval('PT6H'));
$actual = $hora_actual->format('Y-m-d\TH:i:s');
/* De la fecha obtenida sumar 5 minutos */
$hora_actual2 = new DateTime($actual);
$hora_actual2->add(new DateInterval('PT5M'));
$expira = $hora_actual2->format('Y-m-d\TH:i:s');
/* Se agregan los milisegundos y la Z para cumplir con el formato */
$actual.= '.000Z';
$expira.= '.000Z';
/* Se arma el nodo Timestamp sustituyendo los valores */
$time = '<u:Timestamp xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" u:Id="_0"><u:Created>' . $actual . '</u:Created><u:Expires>' . $expira . '</u:Expires></u:Timestamp>';
/* Aplicar el HASH y codificar en Base64 el nodo Timestamp */
$dom = new DOMDocument();
$dom->loadXML($time);
$canonicalized = $dom->C14N();
$digest = base64_encode(pack("H*", sha1($canonicalized)));
/* Firma con la Llave privada y codificar en Base64 el Digest del nodo Timestamp */
$path_key = 'D:/key_pruebas.pem';
$cadenafirmada = "";
$fp = fopen($path_key, "r");
$priv_key = fread($fp, filesize($path_key));
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);
openssl_sign($digest, $cadenafirmada, $pkeyid, OPENSSL_ALGO_SHA1);
$sello = base64_encode($cadenafirmada);
openssl_free_key($pkeyid);
/* Leer Certificado */
$path_cert = 'D:/cert_pruebas.pem';
$fp = fopen($path_cert, "r");
$public_key = fread($fp, filesize($path_cert));
fclose($fp);
$certificado = substr($public_key, 27, -27);
/* Genrerar UUID */
$uuid = "uuid-" . genUuid() . "-1";
/* Armar el REQUEST */
$autenticacion = '<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>' . $actual . '</u:Created><u:Expires>' . $expira . '</u:Expires></u:Timestamp><o:BinarySecurityToken u:Id="' . $uuid . '" 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">' . $certificado . '</o:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>' . $digest . '</DigestValue></Reference></SignedInfo><SignatureValue>' . $sello . '</SignatureValue><KeyInfo><o:SecurityTokenReference><o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#' . $uuid . '"/></o:SecurityTokenReference></KeyInfo></Signature></o:Security></s:Header><s:Body><Autentica xmlns="http://DescargaMasivaTerceros.gob.mx"/></s:Body></s:Envelope>';
/* Agregar Headers */
$header = array("Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica",
"Content-length: " . strlen($autenticacion),
);
/* Inicializar curl */
$soap = curl_init();
curl_setopt($soap, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($soap, CURLOPT_URL, 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc');
curl_setopt($soap, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($soap, CURLOPT_TIMEOUT, 10);
curl_setopt($soap, CURLOPT_POST, true);
curl_setopt($soap, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($soap, CURLOPT_TIMEOUT_MS, 50000);
curl_setopt($soap, CURLOPT_POSTFIELDS, $autenticacion);
curl_setopt($soap, CURLOPT_HTTPHEADER, $header);
$respuesta = curl_exec($soap);
var_dump($respuesta);
curl_close($soap);
die();
function genUuid() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
}
-
- Mensajes: 51
- Registrado: Mié Ago 08, 2018 1:30 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Saul_RS Ya no entendi nada.
Ese error ya te daba antes en tu anterior publicación y en esta pusiste exactamente lo mismo.
¿Cual es la diferencia?
Ese error ya te daba antes en tu anterior publicación y en esta pusiste exactamente lo mismo.
¿Cual es la diferencia?
-
- Mensajes: 3
- Registrado: Vie Feb 01, 2019 1:45 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Ese error no me lo daba antes y no es exactamente el mismo código.estebanchambas escribió:Saul_RS Ya no entendi nada.
Ese error ya te daba antes en tu anterior publicación y en esta pusiste exactamente lo mismo.
¿Cual es la diferencia?
Hice cambios en los header por que al principio no me devolvía ningún mensaje, nada. Con las modificaciones ya hace la conexión al webservices pero me devuelve ese error.
Anterior:
Código: Seleccionar todo
/* Agregar Headers */
$header = array('Content-type: text/xml;charset="utf-8"', 'SOAPAction: "http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica"');
/* Inicializar curl */
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc');
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $autenticacion);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
curl_setopt($soap_do, CURLOPT_FRESH_CONNECT, true);
$respuesta = curl_exec($soap_do);
curl_close($soap_do);
var_dump($respuesta);
die();
Código: Seleccionar todo
/* Agregar Headers */
$header = array("Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica",
"Content-length: " . strlen($autenticacion),
);
/* Inicializar curl */
$soap = curl_init();
curl_setopt($soap, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($soap, CURLOPT_URL, 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc');
curl_setopt($soap, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($soap, CURLOPT_TIMEOUT, 10);
curl_setopt($soap, CURLOPT_POST, true);
curl_setopt($soap, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($soap, CURLOPT_TIMEOUT_MS, 50000);
curl_setopt($soap, CURLOPT_POSTFIELDS, $autenticacion);
curl_setopt($soap, CURLOPT_HTTPHEADER, $header);
$respuesta = curl_exec($soap);
var_dump($respuesta);
curl_close($soap);
die();
-
- Mensajes: 118
- Registrado: Lun Dic 16, 2013 5:55 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
El error que te marca es porque estás haciendo mal el hash o el sello, o ambos
-
- Mensajes: 9
- Registrado: Vie Feb 01, 2019 11:59 am
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
¿Ya que tengo descargado el paquete en base64 solo lo tengo que descifrar y luego volverlo un zip? ¿Alguien lo ha hecho en Java?Saludos
.

-
- Mensajes: 51
- Registrado: Mié Ago 08, 2018 1:30 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
AXterix, yo ya había publicado eso, bueno obvio usando el python mismo del API de luisturrios y hago esto para crear el ZIP en base a la salida Base64 que genera el último web service. y hago el siguiente procedimiento:Axterix escribió:¿Ya que tengo descargado el paquete en base64 solo lo tengo que descifrar y luego volverlo un zip? ¿Alguien lo ha hecho en Java?Saludos.
code = "salidabase64del webserviceaqui"
decoded_string = base64.b64decode(code)
with open("cfdis.zip", "wb") as cfdis_file2:
cfdis_file2.write(decoded_string);
No se como se haría en JAVA
-
- Mensajes: 76
- Registrado: Lun Feb 14, 2011 2:15 pm
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Buenos días. Nuevamente solicito su apoyo, ya no seré tan ilustrativa para no hacer cansado el post.
Tengo el SignedInfo de una autenticación correcta en un archvito txt:
Usando el pem del key de una Fiel genero el sello con Openssl y no es igual al que envió la petición de donde fue obtenido el SignedInfo, al cual solo le agregué al SignedInfo original, aún si no hago ningún cambio al SignedInfo y lo mando a sellar tal cual está no me da el mismo resultado.
¿Alguien podría darme una pista por qué no me salen igual?
Gracias.
Tengo el SignedInfo de una autenticación correcta en un archvito txt:
Código: Seleccionar todo
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>s9gmL0php/Xy5RYXkJd03oHaVok=</DigestValue></Reference></SignedInfo
Código: Seleccionar todo
xmlns="http://www.w3.org/2000/09/xmldsig#"
¿Alguien podría darme una pista por qué no me salen igual?
Gracias.