Full width home advertisement

Facturacion CFDi

CFDi en Java

Post Page Advertisement [Top]

Codigo fuente Descarga Masiva Cfdi

 

//incluir la libreria de descarga masiva
    require_once 'apidescargarmasiva/Utils.php';
    require_once 'apidescargarmasiva/SolicitudAutorizacionDescXml.php';
    require_once 'apidescargarmasiva/SolicitudIDDescXml.php';
    require_once 'apidescargarmasiva/SolicitudVerificacionDescarga.php';
    require_once 'apidescargarmasiva/DescargarXmlMasiva.php';



    /******* SOLICITUD DE AUTORIZACION PARA DESCARGA MASIVA ************/
    $cert = file_get_contents($ruta_cer);
    $key = file_get_contents($ruta_key);
    $respuestaAutorizacion = solicita_autorizacion_descarga_xml($cert,$key);
    $respuestaAutorizacion = json_decode( json_encode($respuestaAutorizacion), true);
    $token_autorizacion=$respuestaAutorizacion['token'];
    if($token_autorizacion == null)
    {
        //guardar el error de la descarga y su mensaje
        $metodo='AUTORIZACION';
        $respuestaAutorizacion['servidor']='SERVIDOR DE AUTORIZACION DE DESCARGA';
        $respuestaAutorizacion['mensaje']='No se genero el token de autorizacion';
        $mensaje_error=json_encode($respuestaAutorizacion);
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ? WHERE id = ?");
        $stmt->execute([$metodo,$mensaje_error,$id_descarga]);
        echo json_encode(['error' => 'Error en la autorizacion de la descarga, No se genero el token de autorizacion']);
        exit;
    }
    /* echo "<pre>";print_r($respuestaAutorizacion);echo "<pre>"; */
    
    /******************* HACER SOLICITUD DE DESCARGA MASIVA ******************/
    /* FUNCIONA POR TODOS LOS FILTROS, EXCEPTO uuid,$EstadoComprobante */
    $receptor['1']=$rfc_receptor;
    //$receptor['2']="XXX000000XXX";
    //$receptor['3']="AAA000000AAA";
    //$receptor['4']="BBB000000BBB";
    //$receptor['5']="";
    $RfcReceptor[]=$receptor;
    $solicitud['RfcSolicitante']=$rfc_solicitante;
    $solicitud['cert']=$cert;
    $solicitud['key']=$key;
    $solicitud['token_autorizacion']=$token_autorizacion;
    $solicitud['fechaInicial']=$fecha_inicio .'T00:00:00';
    $solicitud['fechaFinal']=$fecha_fin.'T11:59:59';
    $solicitud['TipoSolicitud']=$tipo_solicitud;             // CFDI //Define el tipo de descarga:  Metadata o CFDI
    $solicitud['RfcReceptor']=$RfcReceptor;
    $solicitud['RfcEmisor']=$rfc_emisor;                    //Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
    $solicitud['TipoComprobante']=$tipo_comprobante;        //Define el tipo de comprobante: Null, I = Ingreso, E = Egreso,  T= Traslado, N = Nomina,  P = Pago , Null es el valor predeterminado y en caso de no declararse, se obtendrán todos los comprobantes sin importar el tipo comprobante.
    $solicitud['EstadoComprobante']=$estado_comprobante;    //NO DESCARGA LOS CANCELADOS, ERROR DEL WEB SERVICE DEL SAT //Define el estado del comprobante: Null, 0 = Cancelado, 1 = Vigente, Null es el valor predeterminado y en caso de no declararse, se obtendrán todos los comprobantes sin importar el estado de los mismos
    $solicitud['RfcACuentaTerceros']=$RfcACuentaTerceros;   // NO ESTA IMPLEMENTADO
    $solicitud['Complemento']=$Complemento;        //FUNCIONA, PERO NO ESTA IMPLEMEENTADO // Define el complemento de CFDI a descargar, Null es el valor predeterminado
    $solicitud['UUID']=$UUID;                    //NO FUNCIONA EN EL WEB SERVICE DEL SAT //En caso de utilizarse este parámetro no deben declararse los siguientes criterios de búsqueda: FechaInicial, FechaFinal, RfcEmisor y RfcSolicitante.
    
    $respuestaSolicitud = solicita_descarga_xml($solicitud);
    $respuestaSolicitud = json_decode( json_encode($respuestaSolicitud), true);
    $idSolicitud = $respuestaSolicitud['IdSolicitud'];
    $CodEstatus = $respuestaSolicitud['CodEstatus'];
    $Mensaje = $respuestaSolicitud['Mensaje'];
    if($CodEstatus != 5000)
    {
        /*echo "<pre>"; print_r($respuestaSolicitud); echo "<pre>";*/
        //guardar el error de la descarga y su mensaje
        $metodo='SOLICITUD';
        $respuestaSolicitud['servidor']='SERVIDOR DE SOLICITUD DE DESCARGA';
        $respuestaSolicitud['mensaje']='No se genero la Solicitud';
        $mensaje_error=json_encode($respuestaSolicitud);
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ? WHERE id = ?");
        $stmt->execute([$metodo,$mensaje_error,$id_descarga]);
        echo json_encode(['error' => 'Error en la Solicitud de la descarga, No se genero la Solicitud']);
        exit;
        
        
    }else{
         //guardar el idSolicitud para despues enviar a VERIFICACION
        $metodo='SOLICITUD';
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'pendiente',metodo_fin = ?, id_solicitud = ? WHERE id = ?");
        $stmt->execute([$metodo,$idSolicitud,$id_descarga]);
    
    }    
    
    //el sat tarda cierto tiempo en validar una solicitud y generar el paquete
    //talvez depende de la cantidad de cfdis o si el rango de fechas es largo
    //TIEMPO DE ESPERA PARA HACER LA VERIFICACION DE SOLICITUD,
    if($tiempo_de_espera > 0){
        sleep($tiempo_espera);
    }else{
        sleep(45);
    }
    
    /***********     VERIFICACION DE LA SOLICITUD DE DESCARGA MASIVA  **************/
    $verificacion['token_autorizacion']=$token_autorizacion;
    $verificacion['cert']=$cert;
    $verificacion['key']=$key;
    $verificacion['RfcSolicitante']=$rfc_solicitante;
    $verificacion['IdSolicitud']= $idSolicitud;
    $respuestaVerificacion = solicita_verificacion_descarga_xml($verificacion);
    $respuestaVerificacion = json_decode( json_encode($respuestaVerificacion), true);
    $EstadoSolicitud = $respuestaVerificacion['EstadoSolicitud'];
    $CodEstatusVerificacion = $respuestaVerificacion['CodEstatus'];
    $Mensaje = $respuestaVerificacion['Mensaje'];
    $CodigoEstadoSolicitud = $respuestaVerificacion['CodigoEstadoSolicitud'];
    $NumeroCFDIs = $respuestaVerificacion['NumeroCFDIs'];
    $idPaquete = $respuestaVerificacion['idPaquete'];
    
    // CodigoEstadoSolicitud =5000 Solicitud recibida con éxito Indica que la solicitud de descarga que se está verificando fue aceptada.
    if($CodigoEstadoSolicitud != 5000)
    {
        //guardar el error de la descarga y su mensaje
        $metodo='VERIFICACION';
        $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
        $respuestaVerificacion['mensaje']='No se verifico el paquete de descarga';
        $mensaje_error=json_encode($respuestaVerificacion);
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ? WHERE id = ?");
        $stmt->execute([$metodo,$mensaje_error,$id_descarga]);
        echo json_encode(['error' => 'Error en la verificacion de la descarga, No se verifico el paquete de descarga']);
        exit;
    }else{
        
        /*Estados de la solicitud:
            • Aceptada=1
            • En Proceso=2
            • Terminada=3
            • Error=4
            • Rechazada=5
            • Vencida= 6          */
        
        if($EstadoSolicitud == 1)
        {    
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: Aceptada';
            $mensaje_error=json_encode($respuestaVerificacion);
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'pendiente',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$id_descarga]);
            echo json_encode(['msj' => 'VERIFICACION DE DESCARGA, Solicitud Aceptada']);
            exit;
        }
        if($EstadoSolicitud == 2)
        {    
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: En Proceso';
            $mensaje_error=json_encode($respuestaVerificacion);
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'pendiente',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$id_descarga]);
            echo json_encode(['msj' => 'VERIFICACION DE DESCARGA, En Proceso']);
            exit;
        }
        if($EstadoSolicitud == 4)
        {    
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: Error';
            $mensaje_error=json_encode($respuestaVerificacion);
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$id_descarga]);
            echo json_encode(['error' => 'VERIFICACION DE DESCARGA, Error']);
            exit;
        }
        if($EstadoSolicitud == 5)
        {    
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: Rechazada';
            $mensaje_error=json_encode($respuestaVerificacion);
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$id_descarga]);
            echo json_encode(['error' => 'VERIFICACION DE DESCARGA, Rechazada']);
            exit;
        }
        if($EstadoSolicitud == 6)
        {    
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: Vencida';
            $mensaje_error=json_encode($respuestaVerificacion);
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'fallida',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$id_descarga]);
            echo json_encode(['msj' => 'VERIFICACION DE DESCARGA, Vencida']);
            exit;
        }
        
        if($EstadoSolicitud == 3)
        {
            //TERMINO LA VERIFICACION , GUARDAR EL IDPAQUETE Y LA CANTIDAD DE CFDI
            // ------  AQUI NO ES ERROR, SOLO GUARDO EL MENSAJE COMO RESPUESTA DEL SAT
            $metodo='VERIFICACION';
            $respuestaVerificacion['servidor']='SERVIDOR DE VERIFICACION DE DESCARGA';
            $respuestaVerificacion['mensaje']='Solicitud: termida y correcta';
            $mensaje_error=json_encode($respuestaVerificacion);
            
            $metodo='VERIFICACION';
            $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'pendiente',metodo_fin = ?, mensaje_error = ?, EstadoSolicitud = ?, idPaquete = ?, NumeroCFDIs = ? WHERE id = ?");
            $stmt->execute([$metodo,$mensaje_error,$EstadoSolicitud,$idPaquete,$NumeroCFDIs,$id_descarga]);
        }
    }
    
    /*echo "<pre>VERIFICACION";
    print_r($respuestaVerificacion);
    echo "<pre>";*/
    
    
    /****   DESCARGAR LOS XML EN UN ZIP *************/
    
    $descargar['token_autorizacion']=$token_autorizacion;
    $descargar['cert']=$cert;
    $descargar['key']=$key;
    $descargar['RfcSolicitante']=$rfc_solicitante;
    $descargar['idPaquete']= $idPaquete;
    $respuestaDescargaXml = DescargarXmlMasiva($descargar);
    $respuestaDescargaXml = json_decode( json_encode($respuestaDescargaXml), true);
    $paquete=$respuestaDescargaXml['Paquete'];
    
    echo "<pre>"; print_r($respuestaDescargaXml); echo "<pre>";
    
    if($paquete == null)
    {
        /*echo "<pre>"; print_r($respuestaDescargaXml); echo "<pre>"; */

        $metodo='DESCARGA';
        $respuestaDescargaXml['servidor']='SERVIDOR DE DESCARGA';
        $respuestaDescargaXml['mensaje']='No se descargo el paquete';
        
        $mensaje_error=json_encode($respuestaDescargaXml);
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'pendiente',metodo_fin = ?, mensaje_error = ? WHERE id = ?");
        $stmt->execute([$metodo,$mensaje_error,$id_descarga]);
        echo json_encode(['error' => 'Error en la Descarga del paquete']);
        exit;
    }else{
        
        // CREAR CARPETA DE ARCHIVOS
        list($ano, $mes, $dia) = explode("-", date("Y-m-d"));

        $carpeta = "descargas/$rfc_solicitante/$ano/$mes/$dia";
        // Verificar si la carpeta existe, si no, crearla con permisos adecuados
        if (!is_dir($carpeta)) {
            mkdir($carpeta, 0777, true); // true permite crear subdirectorios recursivamente
        }
        
        $ruta_archivo="$carpeta/".$idPaquete.".zip";
        saveBase64File($paquete,$ruta_archivo);
        
        $metodo='DESCARGA';
        $respuestaDescargaXml['servidor']='SERVIDOR DE DESCARGA';
        $respuestaDescargaXml['mensaje']='Se completo la descarga del paquete';
        $mensaje_error=json_encode($respuestaDescargaXml);
        $stmt = $pdo->prepare("UPDATE descargas_cfd SET estatus = 'completada',metodo_fin = ?, mensaje_error = ?, ruta_archivo = ? WHERE id = ?");
        $stmt->execute([$metodo,$mensaje_error,$ruta_archivo,$id_descarga]);
        
        // Respuesta exitosa y fin
        echo json_encode(['msj' => 'Descarga finalizada correctamente']);
        exit;
    }

 

 

 

 

Algunos de nuestros servicios:

descarga-masiva-cfdi-sat-codigo-fuente

No hay comentarios:

Publicar un comentario

Bottom Ad [Post Page]

| Designed by Colorlib