private function GetXmlSatValidationCfdiAnswer() { $DB = new DataBase(); $IdUser = filter_input(INPUT_POST, "idLogin"); $IdDetail = filter_input(INPUT_POST, "IdDetail"); $Content = filter_input(INPUT_POST, "content"); $Query = ""; if (strcasecmp($Content, "proveedor") == 0 or strcasecmp($Content, "cliente") == 0) { $Query = "SELECT det.id_validacion , val.ruta_acuse FROM detalle_factura_{$Content} det inner join validacion_{$Content} val on det.id_validacion=val.id_validacion WHERE det.id_detalle={$IdDetail} "; } if (strcasecmp($Content, "nomina") == 0) { $Query = "SELECT det.id_validacion, val.ruta_acuse FROM detalle_recibo_{$Content} det inner join validacion_nomina val on det.id_validacion=val.id_validacion WHERE det.id_detalle_recibo_nomina={$IdDetail}"; } $Result = $DB->ConsultaSelect("CFDI", $Query); if ($Result['Estado'] != 1) { XML::XmlResponse("Error", 0, "<p><b>Error</b> al recuperar el <b>Acuse de validación</b></p><br>Detalles:<br><br>" . $Result['Estado']); return 0; } $Acuse = $Result['ArrayDatos'][0]; if (!file_exists($Acuse['ruta_acuse'])) { XML::XMLReponse("Error", 0, "<p><b>Error</b> no existe el acuse de validación</p>"); return 0; } $doc = new DOMDocument('1.0', 'utf-8'); $doc->load($Acuse['ruta_acuse']); $root = $doc->firstChild; $IdAcuse = $doc->createElement("IdValidacion", $Acuse['id_validacion']); $root->appendChild($IdAcuse); header('Content-Type: text/xml'); echo $doc->saveXML(); }
private function UpdateCfdi() { $receipt = new Receipt(); $content = filter_input(INPUT_POST, "content"); $IdUser = filter_input(INPUT_POST, "IdUser"); $UserName = filter_input(INPUT_POST, "UserName"); $PdfPath = filter_input(INPUT_POST, "PdfPath"); $XmlPath = filter_input(INPUT_POST, "XmlPath"); $IdCfdi = filter_input(INPUT_POST, "IdCfdi"); $FileState = filter_input(INPUT_POST, "FileState"); $key = 0; $TableName = ''; if (strcasecmp($content, "provider") == 0) { $TableName = "proveedor"; $key = 3; } if (strcasecmp($content, "client") == 0) { $TableName = "cliente"; $key = 2; } if (strcasecmp($content, "payroll") == 0) { $TableName = "nomina"; $key = 1; } $PdfNewName = $_FILES['pdf']['name']; $PdfNewPath = $_FILES['pdf']['tmp_name']; $XmlNewName = $_FILES['xml']['name']; $XmlNewPath = $_FILES['xml']['tmp_name']; $NewPdfName = pathinfo($PdfNewName, PATHINFO_FILENAME); $NewXmlName = pathinfo($XmlNewName, PATHINFO_FILENAME); $NewPdfExtension = pathinfo($PdfNewName, PATHINFO_EXTENSION); $OldXmlName = pathinfo($XmlPath, PATHINFO_FILENAME); $OldExtensionXml = pathinfo($XmlPath, PATHINFO_EXTENSION); $oldSatReceiptName = pathinfo($XmlPath, PATHINFO_FILENAME); $OldPdfName = pathinfo($PdfPath, PATHINFO_FILENAME); $OldExtensionPdf = pathinfo($PdfPath, PATHINFO_EXTENSION); $OldPathSatReceipt = dirname($XmlPath) . "/" . $OldXmlName . "SAT." . $OldExtensionXml; if ($_FILES['xml']['error'] != UPLOAD_ERR_OK) { XML::XmlResponse("Error", 0, "<p>" . $_FILES['xml']['error'] . '</p>'); return; } if ($_FILES['xml']['pdf'] != UPLOAD_ERR_OK) { XML::XmlResponse("Error", 0, "<p>" . $_FILES['xml']['error'] . '</p>'); return; } if (!file_exists($XmlPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b> no existe el Xml a reemplazar</p>"); return 0; } if (!file_exists($OldPathSatReceipt)) { XML::XmlResponse("Error", 0, "<p><b>Error</b> no existe el comprobante de validación del Xml</p>"); return 0; } /* Validación del mismo nombre del xml y el pdf */ if (file_exists($PdfNewPath) and file_exists($XmlNewPath)) { if (strcasecmp($NewPdfName, $NewXmlName) != 0) { XML::XmlResponse("Error", 0, "<p>El Pdf y el Xml deben tener el mismo nombre</p>"); return 0; } } $ReadXml = new Read_factura_cliente(); $Validation = new webservice_sat(); $ValidationXml = $ReadXml->validacion_estructura($XmlPath); if ($ValidationXml != 1) { XML::XmlResponse("Error", 0, "<p><b>Error</b> el xml es inválido</p>"); return 0; } $XmlDetail = $ReadXml->GetDetail($XmlNewPath); $ValidateXml = $Validation->valida_cfdi($XmlDetail['emisor']['rfc'], $XmlDetail['receptor']['rfc'], $XmlDetail['encabezado']['total'], $XmlDetail['timbreFiscalDigital']['UUID']); if (!is_object($ValidateXml)) { XML::XMLReponse("Error", 0, "<p><b>Error</b> el xml es inválido</p>"); return 0; } /* Se crea el directorio donde se almacenan las actualizaciones de un CFDI */ if (!file_exists(dirname($XmlPath) . "/copias")) { mkdir(dirname($XmlPath) . "/copias", 0777, true); } /* Se mueve el antiguo xml y se sube el nuevo reemplazando la ruta del antiguo xml */ $NewRouteDestinationXml = dirname($XmlPath) . "/copias/" . basename($XmlPath); if (file_exists($NewRouteDestinationXml)) { // echo "ya existe el xml en la ruta destino<br><br>"; $OldXmlName = pathinfo($this->RenameFile(dirname($NewRouteDestinationXml), basename($NewRouteDestinationXml)), PATHINFO_FILENAME); // echo "<p>Nuevo nombre $NewName</p>"; $NewRouteDestinationXml = dirname($NewRouteDestinationXml) . "/{$OldXmlName}.{$OldExtensionXml}"; } if (!rename($XmlPath, $NewRouteDestinationXml)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el xml antiguo al histórico de copias</p>"); return 0; } if (!move_uploaded_file($XmlNewPath, $XmlPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el nuevo Xml a su ruta correspondiente</p>"); return 0; } /* Se mueve el comprobante SAT al directorio de copias */ $NewPathSatReceipt = dirname($NewRouteDestinationXml) . "/" . $OldXmlName . "SAT.xml"; if (!rename($OldPathSatReceipt, $NewPathSatReceipt)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el comprobante de validación antiguo al histórico de copias</p>"); return 0; } $NewSatReceipt = dirname($XmlPath) . "/" . $oldSatReceiptName . "SAT.{$OldExtensionXml}"; $ValidateXml->save($NewSatReceipt); /* Sí existe un PDF este se mueve a copias */ $NewRouteDestinationPdf = dirname($XmlPath) . "/copias"; if (file_exists($PdfPath)) { $NewPdfPath = $NewRouteDestinationPdf . "/" . $OldXmlName . "." . $OldExtensionPdf; if (!rename($PdfPath, $NewPdfPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el xml antiguo al histórico de copias</p>"); return 0; } } /* Sí se adjunta un nuevo pdf se introduce en la ruta del XML */ if (file_exists($PdfNewPath)) { $NewPdfPath = dirname($XmlPath) . "/" . $OldPdfName . ".{$OldExtensionPdf}"; if (!move_uploaded_file($PdfNewPath, $NewPdfPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el nuevo PDF a su ruta correspondiente</p>"); return 0; } } $NewIdReceipt = $receipt->InsertValidationCfdi($TableName, $ValidateXml, $NewPathSatReceipt); $historical = new Historical(); $NewIdHistorical = $historical->InsertHistorical($TableName, $IdUser, $IdCfdi, $NewIdReceipt, $NewRouteDestinationXml, $NewRouteDestinationPdf . "/" . $OldXmlName . "." . $OldExtensionPdf, $FileState); if ($NewIdHistorical == 0) { return 0; } if ($this->UpdateMetadatas($TableName, $IdCfdi, $XmlDetail, $XmlPath, $PdfPath) != 1) { return 0; } $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; $root = $doc->createElement('Update'); $doc->appendChild($root); $mensaje_ = $doc->createElement('Mensaje', '<p>Datos actualizados con éxito</p>'); $root->appendChild($mensaje_); $Fecha = $doc->createElement("Fecha", $XmlDetail['encabezado']['fecha']); $root->appendChild($Fecha); $Folio = $doc->createElement("Folio", $XmlDetail['encabezado']['folio']); $root->appendChild($Folio); $Subtotal = $doc->createElement("subTotal", $XmlDetail['encabezado']['subTotal']); $root->appendChild($Subtotal); $Total = $doc->createElement("Total", $XmlDetail['encabezado']['total']); $root->appendChild($Total); header("Content-Type:text/xml"); echo $doc->saveXML(); // $log = new Log(); // $log->write_line(8,$IdUser,$IdCfdi,$key);/* Registro Log */ }
private function GetXmlStructure() { $XmlPath = filter_input(INPUT_POST, "XmlPath"); $content = filter_input(INPUT_POST, "content"); $IdLogin = filter_input(INPUT_POST, "IdLogin"); if (file_exists($XmlPath)) { $xml_contents = file_get_contents($XmlPath); $xml_ = preg_replace("/(<\\/?)(\\w+):([^>]*>)/", "\$1\$2\$3", $xml_contents); $xml = simplexml_load_string($xml_); header('Content-Type: text/xml'); echo $xml->saveXML(); $log = new Log(); if ($content == 'nomina') { $clave_log = 1; } if ($content == 'cliente') { $clave_log = 2; } if ($content == 'proveedor') { $clave_log = 3; } // $log->write_line(18, $IdLogin, 0 , $clave_log);/* Registro Log */ } else { XML::XMLReponse("Error", 0, "<p><b>Error</b>, no existe el documento solicitado.</p>"); } }