890694] [client 136.143.177.44:52780] PHP Warning: fopen(./LogosArochi/MAR-130925.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130002 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP Stack trace: [Mon Jul 21 10:50:18.130007 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130010 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130017 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130020 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP Stack trace: [Mon Jul 21 10:50:18.130024 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130027 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130032 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130035 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP Stack trace: [Mon Jul 21 10:50:18.130038 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130037 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP Warning: fopen(./LogosArochi/MAR-130925.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130041 2025] [php7:notice] [pid 2890694] [client 136.143.177.44:52780] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130046 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP Stack trace: [Mon Jul 21 10:50:18.130050 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130054 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130060 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130063 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP Stack trace: [Mon Jul 21 10:50:18.130065 2025] [php7:notice] [pid 2890618] [client 136.143.177.43:44662] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130067 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130071 2025] [php7:notice] [pid 2890623] [client 136.143.176.44:48174] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130073 2025] [php7:notice] [pid 2890618] [client 136.143.177.43:44662] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130076 2025] [php7:notice] [pid 2890618] [client 136.143.177.43:44662] PHP Stack trace: [Mon Jul 21 10:50:18.130080 2025] [php7:notice] [pid 2890618] [client 136.143.177.43:44662] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130129 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Warning: fopen(./LogosArochi/MAR-130925.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130125 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Warning: fopen(./LogosArochi/MAR-130913.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130140 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Stack trace: [Mon Jul 21 10:50:18.130141 2025] [php7:notice] [pid 2890618] [client 136.143.177.43:44662] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130143 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Stack trace: [Mon Jul 21 10:50:18.130146 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130149 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130150 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130153 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130160 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130169 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130216 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Warning: fopen(./LogosArochi/MAR-130916.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130258 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Warning: fopen(./LogosArochi/MAR-130915.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130533 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Stack trace: [Mon Jul 21 10:50:18.130534 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Stack trace: [Mon Jul 21 10:50:18.130537 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Stack trace: [Mon Jul 21 10:50:18.130540 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Stack trace: [Mon Jul 21 10:50:18.130543 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130544 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130546 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130548 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130548 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130550 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130551 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130553 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130558 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130558 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130566 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP Stack trace: [Mon Jul 21 10:50:18.130567 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP Stack trace: [Mon Jul 21 10:50:18.130569 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130571 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130572 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Stack trace: [Mon Jul 21 10:50:18.130575 2025] [php7:notice] [pid 2890108] [client 136.143.176.60:44114] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130566 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130569 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130576 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130580 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Stack trace: [Mon Jul 21 10:50:18.130582 2025] [php7:notice] [pid 2885034] [client 136.143.177.61:58506] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130584 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130585 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130589 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130590 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130594 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP Stack trace: [Mon Jul 21 10:50:18.130594 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130597 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130598 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP Stack trace: [Mon Jul 21 10:50:18.130601 2025] [php7:notice] [pid 2885031] [client 136.143.177.61:58654] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130602 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130611 2025] [php7:notice] [pid 2885380] [client 136.143.177.61:54892] PHP 2. fclose() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:190 [Mon Jul 21 10:50:18.130650 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Warning: fopen(./LogosArochi/MAR-130925.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130658 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Stack trace: [Mon Jul 21 10:50:18.130663 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130659 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP Warning: fopen(./LogosArochi/MAR-130925.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130667 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130668 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP Stack trace: [Mon Jul 21 10:50:18.130673 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130673 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130676 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Stack trace: [Mon Jul 21 10:50:18.130679 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130680 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130679 2025] [php7:notice] [pid 2885036] [client 136.143.177.62:60644] PHP Warning: fopen(./LogosArochi/MAR-130914.png): failed to open stream: Permission denied in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 188 [Mon Jul 21 10:50:18.130684 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP 2. fwrite() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:189 [Mon Jul 21 10:50:18.130685 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 189 [Mon Jul 21 10:50:18.130687 2025] [php7:notice] [pid 2885036] [client 136.143.177.62:60644] PHP Stack trace: [Mon Jul 21 10:50:18.130689 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP Stack trace: [Mon Jul 21 10:50:18.130690 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Warning: fclose() expects parameter 1 to be resource, bool given in /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php on line 190 [Mon Jul 21 10:50:18.130692 2025] [php7:notice] [pid 2885036] [client 136.143.177.62:60644] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130694 2025] [php7:notice] [pid 2890695] [client 136.143.176.44:55330] PHP Stack trace: [Mon Jul 21 10:50:18.130693 2025] [php7:notice] [pid 2887211] [client 136.143.177.62:38746] PHP 1. {main}() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:0 [Mon Jul 21 10:50:18.130696 2025] [php7:notice] [pid 2885036] [client 136.143.177.62:60644] PHP 2. fopen() /var/www/html/imagenesAptusLegal/arochi/wsImageSave_v3.php:188 [Mon Jul 21 10:50:18.130076 2025] [php7:notice] [pid 2890 "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Anio de vigencia."); $Resultado = json_encode($j_array); return; } if($mesCata == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Mes de vigencia."); $Resultado = json_encode($j_array); return; } if($tipoEnvio == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Tipo de Envio."); $Resultado = json_encode($j_array); return; } if($csvFileName == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Nombre del Archivo CSV a procesar."); $Resultado = json_encode($j_array); return $Resultado; } if($organi_id_ZB == "") { $j_array = array('code' => "306", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Organization ID de Books"); $Resultado = json_encode($j_array); return $Resultado; } $dirBase = realpath("../"); ### DEFINICIÓN DE CONSTANTES ################################################### $SendaCVS = "archs_csv/"; $SendaXML = "archs_xml/"; $SendaZIP = "archs_zip/"; #---------------------------------------------------------------- # Creamos la conexión a la base de datos #---------------------------------------------------------------- $conn = mysqli_connect("127.0.0.1", "aptuslegal", "#Aptus2021#", "vendorbills"); if (!$conn) { echo "Error: No se pudo conectar a MySQL." . PHP_EOL; echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL; exit; } #---------------------------------------------------------------- # Traemos los valores de conexión utilizando el organizationId #---------------------------------------------------------------- $sql = 'SELECT * FROM conndetails WHERE organization_id = ' . $organi_id_ZB; if($result = $conn->query($sql)) { $row = $result->fetch_assoc(); } else { exit('No se ejecuto la consulta'); } #---------------------------------------------------------------- # Cerramos la conexión #---------------------------------------------------------------- mysqli_close($conn); #---------------------------------------------------------------- # Variables para Zoho Workdrive #---------------------------------------------------------------- $wdrv_parent_id = $row['zworkdrvbalcom_id']; $woa_RefreshToken = $row['zworkdrv_rtoken']; $woa_ClientId = $row['zworkdrvclient_id']; $woa_ClientSecret = $row['zworkdrvclient_secret']; $woa_RedirectUri = $row['RedirectUri']; $woa_AuthUrl = 'https://accounts.zoho.com/oauth/v2/token'; $woa_GrantType = "refresh_token"; #---------------------------------------------------------------- # RFC de la Organización #---------------------------------------------------------------- $regFeCa = $row['rfc']; #== Creación de la variable de tipo DOM, aquí se conforma el XML a timbrar posteriormente. $xml = new DOMdocument('1.0', 'UTF-8'); $root = $xml->createElement("BCE:Balanza"); $root = $xml->appendChild($root); #== Apertura, lectura y conversión de CSV a JSON. $fileName = $SendaCVS.$csvFileName; $csvToJson = csvToJson($fileName); $arrayJson = json_decode($csvToJson, true); // Función para limpiar números function limpiarNumero($valor) { if ($valor === null || $valor === '' || trim($valor) === '') return 0.00; if (is_numeric($valor)) return floatval($valor); $clean = str_replace([',', '$', ' '], '', $valor); return floatval($clean) ?: 0.00; } // Inicializamos las estructuras de datos $sumasMayores = []; // Para almacenar los totales de las cuentas mayores $arrayDetalle = []; $totalCargos = 0.00; $totalAbonos = 0.00; $Account1count = 0; // Primera pasada: Procesar todas las cuentas foreach($arrayJson as $item => $value) { $accountCode = trim($value['account_code']); if (empty($accountCode)) continue; // Procesar valores $saldoIni = limpiarNumero($value['opening_balance']); $debe = limpiarNumero($value['debit_total']); $haber = limpiarNumero($value['credit_total']); $saldoFin = limpiarNumero($value['closing_balance']); // Sumar totales generales $totalCargos += $debe; $totalAbonos += $haber; // Procesamiento para el arrayDetalle (todas las cuentas) $codCue = substr($accountCode, 0, 3); if(is_numeric($codCue) && !empty($value['account.CF.Codigo del SAT'])) { $arrayDetalle[] = [ "ClaveSat" => $value['account.CF.Codigo del SAT'], "NumCta" => $accountCode, "SaldoIni" => $saldoIni, "Debe" => $debe, "Haber" => $haber, "SaldoFin" => $saldoFin ]; $Account1count += 1; } // Identificar prefijo de cuenta (los primeros 3 dígitos antes del primer guión) $prefijo = strtok($accountCode, '-'); // Si NO es una cuenta mayor (no termina en -00-000), sumar a su cuenta mayor correspondiente if (!preg_match('/-00-000$/', $accountCode)) { $cuentaMayor = $prefijo . '-00-000'; if (!isset($sumasMayores[$cuentaMayor])) { $sumasMayores[$cuentaMayor] = [ 'saldoIni' => 0.00, 'debe' => 0.00, 'haber' => 0.00, 'saldoFin' => 0.00 ]; } // Sumar valores a la cuenta mayor correspondiente $sumasMayores[$cuentaMayor]['saldoIni'] += $saldoIni; $sumasMayores[$cuentaMayor]['debe'] += $debe; $sumasMayores[$cuentaMayor]['haber'] += $haber; $sumasMayores[$cuentaMayor]['saldoFin'] += $saldoFin; } } // Segunda pasada: Actualizar solo las cuentas mayores con los totales foreach ($arrayDetalle as &$cuenta) { $accountCode = $cuenta['NumCta']; // Si es una cuenta mayor y tenemos sumas para ella if (preg_match('/-00-000$/', $accountCode) && isset($sumasMayores[$accountCode])) { $cuenta['SaldoIni'] = $sumasMayores[$accountCode]['saldoIni']; $cuenta['Debe'] = $sumasMayores[$accountCode]['debe']; $cuenta['Haber'] = $sumasMayores[$accountCode]['haber']; $cuenta['SaldoFin'] = $sumasMayores[$accountCode]['saldoFin']; } // Formatear números (opcional, puedes quitarlo si prefieres el formato sin comas) $cuenta['SaldoIni'] = number_format($cuenta['SaldoIni'], 2, '.', ''); $cuenta['Debe'] = number_format($cuenta['Debe'], 2, '.', ''); $cuenta['Haber'] = number_format($cuenta['Haber'], 2, '.', ''); $cuenta['SaldoFin'] = number_format($cuenta['SaldoFin'], 2, '.', ''); } unset($cuenta); // Romper la referencia #== Se crea e inserta el primer nodo donde se declaran los namespaces ====== cargaAttNodo($root, array( "Version"=>"1.3", "RFC"=>$regFeCa, "Mes"=>$mesCata, "Anio"=>$anioCat, "TipoEnvio"=>$tipoEnvio, "xsi:schemaLocation"=>"http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion/BalanzaComprobacion_1_3.xsd", "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:BCE"=>"http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion") ); $arrayToCSV = Array(); $arrayToCSV[] = array('NumCta','SaldoIni', 'Debe', 'Haber', 'SaldoFin', 'ClaveSat'); foreach($arrayDetalle as $item => $value) { if($value['ClaveSat'] != "") { $codCue = substr($value['NumCta'],0,3); if(is_numeric($codCue)) { $cuentas = $xml->createElement("BCE:Ctas"); $cuenta = $root->appendChild($cuentas); cargaAttNodo($cuenta, array( "SaldoFin"=>$value['SaldoFin'], "Haber"=>$value['Haber'], "Debe"=>$value['Debe'], "SaldoIni"=>$value['SaldoIni'], "NumCta"=>$value['NumCta'] ) ); // Creamos el array para el archivo CSV $arrayToCSV[] = array($value['NumCta'],$value['SaldoIni'], $value['Debe'], $value['Haber'], $value['SaldoFin'], $value['ClaveSat']); } } } #=== Se guarda el archivo .XML de la Balanza de Comprobación ======================= $xmlFilesPath = 'archs_xml/'; $csvFilesPath = 'archs_csv/'; $zipFilesPath = 'archs_zip/'; if($tipoEnvio == "N") { $file_name_with_full_path = $xmlFilesPath.$regFeCa.$anioCat.$mesCata."BN.xml"; $file_name_csv_full_path = $csvFilesPath.$regFeCa.$anioCat.$mesCata."BN.csv"; } else { $file_name_with_full_path = $xmlFilesPath.$regFeCa.$anioCat.$mesCata."BC.xml"; $file_name_csv_full_path = $csvFilesPath.$regFeCa.$anioCat.$mesCata."BC.csv"; } #=== Si existe el archivo CSV se elimina para crear el nuevo ======================= if(file_exists($file_name_csv_full_path)){ unlink($file_name_csv_full_path); } $fp = fopen($file_name_csv_full_path, 'w'); foreach ($arrayToCSV as $fields) { fputcsv($fp, $fields); } fclose($fp); #=== Si existe el archivo XML se elimina para crear el nuevo ======================= if(file_exists($file_name_with_full_path)){ unlink($file_name_with_full_path); } #=== Se guarda el archivo XML creado ======================= $cfdi = $xml->saveXML(); $xml->formatOutput = true; $xml->save($file_name_with_full_path); unset($xml); #=== Se dan permisos de escritura al archivo .xml. ========================= if($tipoEnvio == "N") { chmod($SendaXML.$regFeCa.$anioCat.$mesCata."BN.xml", 0777); } else { chmod($SendaXML.$regFeCa.$anioCat.$mesCata."BC.xml", 0777); } #=== Se procede a crear el archivo ZIP del Catalogo de Cuentas ========================= $zip = new ZipArchive(); $zipFilesPath = 'archs_zip/'; if($tipoEnvio == "N") { $nombreArchivoZip = $zipFilesPath.$regFeCa.$anioCat.$mesCata."BN.zip"; $nameArchZip = $regFeCa.$anioCat.$mesCata."BN.zip"; } else { $nombreArchivoZip = $zipFilesPath.$regFeCa.$anioCat.$mesCata."BC.zip"; $nameArchZip = $regFeCa.$anioCat.$mesCata."BC.zip"; } #=== Si existe el archivo ZIP se elimina para crear el nuevo ======================= if(file_exists($nombreArchivoZip)){ unlink($nombreArchivoZip); } if (!$zip->open($nombreArchivoZip, ZipArchive::CREATE | ZipArchive::OVERWRITE)) { exit("Error abriendo ZIP en $nombreArchivoZip"); } $nombre = basename($file_name_with_full_path); $zip->addFile($file_name_with_full_path, $nombre); $resultado = $zip->close(); if (!$resultado) { exit("Error creando archivo ZIP"); } #=== FIN DEL PROCESO ======================= $resultData = array( 'xmlFilesPath' => $xmlFilesPath, 'xmlFileName' => $regFeCa.$anioCat.$mesCata."BN.xml", 'csvFilesPath' => $csvFilesPath, 'csvFileName' => $regFeCa.$anioCat.$mesCata."BN.csv", 'zipFilesPath' => $zipFilesPath, 'zipFileName' => $regFeCa.$anioCat.$mesCata."BN.zip", 'totalCargos' => round($totalCargos,2), 'totalAbonos' => round($totalAbonos,2), 'totalCuentas' => $Account1count, 'cantidadDeudoras' => 333); if($tipoEnvio == "N") { $j_array = array('code' => "200", 'message' => 'Proceso de creacion de Archivo (NORMAL) de Balanza de Comprobacion fue exitoso', 'data' => $resultData); } else { $j_array = array('code' => "200", 'message' => "Proceso de creacion de Archivo (COMPLEMENTARIO) de Balanza de Comprobacion fue exitoso", 'data' => $resultData); } $Resultado = json_encode($j_array); echo $Resultado; return $Resultado; ### FUNCIONES DEL MÓDULO ######################################################### # Funcion para convertir CSV a formato JSON function csvToJson($fname) { if (!($fp = fopen($fname, 'r'))) { die("No se pudo abrir el arcivo CSV..."); } $key = fgetcsv($fp,"1024",","); $json = array(); while ($row = fgetcsv($fp,"1024",",")) { $json[] = array_combine($key, $row); } fclose($fp); return json_encode($json); } # Función que integra los nodos al archivo .XML function cargaAttNodo(&$nodo, $attr){ global $xmldoc; foreach ($attr as $key => $val){ $val = preg_replace('/\s\s+/', ' ', $val); $val = trim($val); if (strlen($val)>0){ $val = utf8_encode(str_replace("|","/",$val)); $nodo->setAttribute($key,$val); } } }