Esempio n. 1
0
 /**
  * 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 que permite al usuario agregar una nueva firma electrónica
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-22
  */
 public function agregar()
 {
     if (isset($_POST['submit'])) {
         // verificar que se haya podido subir el archivo con la firma
         if (!isset($_FILES['firma']) or $_FILES['firma']['error']) {
             \sowerphp\core\Model_Datasource_Session::message('Ocurrió un error al subir la firma', 'error');
             return;
         }
         // cargar firma
         $data = file_get_contents($_FILES['firma']['tmp_name']);
         try {
             $Firma = new \sasco\LibreDTE\FirmaElectronica(['data' => $data, 'pass' => $_POST['contrasenia']]);
         } catch (\sowerphp\core\Exception $e) {
             \sowerphp\core\Model_Datasource_Session::message($e->getMessage(), 'error');
             return;
         }
         // si todo fue ok se crea el objeto firma para la bd y se guarda
         $FirmaElectronica = new Model_FirmaElectronica($Firma->getID());
         $FirmaElectronica->nombre = $Firma->getName();
         $FirmaElectronica->email = $Firma->getEmail();
         $FirmaElectronica->desde = $Firma->getFrom();
         $FirmaElectronica->hasta = $Firma->getTo();
         $FirmaElectronica->emisor = $Firma->getIssuer();
         $FirmaElectronica->usuario = $this->Auth->User->id;
         $FirmaElectronica->archivo = base64_encode($data);
         $FirmaElectronica->contrasenia = \website\Dte\Utility_Data::encrypt($_POST['contrasenia']);
         try {
             $FirmaElectronica->save();
             \sowerphp\core\Model_Datasource_Session::message('Se asoció la firma electrónica de ' . $Firma->getName() . ' (' . $Firma->getID() . ') al usuario ' . $this->Auth->User->usuario, 'ok');
             $this->redirect('/dte/admin/firma_electronicas');
         } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) {
             \sowerphp\core\Model_Datasource_Session::message('Ocurrió un error al guardar la firma.<br/>' . $e->getMessage(), 'error');
             return;
         }
     }
 }
Esempio n. 3
0
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */
/**
 * @file 019-firma_datos.php
 *
 * Ejemplo que muestra como obtener los datos de la persona dueña de la firma
 * electrónica
 *
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-09-22
 */
