Pues finalmente he podido saber que PAC timbro un CFDi y les comparto la info esperando le sirva a alguien mas:
Primero hay que tener la lista del SAT de los PAC's, que se puede encontrar aqui
http://www.sat.gob.mx/sitio_internet/as ... 19264.html
Teniendo esta lista en alguna BD podemos simplemente extraer el
noCertificadoSAT del nodo
TimbreFiscalDigital del XML en cuestion y buscando ese CSD en nuestra BD.
Pero si esto no es suficiente y/o queremos ir mas alla podemos acceder al CSD en los servidores del SAT de la siguiente manera:
Si tenemos por ejemplo el CSD en una variable de PHP
$noCert generamos la URL del archivo .cer segmentando el mismo $noCert como sigue:
Código: Seleccionar todo
$dir1 = substr($noCert,0,6);
$dir2 = substr($noCert,6,6);
$dir3 = substr($noCert,12,2);
$dir4 = substr($noCert,14,2);
$dir5 = substr($noCert,16,2);
$url = "ftp://ftp2.sat.gob.mx/certificados/FEA/$dir1/$dir2/$dir3/$dir4/$dir5/$noCert.cer";
Ya que tenemos la URL podemos leer el archivo y leer la info del certificado con
openssl_x509_parse:
Código: Seleccionar todo
$der = file_get_contents($url);
$pem = base64_encode($der);
$cert = "-----BEGIN CERTIFICATE-----\n".chunk_split($pem,64)."-----END CERTIFICATE-----\n";
$arrInfo = openssl_x509_parse($cert);
Por ultimo, en el array generado, si entramos a
subject/OU encontramos una cadena de 20 caracteres que nos dice tanto el RFC del PAC como el Número de Autorización del SAT, con la estructura
PAC{RFC(12 caracteres)}{NoAUT(5 caracteres)}
Sabiendo esto podemos obtener estos valores como sigue:
Código: Seleccionar todo
$pac= $arrInfo['subject']['OU'];
$rfcPAC = substr($pac, 3, 12);
$noAut = substr($pac, -5);
Y ya podremos
buscar en nuestra BD por Número de Certificado, RFC o Número de Autorización.
Espero esta info le sirva a alguien más
Saludos..