<?php
//XML PETICION  CERTIFICADO
$xml =' <q1:data_receiver_certificate_request xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.w3.org/2000/09/xmldsig#" xmlns:q1="urn:logalty:schemas:core:data:1.0">
        <q1:guid>'.$guid.'</q1:guid>
        <Signature>
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                    <Reference URI="">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                        <DigestValue></DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue></SignatureValue>
                <KeyInfo>
                <X509Data>
                    <X509Certificate></X509Certificate>
                </X509Data>
                <KeyValue>
                    <RSAKeyValue>
                        <Modulus></Modulus>
                        <Exponent></Exponent>
                    </RSAKeyValue>
                </KeyValue>
            </KeyInfo>
        </Signature>
        </q1:data_receiver_certificate_request>
';
file_put_contents('request_download_certf.xml', $xml);
/////////////////////////CERTIFICADO DEL XML///////////////////////////////
shell_exec( 'xmlsec1  --sign --output signed.xml --pkcs12 ./certificado/certificado.p12 --pwd logalty request_download_certf.xml');
//se elimina primera línea del XML que contiene <?xml version="1.0" encoding="utf-8"?\>
shell_exec( 'sed \'1d\' signed.xml > signed_send.xml');
shell_exec( 'rm signed.xml');
//se añade cabeceras SOAP
shell_exec( 'echo \'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>\' > SOAP.xml ');
shell_exec( 'cat SOAP.xml signed_send.xml > signed_SOAP.xml');
shell_exec( 'rm signed_send.xml');
shell_exec( 'rm SOAP.xml');
shell_exec( 'sed -e \'$a </soapenv:Body> </soapenv:Envelope>\' signed_SOAP.xml > signed_SOAP_send.xml');
shell_exec( 'rm signed_SOAP.xml');
//se obtiene el XML firmado
$input_data = file_get_contents("signed_SOAP_send.xml");
//HAGO EL POST DE LA FIRMA=================================================
$request = 'POST';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL ,$host);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER,array('User-Agent: curl/7.15.5','Accept: * /*','Content-Type: text/xml; charset=UTF-8','Content-Length: '.strlen($input_data)));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,5);
curl_setopt($curl, CURLOPT_TIMEOUT,30);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST,$request);
curl_setopt($curl, CURLOPT_POSTFIELDS, $input_data);
$xml_certf = curl_exec($curl);
//print_r($result);
//INTERPRETO LA RESPUESTA=======================================================
$doc_certf = new DOMDocument();
libxml_use_internal_errors(true);
$doc_certf->loadHTML($xml_certf);
libxml_clear_errors();
$xml_certf = $doc_certf->saveXML($doc_certf->documentElement);
$xml_certf = simplexml_load_string($xml_certf);
//HAGO EL UPLOAD DEL CERTTIFICADO==============================================
if ( isset($xml_certf->body->envelope->body->data_receiver_certificate_response->main) AND  $xml_certf->body->envelope->body->data_receiver_certificate_response->main == "0000" ) {
    $main = (string)$xml_certf->body->envelope->body->data_receiver_certificate_response->main;
    $binary_b64 = (string)$xml_certf->body->envelope->body->data_receiver_certificate_response->receiver_certificates->receiver_certificate[0]["data"];
    $binario = base64_decode($binary_b64);
    //print_r($main);
    //UPLOAD DEL CERTIFICADO A LA BBDD=========================================
    $clave = get_id_unico();
	$entrada = get_id_unico();
    $grapado = get_id_unico();
    $ambito = "PUB";
    $nombre = '[CERTIFICADO] ' .  $nombre_doc_firm;
	//$tamano = (isset($_POST['doc_size_2'])) ? $_POST["doc_size_2"] : 0 ;
    
	$ext = get_extension($nombre);
	$exist_doc = docExist($bd_conn, $nombre, $padre, $ambito);
	while ( $exist_doc == 1) {
		$a = explode( '.', $nombre );
		$nombre_doc = $a[0];
		$ext_doc = end( $a );
		$cant_duplicado = numeroDocsDuplicados($bd_conn, $nombre_doc, $padre);
		$new_num = $cant_duplicado + 1;
		$nombre = $nombre_doc."(".$new_num.").".$ext_doc;
		$exist_doc = docExist($bd_conn, $nombre, $padre, $ambito);
	}
    
	$binario = mysqli_real_escape_string($bd_conn, $binario);
	$parte = 1;
	$fichero_ok = subirContenido($bd_conn, $parte, $sufijo, $binario, $tamano, $clave, $entrada);
	if ($parte == 1) {
		$partes = $parte;
	}else{
		$partes = $parte -1;
	}
    docBibliotecaElementos($bd_conn, $clave, $nombre, $ext, $padre, $tamano, $acceso_doc, $user, $entrada, $ordenador, $partes, $sufijo, $ambito, $permiso, $ubicacion, $origen, $archivo, $grapado, $tipo);
    historialLog($bd_conn, $clave, $user, $nombre, $ordenador, $ambito, $acceso_doc, $tamano);
    updateDescargaCetef($bd_conn, $guid );
/*
    $data[] = array ( 
        "status" => " OK",
	    "message" => "success : the document was updated correctly!"
    );
    header("Content-type: application/json; charset=utf-8");
    echo json_encode($data);
    */ 
}else{
    $error = 1;
}
?>