private function process_stack()
 {
     $arr_detalle = array();
     //Ruta en donde se almacenan los XML que se van a procesar
     $ruta_xml = "/volume1/Inbox_Factura_Cliente_XML/";
     //      Instancia a la clase que lee los XML
     $read_xml = new Read_factura_cliente();
     //Recorremos la pila recibida
     for ($valor = 0; $valor < count($this->pila); $valor++) {
         $existe = 0;
         $nombre_xml = $this->pila[$valor];
         //Se comprueba la extensión del archivo
         $extension = strtolower($this->type_extension($nombre_xml));
         //Cuando se encuentren archivos XML son procesados para obtener su información
         if ($extension == "xml") {
             if (!strstr($nombre_xml, 'Invalido') == false or !strstr($nombre_xml, 'Existe') == false or !strstr($nombre_xml, 'ErrorEstructura') == false) {
                 printf('\\ Ya se habia introducido invalido ' . $nombre_xml);
                 continue;
             }
             $this->array_xml = $read_xml->detalle($ruta_xml, $nombre_xml);
             if (!is_array($this->array_xml)) {
                 printf('\\n xml invalido ' . $nombre_xml);
                 rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_Cliente_XML/" . "EstructuraInvalida_" . date('m-d-y-H-m-s') . '_' . $nombre_xml);
                 continue;
             }
             if (strlen($this->array_xml['emisor']['rfc']) == 0 or strlen($this->array_xml['receptor']['rfc']) == 0 or strlen($this->array_xml['timbreFiscalDigital']['UUID']) == 0) {
                 printf('\\n xml invalido ' . $nombre_xml);
                 rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_Cliente_XML/" . "EstructuraInvalida_" . date('m-d-y-H-m-s') . '_' . $nombre_xml);
                 continue;
             }
             /* Validación de XML */
             printf('\\n Comienza validacion....');
             $validador = new webservice_sat();
             $validacion = $validador->valida_cfdi($this->array_xml['emisor']['rfc'], $this->array_xml['receptor']['rfc'], $this->array_xml['encabezado']['total'], $this->array_xml['timbreFiscalDigital']['UUID']);
             if ($validacion == 0) {
                 printf("\n Fallo en validacion");
                 rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_Cliente_XML/" . "Invalido_" . date('mdyHms') . '_' . $nombre_xml);
                 continue;
             }
         } else {
             //Se guardan en stack los pdf que van llegando
             if ($extension == "pdf") {
                 array_push($this->pila_pdf, $nombre_xml);
             }
             continue;
         }
         //            /*  Devuelve el id del emisor si existe sino se aumenta el contador */
         if (($this->id_emisor = $this->exist_emisor()) == 0) {
             $this->id_emisor = $this->Insert_emisor();
         } else {
             $existe++;
         }
         //            /*  Devuelve el id del receptor si existe sino se aumenta el contador */
         if (($this->id_receptor = $this->exist_receptor()) == 0) {
             $this->id_receptor = $this->insert_receptor();
         } else {
             $existe++;
         }
         //
         //            /*  Se obtienen los ids emisor y receptor después de la inserción de los mismo
         //             * esto pasa sino existian en caso de que existan la condición se ignora  */
         if ($this->id_emisor == 0) {
             $this->id_emisor = $this->id_emisor();
         }
         if ($this->id_receptor == 0) {
             $this->id_receptor = $this->id_receptor();
         }
         ////
         if (($id_detalle = $this->exist_detalle()) == 0) {
             $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION);
             $nombre_acuse = basename($nombre_xml, '.' . $extension);
             $ruta_cfdi = $this->get_ruta_cfdi();
             $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml");
             $id_validacion = $this->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml");
             $ruta = $this->move_cfdi($ruta_xml, $nombre_xml);
             $this->id_detalle = $this->Insert_detalle($id_validacion, $ruta . $nombre_xml);
             $id_and_xml = array("id" => $this->id_detalle, "nombre_xml" => $nombre_xml);
             array_push($this->pila_xml, $id_and_xml);
         } else {
             $existe++;
         }
         if ($existe == 3) {
             $intentos = $this->obtener_intentos($this->id_emisor, $nombre_xml);
             $this->renombrado_fallido($ruta_xml, $nombre_xml, $intentos);
             /* Se renombra con Existe_ */
         }
         //Se elimina el nombre del archivo procesado del archivo Log
         //            $this->delete_first_line();
         //Al terminar de insertar, se vacia el contenido de cada array
         while (count($this->emisor)) {
             array_pop($this->emisor);
         }
         while (count($this->receptor)) {
             array_pop($this->receptor);
         }
         while (count($this->detalle)) {
             array_pop($this->detalle);
         }
         while (count($arr_detalle)) {
             array_pop($arr_detalle);
         }
         while (count($this->array_xml)) {
             array_pop($this->array_xml);
         }
         $this->id_emisor = 0;
         $this->id_receptor = 0;
     }
     // fin For
     $this->stack_xml = $this->pila_xml;
     // Al termino del Procesamiento de todos los XML se procesa la pila de PDF
     //para localizar su directorio correspondiente y se inserta en la BD su ruta
     if (count($this->stack_xml) == 0) {
         $this->registro_pdf = $this->pila_pdf;
     } else {
         foreach ($this->pila_pdf as $valor) {
             //Se envia la pila donde estan los xml que se lograron insertar en la BD y el pdf a buscar
             $this->search_pdf_in_stack($valor);
         }
     }
     //
     //        //Al termino de procesar los PDF se insertan los xml que no tienen pareja pdf en el registro
     //        foreach ($this->stack_xml as $dato)
     //        {
     ////            echo "  XML STACK =  ".$dato['nombre_xml'];
     //            //Insertamos en la tabla registro xml el nombre del pdf
     //            $cadena = explode(".", $dato['nombre_xml']);
     //            $xml_a_buscar=$cadena[0];
     //            $xml_registro="$xml_a_buscar.pdf";
     //            $this->insert_xml_registro($dato['id'], $xml_registro);
     //        }
     //        $insert_pdf=new Insert_pdf();
     //        //Se envian los PDF que no tienen pareja xml
     //        $insert_pdf->recibir_datos($this->registro_pdf);
     return TRUE;
 }
