Ver Mensaje Individual
  #265 (permalink)  
Antiguo 11/11/2010, 17:52
Avatar de Nanox
Nanox
 
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años
Puntos: 0
Respuesta: Factura electroncia sat mexico

SEGUNDA ENTREGA..PHP..

Sellar y meter todo a un xml. con la cadena que sale del xlst.

Código PHP:
$file=$keyP;                                    // Ruta del certificado
    
$datos file($file);
    
$certificado ""$carga=false;
    for (
$i=0$i<sizeof($datos); $i++)             //lellendo el certificado
    
{
        if (
strstr($datos[$i],"END CERTIFICATE")) $carga=false;
        if (
$carga$certificado .= trim($datos[$i]);
        if (
strstr($datos[$i],"BEGIN CERTIFICATE")) $carga=true;
    }
    
$root->setAttribute("certificado",$certificado);//lo pegamos al xml
    
$xml->formatOutput true;                      //Genera un archivo con el mensaje XML + EDI  O lo guarda en cfdsello
    
$todo $xml->saveXML();
    if (
$ruta != "/dev/null"
    {
        
$xml->formatOutput true;
        
$xml->save($ruta.$nufa.".xml");             //con este xml se empalma el xslt ver 1
        
    

    else 
    {
        
$paso $todo;
        
$conn->replace("cfdsello",array("selldocu"=>$nufa,"sellcade"=>$cadena_original,"sellxml"=>$paso),"selldocu",true);
    }
    
  
    
    
$file=$ruta."aaa010101aaa.key.pem";             //llave privada
 
    
$dom1 = new DOMDocument();
    
$dom1->load($ruta.$nufa.".xml");                //Cargas el XML de la factura (los datos aun estan incompletos)
    
$xsl = new DOMDocument;
    
$xsl->load($ruta."cadenaoriginal_1_0.xslt");    //Cargas el xsl
    
    
$proc = new XSLTProcessor;
    
$proc->registerPHPFunctions();
    if (!
$proc->hasExsltSupport()){echo"EXSLT NO disponible"; die('EXSLT NO disponible');}
    
$proc->importStyleSheet($xsl);                  
    
$cadena_original=$proc->transformToXML($dom1);  //Transformas la salida, y obtiens la cadena original
        
    
$pkeyid openssl_get_privatekey(file_get_contents($file));             //Obtienes la llave privada
    
openssl_sign($cadena_original$crypttext$pkeyidOPENSSL_ALGO_MD5);  //Firmas la cadena original
    
openssl_free_key($pkeyid);
    
$sello base64_encode($crypttext);             //lo codifica en base64
    
    //$root->setAttribute("sello",$sello);          //pegamos el sello al xml forma sencilla jjejejeje
   
    
$comp=$dom1->getElementsByTagName('Comprobante')->item(0)->attributes->getNamedItem('sello')->nodeValue=$sello//agregas el sello
    
$dom1->save($ruta2.$_SESSION['pestananom'].$nufa.".xml");               //guardas de nuevo el sml ya completo

---------------funcion------------- es la misma que esta en la pagina de la corona.

function 
cargaAtt(&$nodo$attr)                     //Funcion que carga los atributos a la etiqueta XML
{
    global 
$xml$cadena_original;
    
$quitar = array('sello'=>1,'noCertificado'=>1,'certificado'=>1);
    foreach (
$attr as $key => $val
    {
        
$val preg_replace('/\s\s+/'' '$val);   // Regla 5a y 5c
        
$val trim($val);                           // Regla 5b
        
if (strlen($val)>0
        {                                            
// Regla 6
            
$val utf8_encode(str_replace("|","/",$val)); 
            
//$val = str_replace("|","/",$val);
            
$nodo->setAttribute($key,$val);
            if (!isset(
$quitar[$key]))if (substr($key,0,3) != "xml" && substr($key,0,4) != "xsi:")$cadena_original .= $val "|";
        }
    }

Saluds.. PHPEROS, que se diviertan, ya estoy emitiendo.

grax zeroccm por contestar en el otro hilo
(
Cita:
Iniciado por Nanox Ver Mensaje
alguien ya pudo?
)