/** * Método que firma una semilla previamente obtenida * @param seed Semilla obtenida desde SII * @param Firma objeto de la Firma electrónica o arreglo con configuración de la misma * @return Solicitud de token con la semilla incorporada y firmada * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-17 */ private static function getTokenRequest($seed, $Firma = []) { if (is_array($Firma)) { $Firma = new \sasco\LibreDTE\FirmaElectronica($Firma); } $seedSigned = $Firma->signXML((new \sasco\LibreDTE\XML())->generate(['getToken' => ['item' => ['Semilla' => $seed]]])->saveXML()); if (!$seedSigned) { \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::AUTH_ERROR_FIRMA_SOLICITUD_TOKEN, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::AUTH_ERROR_FIRMA_SOLICITUD_TOKEN)); return false; } return $seedSigned; }
/** * Acción para firmar un XML * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-11-09 */ public function firmar_xml() { if (isset($_POST['submit'])) { $xml = file_get_contents($_FILES['xml']['tmp_name']); // obtener nombre del tag y del ID $XML = new \sasco\LibreDTE\XML(); $XML->loadXML($xml); foreach ($XML->documentElement->childNodes as $child) { if ($child instanceof \DOMElement) { $tag = $child->tagName; $id = $child->getAttribute('ID'); break; } } // firmar $Firma = new \sasco\LibreDTE\FirmaElectronica(['file' => $_FILES['firma']['tmp_name'], 'pass' => $_POST['contrasenia']]); $xmlSigned = $Firma->signXML($xml, $id, $tag); // entregar datos ob_end_clean(); header('Content-Type: application/xml; charset=' . $XML->encoding); header('Content-Length: ' . strlen($xmlSigned)); header('Content-Disposition: attachement; filename="' . $id . '_firmado.xml"'); print $xmlSigned; exit; } }