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:
- Sistema de Facturacion electronica Gratuito 5 Facturas Gratis...
- Sistema para Timbrar la Nomina Gratuito 5 Facturas Gratis.. de un CFDI.
- Codigo fuente para crear una factura, validar factura y mas
- y mucho mas.
VISITANOS EN NUESTRA PAGINA OFICIAL
VALIDADOR DE XML CFDI GRATIS
acceso gratis al validador
https://factura.cfdi.red/validador-xml-cfdi/validador.php
Sistema de Factuacion GRATIS
Verifica si tu factura es valida ante el sat (codigo fuente)

No hay comentarios:
Publicar un comentario