示例#2
0
 private function motor_descarga_correo()
 {
     $XML = new XML();
     $BD = new DataBase();
     $DataBaseName = "CFDI";
     $id_correo = $_POST['id_correo'];
     $host = trim($_POST['host']);
     $servidor = $_POST['servidor'];
     $correo = trim($_POST['correo']);
     $password = trim($_POST['password']);
     $puerto = $_POST['puerto'];
     $nombre_usuario = $_POST['nombre_usuario'];
     $savedirpath = '/volume1/web/correoCFDI/extraidos/' . $nombre_usuario . '/';
     $dir_extraidos = $savedirpath;
     $ResultObtenerAdjuntos = $this->obtener_adjuntos($host, $puerto, $correo, $password, $savedirpath);
     if ($ResultObtenerAdjuntos == 0) {
         return;
     }
     $array_archivos = $this->escaneo_dir_extraidos($savedirpath);
     if (!is_array($array_archivos)) {
         return 0;
     }
     //         printf("<p> Iniciando validacion </p>");
     $dir_invalidos = "/volume1/web/correoCFDI/invalidos/{$nombre_usuario}/";
     /* CFDI invalidos o existentes */
     foreach ($array_archivos as $valor) {
         $id_motor_insert = 0;
         /* Se guardan los ids de los inserts para devolver una consulta con el detalle de
          *                      movimientos */
         /* Instancia a clase de Carga de Facturas */
         $carga_proveedor = new Carga_factura_proveedor();
         /* Lectura del XML */
         $read_xml = new Read_factura_cliente();
         $carga_proveedor->array_xml = '';
         $carga_proveedor->id_detalle = 0;
         $carga_proveedor->id_emisor = 0;
         $carga_proveedor->id_receptor = 0;
         $nombre_xml = $valor['xml'];
         $array_read_xml = $read_xml->detalle($dir_extraidos . $valor['correo'] . "/", $valor['xml']);
         $carga_proveedor->array_xml = $array_read_xml;
         /* Datos de correo de envio (Se ocupa para respuestas de correo con CFDI inválidos) */
         $correo_envios = $this->info_mail_envios(0);
         /* Comprobación de parámetros para validación */
         if (!is_array($array_read_xml)) {
             //                    printf("Formato incorrecto");
             $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido');
             continue;
         }
         if (strlen($array_read_xml['emisor']['rfc']) == 0 or strlen($array_read_xml['receptor']['rfc']) == 0 or strlen($array_read_xml['timbreFiscalDigital']['UUID']) == 0) {
             //                    printf('\n xml invalido '.$valor['xml']);
             $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido');
             continue;
         }
         /* Validación del CFDI */
         $validacion_web = new webservice_sat();
         $validacion = $validacion_web->valida_cfdi($array_read_xml['emisor']['rfc'], $array_read_xml['receptor']['rfc'], $array_read_xml['encabezado']['total'], $array_read_xml['timbreFiscalDigital']['UUID']);
         //            echo ("<p> validando.... E rfc=". $array_read_xml['emisor']['rfc']." R rfc=". $array_read_xml['receptor']['rfc']." total=". $array_read_xml['encabezado']['total']." UUID=". $array_read_xml['timbreFiscalDigital']['UUID']."</p>");
         if (!is_object($validacion)) {
             /* Se registra en el sistema el archivo como inválido y se notifica al correo emisor. */
             //                printf("\n Fallo en validacion ". $valor['xml'] ."reenviando a ".$valor['correo']);
             $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido');
             continue;
         }
         /* Una vez válidado el CFDI se inserta en la BD */
         /* Devuelve el id del emisor si existe sino se aumenta el contador */
         $existe = 0;
         if (($carga_proveedor->id_emisor = $carga_proveedor->exist_emisor()) == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->Insert_emisor();
         } else {
             $existe++;
         }
         /* Devuelve el id del receptor si existe sino se aumenta el contador */
         if (($carga_proveedor->id_receptor = $carga_proveedor->exist_receptor()) == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->insert_receptor();
         } else {
             $existe++;
         }
         /*Se obtienen los ids emisor y receptor después de la inserción de los mismo
          * esto pasa sino existian en caso de que existan la condición se ignora  */
         if ($carga_proveedor->id_emisor == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->id_emisor();
         }
         if ($carga_proveedor->id_receptor == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->id_receptor();
         }
         if (($id_detalle = $carga_proveedor->exist_detalle()) == 0) {
             $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION);
             $nombre_acuse = basename($nombre_xml, '.' . $extension);
             $ruta_cfdi = $carga_proveedor->get_ruta_cfdi();
             $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml");
             $id_validacion = $carga_proveedor->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml");
             $ruta = $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $nombre_xml);
             $ruta_pdf = NULL;
             if (file_exists($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $valor['pdf']);
                 $ruta_pdf = $ruta . $valor['pdf'];
             }
             $carga_proveedor->id_detalle = $carga_proveedor->Insert_detalle($id_validacion, $ruta . $nombre_xml, $ruta_pdf);
             $id_motor_insert = $this->insert_motor_correo($id_correo, $carga_proveedor, $valor['correo'], 'valido', $ruta . $nombre_xml, $ruta_pdf);
         } else {
             $existe++;
         }
         if ($existe == 3) {
             $ruta_pdf = NULL;
             $ruta_xml = NULL;
             if (!file_exists($dir_invalidos . $valor['correo'])) {
                 mkdir($dir_invalidos . $valor['correo'], 0777, true);
                 chmod($dir_invalidos . $valor['correo'], 0777);
             }
             $intentos = $carga_proveedor->obtener_intentos($carga_proveedor->id_emisor, $nombre_xml);
             if (file_exists($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 rename($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'], $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $valor['pdf']);
                 $ruta_pdf = $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $valor['pdf'];
             }
             if (file_exists($dir_extraidos . $valor['correo'] . "/{$nombre_xml}")) {
                 rename($dir_extraidos . $valor['correo'] . "/" . $nombre_xml, $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml);
                 $ruta_xml = $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml;
             }
             $id_motor_insert = $this->insert_motor_correo($id_correo, $carga_proveedor, $valor['correo'], 'repetido', $ruta_xml, $ruta_pdf);
         }
         array_push($this->motor_recolector_movimientos, $id_motor_insert);
         /* Se limpian las variables globales */
         while (count($carga_proveedor->emisor)) {
             array_pop($carga_proveedor->emisor);
         }
         while (count($carga_proveedor->receptor)) {
             array_pop($carga_proveedor->receptor);
         }
         while (count($carga_proveedor->detalle)) {
             array_pop($carga_proveedor->detalle);
         }
         while (count($carga_proveedor->array_xml)) {
             array_pop($carga_proveedor->array_xml);
         }
         /* Insert en la BD */
     }
     $this->motor_detalle_movimientos();
     /* Se obtiene el detalle de movimientos realizando una consulta */
 }
