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 2:30 pm

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

Mensajepor estebanchambas » Sab Nov 09, 2019 12:21 am

Saul_RS escribió:
Saul_RS escribió:
mo.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)


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ódigo


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???

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));
}



Que crees que a mi me esta pasando lo mismo, está rarísimo. al consumir el Webservice de SOLICITUD, me arroja el UUID de la consulta realizada.

Paso siguiente es Validar ese UUID en el web service de validación no?
Cuando lo valido Automaticamente, el EstadoSolicitud es "1" = Aceptada.

Pero pues obviamente en ese estado, no tiene ningún CFDI.

Entonces guardo el UUID generado y lo consulto mas tarde, y no pasa ni el minuto, al ponerle ese UUID que generó el otro Webservice, cuando ya me sale "Estatus 5" o sea "Cancelado". ¿Eso a que se debe? ¿A alguien mas le ha pasado, a parte de a nosotros dos?

shakira
Mensajes: 73
Registrado: Lun Feb 14, 2011 4:15 pm

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

Mensajepor shakira » Sab Nov 09, 2019 9:20 am

estebanchambas escribió:Que crees que a mi me esta pasando lo mismo, está rarísimo. al consumir el Webservice de SOLICITUD, me arroja el UUID de la consulta realizada.

Paso siguiente es Validar ese UUID en el web service de validación no?
Cuando lo valido Automaticamente, el EstadoSolicitud es "1" = Aceptada.

Pero pues obviamente en ese estado, no tiene ningún CFDI.

Entonces guardo el UUID generado y lo consulto mas tarde, y no pasa ni el minuto, al ponerle ese UUID que generó el otro Webservice, cuando ya me sale "Estatus 5" o sea "Cancelado". ¿Eso a que se debe? ¿A alguien mas le ha pasado, a parte de a nosotros dos?


Lo acabo de checar y mismo resultado. Al final devuelve: 5008 Máximo de descargas permitidas.

Edito: ¿No será que ya se fue al carajo los WS y el SAT solo va a dejar este: https://www.sat.gob.mx/consultas/operac ... tes-(nuevo) y se tenga que hacer por scrap?

Al menos yo no lo había visto.

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

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

Mensajepor estebanchambas » Sab Nov 09, 2019 6:43 pm

shakira escribió:
estebanchambas escribió:Que crees que a mi me esta pasando lo mismo, está rarísimo. al consumir el Webservice de SOLICITUD, me arroja el UUID de la consulta realizada.

Paso siguiente es Validar ese UUID en el web service de validación no?
Cuando lo valido Automaticamente, el EstadoSolicitud es "1" = Aceptada.

Pero pues obviamente en ese estado, no tiene ningún CFDI.

Entonces guardo el UUID generado y lo consulto mas tarde, y no pasa ni el minuto, al ponerle ese UUID que generó el otro Webservice, cuando ya me sale "Estatus 5" o sea "Cancelado". ¿Eso a que se debe? ¿A alguien mas le ha pasado, a parte de a nosotros dos?


Lo acabo de checar y mismo resultado. Al final devuelve: 5008 Máximo de descargas permitidas.

Edito: ¿No será que ya se fue al carajo los WS y el SAT solo va a dejar este: https://www.sat.gob.mx/consultas/operac ... tes-(nuevo) y se tenga que hacer por scrap?

Al menos yo no lo había visto.


Es lo que yo estaba pensando, que horror. Y justo cuando ya le había dado al clavo al ws

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

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

Mensajepor estebanchambas » Dom Nov 10, 2019 8:34 am

shakira escribió:
estebanchambas escribió:Que crees que a mi me esta pasando lo mismo, está rarísimo. al consumir el Webservice de SOLICITUD, me arroja el UUID de la consulta realizada.

Paso siguiente es Validar ese UUID en el web service de validación no?
Cuando lo valido Automaticamente, el EstadoSolicitud es "1" = Aceptada.

Pero pues obviamente en ese estado, no tiene ningún CFDI.

Entonces guardo el UUID generado y lo consulto mas tarde, y no pasa ni el minuto, al ponerle ese UUID que generó el otro Webservice, cuando ya me sale "Estatus 5" o sea "Cancelado". ¿Eso a que se debe? ¿A alguien mas le ha pasado, a parte de a nosotros dos?


Lo acabo de checar y mismo resultado. Al final devuelve: 5008 Máximo de descargas permitidas.

Edito: ¿No será que ya se fue al carajo los WS y el SAT solo va a dejar este: https://www.sat.gob.mx/consultas/operac ... tes-(nuevo) y se tenga que hacer por scrap?

Al menos yo no lo había visto.


Igual tiene lógica, porque esto mismo me pasa tanto con php, como con la versión Python de Luis Iturrios.

Porque si se consumen adecuadamente los webservice, pero no pasa de ahi


Volver a “Otros”

¿Quién está conectado?

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