/** * Método que realiza el envío del documento al SII * @return Track ID del envío o =false si hubo algún problema al enviar el documento * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-14 */ public function enviar() { // generar XML que se enviará if (!$this->xml_data) { $this->xml_data = $this->generar(); } if (!$this->xml_data) { \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::DOCUMENTO_ERROR_GENERAR_XML, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::DOCUMENTO_ERROR_GENERAR_XML, substr(get_class($this), strrpos(get_class($this), '\\') + 1))); return false; } // validar schema del documento antes de enviar if (!$this->schemaValidate()) { return false; } // solicitar token $token = \sasco\LibreDTE\Sii\Autenticacion::getToken($this->Firma); if (!$token) { return false; } // enviar DTE $envia = $this->caratula['RutEnvia']; $emisor = !empty($this->caratula['RutEmisor']) ? $this->caratula['RutEmisor'] : $this->caratula['RutEmisorLibro']; $result = \sasco\LibreDTE\Sii::enviar($envia, $emisor, $this->xml_data, $token); if ($result === false) { return false; } if (!is_numeric((string) $result->TRACKID)) { return false; } return (int) (string) $result->TRACKID; }
// EnvioDTE::enviar() que envía el XML que se genera, ver ejemplo 010-set_pruebas.php $EnvioDTE = new \sasco\LibreDTE\Sii\EnvioDTE(); $EnvioDTE->agregar($DTE); $EnvioDTE->setCaratula($caratula); $EnvioDTE->setFirma($Firma); $xml = $EnvioDTE->generar(); // solicitar token $token = \sasco\LibreDTE\Sii\Autenticacion::getToken($Firma); if (!$token) { foreach (\sasco\LibreDTE\Log::readAll() as $log) { echo $log, "\n"; } exit; } // enviar DTE $result = \sasco\LibreDTE\Sii::enviar($caratula['RutEnvia'], $factura['Encabezado']['Emisor']['RUTEmisor'], $xml, $token); // si hubo algún error al enviar al servidor mostrar if ($result === false) { foreach (\sasco\LibreDTE\Log::readAll() as $log) { echo $log, "\n"; } exit; } // Mostrar resultado del envío if ($result->STATUS != '0') { foreach (\sasco\LibreDTE\Log::readAll() as $log) { echo $log, "\n"; } exit; } echo 'DTE enviado. Track ID ' . $result->TRACKID, "\n";
/** * Método que realiza el envío del libro IECV al SII * @return Track ID del envío o =false si hubo algún problema al enviar el documento * @warning No se está validano schema * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-10-30 */ public function enviar() { // generar XML que se enviará if (!$this->xml_data) { $this->xml_data = $this->generar(); } if (!$this->xml_data) { \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::LIBROCOMPRAVENTA_ERROR_GENERAR_XML, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::LIBROCOMPRAVENTA_ERROR_GENERAR_XML)); return false; } // validar schema del documento antes de enviar // WARNING: tanto en certificación como en producción si el libro se // firma da error al subirlo, pero si va sin firma da error de schema, // por esta razón no se valida el schema, para que pueda ser enviado al // sii sin firmar ¿? /*if (\sasco\LibreDTE\Sii::getAmbiente()==\sasco\LibreDTE\Sii::PRODUCCION and !$this->schemaValidate()) return false;*/ // solicitar token $token = Autenticacion::getToken($this->Firma); if (!$token) { return false; } // enviar DTE $result = \sasco\LibreDTE\Sii::enviar($this->caratula['RutEnvia'], $this->caratula['RutEmisorLibro'], $this->xml_data, $token); if ($result === false) { return false; } if (!is_numeric((string) $result->TRACKID)) { return false; } return (int) (string) $result->TRACKID; }
/** * Método que realiza el envío del sobre con el o los DTEs al SII * @return Track ID del envío o =false si hubo algún problema al enviar el documento * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-17 */ public function enviar() { // generar XML que se enviará if (!$this->xml_data) { $this->xml_data = $this->generar(); } if (!$this->xml_data) { \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::ENVIODTE_FALTA_XML, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::ENVIODTE_FALTA_XML)); return false; } // validar schema del documento antes de enviar if (!$this->schemaValidate()) { return false; } // solicitar token $token = Autenticacion::getToken($this->Firma); if (!$token) { return false; } // enviar DTE $result = \sasco\LibreDTE\Sii::enviar($this->caratula['RutEnvia'], $this->caratula['RutEmisor'], $this->xml_data, $token); if ($result === false) { return false; } if (!is_numeric((string) $result->TRACKID)) { return false; } return (int) (string) $result->TRACKID; }
/** * Acción que envía el DTE al SII si este no ha sido envíado (no tiene track_id) * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-24 */ public function enviar_sii($dte, $folio) { $Emisor = $this->getContribuyente(); // obtener DTE emitido $DteEmitido = new Model_DteEmitido($Emisor->rut, $dte, $folio, (int) $Emisor->certificacion); if (!$DteEmitido->exists()) { \sowerphp\core\Model_Datasource_Session::message('No existe el DTE solicitado', 'error'); $this->redirect('/dte/dte_emitidos/listar'); } // si el dte ya fue enviado error if ($DteEmitido->track_id) { \sowerphp\core\Model_Datasource_Session::message('DTE ya se encuentra envíado, tiene el Track ID: ' . $DteEmitido->track_id, 'warning'); $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request)); } // obtener firma $Firma = $Emisor->getFirma($this->Auth->User->id); if (!$Firma) { \sowerphp\core\Model_Datasource_Session::message('No hay firma electrónica asociada a la empresa (o bien no se pudo cargar), debe agregar su firma antes de generar DTE', 'error'); $this->redirect('/dte/admin/firma_electronicas'); } // obtener token $token = \sasco\LibreDTE\Sii\Autenticacion::getToken($Firma); if (!$token) { \sowerphp\core\Model_Datasource_Session::message('No fue posible obtener el token para el SII<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'); $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request)); } // enviar XML $result = \sasco\LibreDTE\Sii::enviar($Firma->getID(), $Emisor->rut . '-' . $Emisor->dv, base64_decode($DteEmitido->xml), $token); if ($result === false or $result->STATUS != '0') { \sowerphp\core\Model_Datasource_Session::message('No fue posible enviar el DTE al SII<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'); $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request)); } $DteEmitido->track_id = (int) $result->TRACKID; $DteEmitido->save(); $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request)); }
/** * Método que realiza el envío del libro IECV al SII * @return Track ID del envío o =false si hubo algún problema al enviar el documento * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-17 */ public function enviar() { // generar XML que se enviará if (!$this->xml_data) { $this->xml_data = $this->generar(); } if (!$this->xml_data) { \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::LIBROCOMPRAVENTA_ERROR_GENERAR_XML, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::LIBROCOMPRAVENTA_ERROR_GENERAR_XML)); return false; } // validar schema del documento antes de enviar (sólo en producción, ya // que en certificación el libro no se firma y daría error de schema) if (\sasco\LibreDTE\Sii::getAmbiente() == \sasco\LibreDTE\Sii::PRODUCCION and !$this->schemaValidate()) { return false; } // solicitar token $token = Autenticacion::getToken($this->Firma); if (!$token) { return false; } // enviar DTE $result = \sasco\LibreDTE\Sii::enviar($this->caratula['RutEnvia'], $this->caratula['RutEmisorLibro'], $this->xml_data, $token); if ($result === false) { return false; } if (!is_numeric((string) $result->TRACKID)) { return false; } return (int) (string) $result->TRACKID; }
// incluir archivos php de la biblioteca y configuraciones include 'inc.php'; // datos del envío $xml = file_get_contents('dte_33.xml'); $RutEnvia = '99888777-6'; $RutEmisor = '55444333-2'; // solicitar token $token = \sasco\LibreDTE\Sii\Autenticacion::getToken($config['firma']); if (!$token) { foreach (\sasco\LibreDTE\Log::readAll() as $error) { echo $error, "\n"; } exit; } // enviar DTE $result = \sasco\LibreDTE\Sii::enviar($RutEnvia, $RutEmisor, $xml, $token); // si hubo algún error al enviar al servidor mostrar if ($result === false) { foreach (\sasco\LibreDTE\Log::readAll() as $error) { echo $error, "\n"; } exit; } // Mostrar resultado del envío if ($result->STATUS != '0') { foreach (\sasco\LibreDTE\Log::readAll() as $error) { echo $error, "\n"; } exit; } echo 'DTE envíado. Track ID ' . $result->TRACKID, "\n";