示例#3
0
 function inicio_motor_correo()
 {
     $dir_extraidos = "/volume1/web/correoCFDI/extraidos/";
     $dir_invalidos = "/volume1/web/correoCFDI/invalidos/";
     /* CFDI invalidos o existentes */
     $mail = new mail();
     /* Listado de correos registrados */
     $lista_correo = $mail->get_lista_correo();
     if (count($lista_correo) == 0) {
         return;
     }
     /* Información del correo dedicado a envios */
     $correo_envios = $mail->info_mail_envios(0);
     /* El parámetro no se ocupa por el momento */
     foreach ($lista_correo as $correo) {
         printf("\n\n Iniciando extracción en " . $correo['correo'] . "\n\n");
         $mail->obtener_adjuntos($correo['host_imap'], $correo['puerto'], $correo['correo'], $correo['password'], '/volume1/web/correoCFDI/extraidos/');
     }
     printf("\nFinalizo extraccion");
     /* Después de la extracción se busca en el directorio de extraidos */
     $array_archivos = $this->escaneo_dir_extraidos();
     printf("\n\n Iniciando validacion \n\n");
     foreach ($array_archivos as $valor) {
         /* Instancia a clase de Carga de Facturas */
         $carga_proveedor = new Carga_factura_proveedor();
         /* Lectura del XML */
         $read_xml = new Read_factura_cliente();
         $carga_proveedor->array_xml = '';
         $carga_proveedor->id_detalle = 0;
         $carga_proveedor->id_emisor = 0;
         $carga_proveedor->id_receptor = 0;
         $nombre_xml = $valor['xml'];
         $array_read_xml = $read_xml->detalle($dir_extraidos . $valor['correo'] . "/", $valor['xml']);
         $carga_proveedor->array_xml = $array_read_xml;
         /* Datos de correo de envio (Se ocupa para respuestas de correo con CFDI inválidos) */
         $correo_envios = $mail->info_mail_envios(0);
         /* Comprobación de parámetros para validación */
         if (count($array_read_xml) <= 0 or $array_read_xml == null) {
             printf("Formato incorrecto");
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'desconocido');
             continue;
         }
         if (strlen($array_read_xml['emisor']['rfc']) == 0 or strlen($array_read_xml['receptor']['rfc']) == 0 or strlen($array_read_xml['timbreFiscalDigital']['UUID']) == 0) {
             printf('\\n xml invalido ' . $valor['xml']);
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'desconocido');
             continue;
         }
         /* Validación del CFDI */
         $validacion_web = new webservice_sat();
         $validacion = $validacion_web->valida_cfdi($array_read_xml['emisor']['rfc'], $array_read_xml['receptor']['rfc'], $array_read_xml['encabezado']['total'], $array_read_xml['timbreFiscalDigital']['UUID']);
         printf("\n validando.... E rfc=" . $array_read_xml['emisor']['rfc'] . " R rfc=" . $array_read_xml['receptor']['rfc'] . " total=" . $array_read_xml['encabezado']['total'] . " UUID=" . $array_read_xml['timbreFiscalDigital']['UUID']);
         if (!count($validacion) > 0) {
             /* Se registra en el sistema el archivo como inválido y se notifica al correo emisor. */
             printf("\n Fallo en validacion " . $valor['xml'] . "reenviando a " . $valor['correo']);
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido');
             continue;
         }
         /* Una vez válidado el CFDI se inserta en la BD */
         /* Devuelve el id del emisor si existe sino se aumenta el contador */
         $existe = 0;
         if (($carga_proveedor->id_emisor = $carga_proveedor->exist_emisor()) == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->Insert_emisor();
         } else {
             $existe++;
         }
         /* Devuelve el id del receptor si existe sino se aumenta el contador */
         if (($carga_proveedor->id_receptor = $carga_proveedor->exist_receptor()) == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->insert_receptor();
         } else {
             $existe++;
         }
         /*Se obtienen los ids emisor y receptor después de la inserción de los mismo
          * esto pasa sino existian en caso de que existan la condición se ignora  */
         if ($carga_proveedor->id_emisor == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->id_emisor();
         }
         if ($carga_proveedor->id_receptor == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->id_receptor();
         }
         if (($id_detalle = $carga_proveedor->exist_detalle()) == 0) {
             $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION);
             $nombre_acuse = basename($nombre_xml, '.' . $extension);
             $ruta_cfdi = $carga_proveedor->get_ruta_cfdi();
             $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml");
             $id_validacion = $carga_proveedor->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml");
             $ruta = $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $nombre_xml);
             $ruta_pdf = NULL;
             if (file_exists($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $valor['pdf']);
                 $ruta_pdf = $ruta . $valor['pdf'];
             }
             $carga_proveedor->id_detalle = $carga_proveedor->Insert_detalle($id_validacion, $ruta . $nombre_xml, $ruta_pdf);
             $this->insert_motor_correo(0, $carga_proveedor, $valor['correo'], 'valido', $ruta . $nombre_xml, $ruta_pdf);
         } else {
             $existe++;
         }
         if ($existe == 3) {
             $ruta_pdf = NULL;
             $ruta_xml = NULL;
             if (!file_exists($dir_invalidos . $valor['correo'])) {
                 mkdir($dir_invalidos . $valor['correo'], 0777, true);
                 chmod($dir_invalidos . $valor['correo'], 0777);
             }
             if (file_exists($dir_invalidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 $ruta_pdf = $dir_invalidos . $valor['correo'] . "/" . $valor['pdf'];
             }
             $intentos = $carga_proveedor->obtener_intentos($carga_proveedor->id_emisor, $nombre_xml);
             rename($dir_extraidos . $valor['correo'] . "/" . $nombre_xml, $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml);
             $ruta_xml = $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml;
             $this->insert_motor_correo(0, $carga_proveedor, $valor['correo'], 'repetido', $ruta_xml, $ruta_pdf);
         }
         /* Se limpian las variables globales */
         while (count($carga_proveedor->emisor)) {
             array_pop($carga_proveedor->emisor);
         }
         while (count($carga_proveedor->receptor)) {
             array_pop($carga_proveedor->receptor);
         }
         while (count($carga_proveedor->detalle)) {
             array_pop($carga_proveedor->detalle);
         }
         while (count($carga_proveedor->array_xml)) {
             array_pop($carga_proveedor->array_xml);
         }
         /* Insert en la BD */
     }
 }
示例#4
0
$ScriptsPath = __DIR__;
if (file_exists("{$ScriptsPath}/Config/cfdv32.xsd")) {
    echo "Existe el xsd";
}
$estado = FALSE;
$read = new Read_factura_cliente();
$xml = new DOMDocument();
$xml->load($ScriptsPath . '/_root/cfdia0000000008.xml');
if ($read->validacion_estructura($ScriptsPath . '/_root/cfdia0000000008.xml')) {
    $estado = TRUE;
    echo "<p>Válido</p>";
} else {
    echo "<p>inválido</p>";
}
$xml = simplexml_load_file($ScriptsPath . '/_root/cfdia0000000008.xml');
$array = $read->detalle("{$ScriptsPath}/_root/", "cfdia0000000008.xml");
//var_dump($array);
$Full = '';
$full = GetNodes($array, $Full);
echo $full;
function GetNodes($array, $Full)
{
    foreach ($array as $value) {
        if (is_array($value)) {
            $Full = GetNodes($value, $Full);
        } else {
            $Full .= $value . ", ";
        }
    }
    return $Full;
}