// respuesta en texto plano
header('Content-type: text/plain');
// incluir archivos php de la biblioteca y configuraciones
include 'inc.php';
// objeto de la firma
$Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']);
// mostrar datos de la persona dueña de la firma
echo 'RUN    : ', $Firma->getID(), "\n";
echo 'Nombre : ', $Firma->getName(), "\n";
echo 'Email  : ', $Firma->getEmail(), "\n";
echo 'Desde  : ', $Firma->getFrom(), "\n";
echo 'Hasta  : ', $Firma->getTo(), "\n";
echo 'Emisor : ', $Firma->getIssuer(), "\n\n\n";
print_r($Firma->getData());
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {
    echo $error, "\n";
}
 /**
  * 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;
     }
 }
Esempio n. 5
0
 /**
  * Método que permite generar un libro de Compras o Ventas a partir de un
  * archivo CSV con el detalle del mismo
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-10-05
  */
 public function generar_libro()
 {
     // si no se viene por post terminar
     if (!isset($_POST['submit'])) {
         return;
     }
     // verificar campos no estén vacíos
     $campos = ['TipoOperacion', 'RutEmisorLibro', 'PeriodoTributario', 'FchResol', 'NroResol', 'TipoLibro', 'TipoEnvio', 'FolioNotificacion', 'contrasenia'];
     foreach ($campos as $campo) {
         if (empty($_POST[$campo])) {
             \sowerphp\core\Model_Datasource_Session::message($campo . ' no puede estar en blanco', 'error');
             return;
         }
     }
     // si no se pasó el archivo error
     if (!isset($_FILES['archivo']) or $_FILES['archivo']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo CSV con el detalle de las compras o ventas al que deseas generar su XML', 'error');
         return;
     }
     // si no se pasó la firma error
     if (!isset($_FILES['firma']) or $_FILES['firma']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo con la firma digital', 'error');
         return;
     }
     // Objeto de la Firma
     try {
         $Firma = new \sasco\LibreDTE\FirmaElectronica(['data' => file_get_contents($_FILES['firma']['tmp_name']), 'pass' => $_POST['contrasenia']]);
     } catch (\Exception $e) {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible abrir la firma digital, quizás contraseña incorrecta', 'error');
         return;
     }
     // generar caratula del libro
     $caratula = ['RutEmisorLibro' => str_replace('.', '', $_POST['RutEmisorLibro']), 'RutEnvia' => $Firma->getID(), 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => $_POST['FchResol'], 'NroResol' => $_POST['NroResol'], 'TipoOperacion' => $_POST['TipoOperacion'], 'TipoLibro' => $_POST['TipoLibro'], 'TipoEnvio' => $_POST['TipoEnvio'], 'FolioNotificacion' => $_POST['FolioNotificacion']];
     // definir si es certificacion
     $caratula_certificacion = ['COMPRA' => ['PeriodoTributario' => 2000, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006], 'VENTA' => ['PeriodoTributario' => 1980, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006]];
     $certificacion = true;
     foreach ($caratula_certificacion[$caratula['TipoOperacion']] as $attr => $val) {
         if ($caratula[$attr] != $val or $attr == 'PeriodoTributario' and substr($caratula[$attr], 0, 4) != $val) {
             $certificacion = false;
             break;
         }
     }
     // generar libro de compras o venta
     $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta();
     if ($caratula['TipoOperacion'] === 'COMPRA') {
         $LibroCompraVenta->agregarComprasCSV($_FILES['archivo']['tmp_name']);
     } else {
         $LibroCompraVenta->agregarVentasCSV($_FILES['archivo']['tmp_name']);
     }
     $LibroCompraVenta->setCaratula($caratula);
     if (!$certificacion) {
         $LibroCompraVenta->setFirma($Firma);
     }
     $xml = $LibroCompraVenta->generar($caratula['TipoOperacion'] == 'COMPRA');
     if (!$certificacion and !$LibroCompraVenta->schemaValidate()) {
         \sowerphp\core\Model_Datasource_Session::message(implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         return;
     }
     // descargar XML
     $file = TMP . '/' . $LibroCompraVenta->getID() . '.xml';
     file_put_contents($file, $xml);
     \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]);
     exit;
 }
Esempio n. 6
0
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */
/**
 * @file 019-firma_datos.php
 *
 * Ejemplo que muestra como obtener los datos de la persona dueña de la firma
 * electrónica
 *
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-09-16
 */
// respuesta en texto plano
header('Content-type: text/plain');
// incluir archivos php de la biblioteca y configuraciones
include 'inc.php';
// objeto de la firma
$Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']);
// mostrar datos de la persona dueña de la firma
echo 'RUN    : ', $Firma->getID(), "\n";
echo 'Nombre : ', $Firma->getName(), "\n";
echo 'Email  : ', $Firma->getEmail(), "\n\n";
print_r($Firma->getData());
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {
    echo $error, "\n";
}
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */
/**
 * @file 006-verificarFirmaXML.php
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-09-16
 */
// respuesta en texto plano
header('Content-type: text/plain');
// incluir archivos php de la biblioteca y configuraciones
include 'inc.php';
// verificar firma
$xml_data = file_get_contents('xml/archivoFirmado.xml');
$FirmaElectronica = new \sasco\LibreDTE\FirmaElectronica($config['firma']);
var_dump($FirmaElectronica->verifyXML($xml_data, 'SetDTE'));
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {
    echo $error, "\n";
}