コード例 #1
0
ファイル: Dte.php プロジェクト: jenniev89/LibreDTE
 /**
  * Método que realiza la firma del DTE
  * @param Firma objeto que representa la Firma Electrónca
  * @return =true si el DTE pudo ser fimado o =false si no se pudo firmar
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-17
  */
 public function firmar(\sasco\LibreDTE\FirmaElectronica $Firma)
 {
     $parent = $this->xml->getElementsByTagName($this->tipo_general)->item(0);
     $this->xml->generate(['TmstFirma' => $this->timestamp], $parent);
     $xml = $Firma->signXML($this->xml->saveXML(), '#' . $this->id, $this->tipo_general);
     if (!$xml) {
         \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::DTE_ERROR_FIRMA, \sasco\LibreDTE\Estado::get(\sasco\LibreDTE\Estado::DTE_ERROR_FIRMA, $this->getID()));
         return false;
     }
     $this->loadXML($xml);
     return true;
 }
コード例 #2
0
 /**
  * Recurso de la API que permite validar el TED (timbre electrónico)
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-19
  */
 public function _api_verificar_ted_POST()
 {
     // verificar si se pasaron credenciales de un usuario
     $User = $this->Api->getAuthUser();
     if (is_string($User)) {
         $this->Api->send($User, 401);
     }
     // obtener TED
     $TED = base64_decode($this->Api->data);
     if (strpos($TED, '<?xml') !== 0) {
         $TED = '<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . $TED;
     }
     // crear xml con el ted y obtener datos en arreglo
     $xml = new \sasco\LibreDTE\XML();
     $xml->loadXML($TED);
     $datos = $xml->toArray();
     // verificar firma del ted
     $DD = $xml->getFlattened('/TED/DD');
     $FRMT = $datos['TED']['FRMT'];
     $pub_key = \sasco\LibreDTE\FirmaElectronica::getFromModulusExponent($datos['TED']['DD']['CAF']['DA']['RSAPK']['M'], $datos['TED']['DD']['CAF']['DA']['RSAPK']['E']);
     if (openssl_verify($DD, base64_decode($FRMT), $pub_key, OPENSSL_ALGO_SHA1) !== 1) {
         $this->Api->send('Firma del timbre incorrecta', 500);
     }
     // verificar que datos del timbre correspondan con datos del CAF
     if ($datos['TED']['DD']['RE'] != $datos['TED']['DD']['CAF']['DA']['RE']) {
         $this->Api->send('RUT del timbre no corresponde con RUT del CAF', 500);
     }
     if ($datos['TED']['DD']['TD'] != $datos['TED']['DD']['CAF']['DA']['TD']) {
         $this->Api->send('Tipo de DTE del timbre no corresponde con tipo de DTE del CAF', 500);
     }
     if ($datos['TED']['DD']['F'] < $datos['TED']['DD']['CAF']['DA']['RNG']['D'] or $datos['TED']['DD']['F'] > $datos['TED']['DD']['CAF']['DA']['RNG']['H']) {
         $this->Api->send('Folio del DTE del timbre fuera del rango del CAF', 500);
     }
     // definir si se consultará en certificación o producción
     define('_LibreDTE_CERTIFICACION_', $datos['TED']['DD']['CAF']['DA']['IDK'] == 100);
     // crear objeto firma
     $Firma = new \sasco\LibreDTE\FirmaElectronica();
     // obtener token
     $token = \sasco\LibreDTE\Sii\Autenticacion::getToken($Firma);
     if (!$token) {
         return $this->Api->send(\sasco\LibreDTE\Log::readAll(), 500);
     }
     // verificar estado del DTE con el SII
     list($RutConsultante, $DvConsultante) = explode('-', $Firma->getID());
     list($RutCompania, $DvCompania) = explode('-', $datos['TED']['DD']['RE']);
     list($RutReceptor, $DvReceptor) = explode('-', $datos['TED']['DD']['RR']);
     list($a, $m, $d) = explode('-', $datos['TED']['DD']['FE']);
     $xml = \sasco\LibreDTE\Sii::request('QueryEstDte', 'getEstDte', ['RutConsultante' => $RutConsultante, 'DvConsultante' => $DvConsultante, 'RutCompania' => $RutCompania, 'DvCompania' => $DvCompania, 'RutReceptor' => $RutReceptor, 'DvReceptor' => $DvReceptor, 'TipoDte' => $datos['TED']['DD']['TD'], 'FolioDte' => $datos['TED']['DD']['F'], 'FechaEmisionDte' => $d . $m . $a, 'MontoDte' => $datos['TED']['DD']['MNT'], 'token' => $token]);
     if ($xml === false) {
         return $this->Api->send(\sasco\LibreDTE\Log::readAll(), 500);
     }
     return (array) $xml->xpath('/SII:RESPUESTA/SII:RESP_HDR')[0];
 }