private/machine-token.json 2025-07-05 00:21:43,673 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,307 - system.py:(355) [DEBUG]: Reading file: /etc/os-release 2025-07-06 12:02:04,307 - system.py:(355) [DEBUG]: Reading file: /proc/version_signature 2025-07-06 12:02:04,317 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,317 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,328 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,328 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,331 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:04,331 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-06 12:02:08,316 - system.py:(355) [DEBUG]: Reading file: /run/ubuntu-advantage//aptnews.json 2025-07-06 12:02:08,316 - apt_news.py:(183) [DEBUG]: something went wrong while processing apt_news: FileNotFoundError(2, 'No such file or directory') 2025-07-07 03:19:49,000 - system.py:(355) [DEBUG]: Reading file: /etc/os-release 2025-07-07 03:19:49,000 - system.py:(355) [DEBUG]: Reading file: /proc/version_signature 2025-07-07 03:19:49,027 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-07 03:19:49,028 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-07 03:19:49,029 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-07 03:19:49,029 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-08 00:45:41,747 - system.py:(355) [DEBUG]: Reading file: /etc/os-release 2025-07-08 00:45:41,748 - system.py:(355) [DEBUG]: Reading file: /proc/version_signature 2025-07-08 00:45:41,769 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-08 00:45:41,770 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-08 00:45:41,772 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-08 00:45:41,772 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,800 - system.py:(355) [DEBUG]: Reading file: /etc/os-release 2025-07-09 05:14:22,802 - system.py:(355) [DEBUG]: Reading file: /proc/version_signature 2025-07-09 05:14:22,811 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,811 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,821 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,821 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,823 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:22,824 - files.py:(56) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-09 05:14:53,688 - system.py:(355) [DEBUG]: Reading file: /run/ubuntu-advantage//aptnews.json 2025-07-09 05:14:53,688 - apt_news.py:(183) [DEBUG]: something went wrong while processing apt_news: FileNotFoundError(2, 'No such file or directory') 2025-07-10 14:39:26,415 - system.py:(355) [DEBUG]: Reading file: /etc/os-release 2025-07-10 14:39:26,416 - system.py:(355) [DEBUG]: Reading file: /proc/version_signature 2025-07-10 14:39:26,425 - system.py:(355) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json 2025-07-10 14:39:26,425 - files.py:(56) [DEBUG]: File does not e "300", "message" => "ERROR - [wsFileLedes1998B] Parametros incompletos para el Servicio Web, faltan el Nombre del Archivo LEDES"); $Resultado = json_encode($j_array); echo $Resultado; return; } if($bRecId == "") { $j_array = array('code' => "300", "message" => "ERROR - [wsFileLedes1998B] Parametros incompletos para el Servicio Web, faltan el ID del LEDES a actualizar"); $Resultado = json_encode($j_array); echo $Resultado; return; } if($bInvId == "") { $j_array = array('code' => "300", "message" => "ERROR - [wsFileLedes1998B] Parametros incompletos para el Servicio Web, faltan el ID del Invoice a actualizar"); $Resultado = json_encode($j_array); echo $Resultado; return; } if($bDatPac == "") { $j_array = array('code' => "310", "message" => "ERROR - [wsPreBillZohoBooks] Faltan los parametros de conexión OAuth"); $Resultado = json_encode($j_array); echo $Resultado; return; } # Obtenemos el access token de Zoho Creator $bDatPac = base64_decode($bDatPac); $aDatPac = json_decode($bDatPac, true); //print_r($aDatPac); #== Datos y Variables para OAuth Token $coa_ClientId = $aDatPac["C_OAuth_client_id"]; $coa_ClientSecret = $aDatPac["C_OAuth_client_secret"]; $coa_RefreshToken = $aDatPac["C_OAuth_refresh_token"]; $coa_GrantType = $aDatPac["C_OAuth_grant_type"]; $coa_RedirectUri = $aDatPac["C_OAuth_redirect_uri"]; $coa_AuthUrl = "https://accounts.zoho.com/oauth/v2/token"; $coa_access_token = oauth($appOwner, 'ZCreator', $coa_RefreshToken, $coa_ClientId, $coa_ClientSecret, $coa_RedirectUri, $coa_GrantType, $coa_AuthUrl); //echo $coa_access_token; ### 1. EXTRACCION DE PARAMETROS PARA EL CFDI ###################################################### #== Primero, extraemos el JSON del string en base 64 $request_url = 'https://creator.zoho.com/api/v2/' . $appOwner . '/' . $applnkname . '/report/' . $reportQry . '?criteria=(ID='.$bRecId.')'; //echo $request_url; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Zoho-oauthtoken ' . $coa_access_token)); $r = curl_exec($ch); echo $r; $array = json_decode($r); $bdDatLed = $array->data[0]->jsonInvoiceDetail; $bdDatLed = str_replace("\t|\n", " ", $bdDatLed); $abdDatLed = json_decode($bdDatLed,true); curl_close ($ch); print_r($bdDatLed); $dirBase = realpath("../"); ### 2. DEFINICIÓN DE CONSTANTES ################################################### $SendaPEMS = "archs_pem/"; $SendaCFDI = "archs_cfdi/"; $SendaGRAFS = "archs_graf/"; $SendaXSD = "archs_xsd/"; $fileLedes = fopen($SendaCFDI.$arcLedes, "w"); fwrite($fileLedes, "LEDES98BI V2[]" . PHP_EOL); fwrite($fileLedes, "INVOICE_DATE|INVOICE_NUMBER|CLIENT_ID|LAW_FIRM_MATTER_ID|INVOICE_TOTAL|BILLING_START_DATE|BILLING_END_DATE|INVOICE_DESCRIPTION|LINE_ITEM_NUMBER|EXP/FEE/INV_ADJ_TYPE|LINE_ITEM_NUMBER_OF_UNITS|LINE_ITEM_ADJUSTMENT_AMOUNT|LINE_ITEM_TOTAL|LINE_ITEM_DATE|LINE_ITEM_TASK_CODE|LINE_ITEM_EXPENSE_CODE|LINE_ITEM_ACTIVITY_CODE|TIMEKEEPER_ID|LINE_ITEM_DESCRIPTION|LAW_FIRM_ID|LINE_ITEM_UNIT_COST|TIMEKEEPER_NAME|TIMEKEEPER_CLASSIFICATION|CLIENT_MATTER_ID|PO_NUMBER|CLIENT_TAX_ID|MATTER_NAME|INVOICE_TAX_TOTAL|INVOICE_NET_TOTAL|INVOICE_CURRENCY|TIMEKEEPER_LAST_NAME|TIMEKEEPER_FIRST_NAME|ACCOUNT_TYPE|LAW_FIRM_NAME|LAW_FIRM_ADDRESS_1|LAW_FIRM_ADDRESS_2|LAW_FIRM_CITY|LAW_FIRM_STATEorREGION|LAW_FIRM_POSTCODE|LAW_FIRM_COUNTRY|CLIENT_NAME|CLIENT_ADDRESS_1|CLIENT_ADDRESS_2|CLIENT_CITY|CLIENT_STATEorREGION|CLIENT_POSTCODE|CLIENT_COUNTRY|LINE_ITEM_TAX_RATE|LINE_ITEM_TAX_TOTAL|LINE_ITEM_TAX_TYPE|INVOICE_REPORTED_TAX_TOTAL|INVOICE_TAX_CURRENCY[]" . PHP_EOL); // Armando el detalle de lineas del archivo. for ($i = 1; $i < count($abdDatLed); $i++){ if($abdDatLed[$i]["INVOICE_DATE"] != "") { fwrite($fileLedes, $abdDatLed[$i]["INVOICE_DATE"] . "|" . $abdDatLed[$i]["INVOICE_NUMBER"]."|" . $abdDatLed[$i]["CLIENT_ID"]."|" . $abdDatLed[$i]["LAW_FIRM_MATTER_ID"]."|" . $abdDatLed[$i]["INVOICE_TOTAL"]. "|" . $abdDatLed[$i]["BILLING_START_DATE"]. "|" . $abdDatLed[$i]["BILLING_END_DATE"]. "|" . $abdDatLed[$i]["INVOICE_DESCRIPTION"]. "|" . $abdDatLed[$i]["LINE_ITEM_NUMBER"]. "|" . $abdDatLed[$i]["EXP_FEE_INV_ADJ_TYPE"]. "|" . $abdDatLed[$i]["LINE_ITEM_NUMBER_OF_UNITS"]. "|" . $abdDatLed[$i]["LINE_ITEM_ADJUSTMENT_AMOUNT"]. "|" . $abdDatLed[$i]["LINE_ITEM_TOTAL"]. "|" . $abdDatLed[$i]["LINE_ITEM_DATE"]. "|" . $abdDatLed[$i]["LINE_ITEM_TASK_CODE"]. "|" . $abdDatLed[$i]["LINE_ITEM_EXPENSE_CODE"]. "|" . $abdDatLed[$i]["LINE_ITEM_ACTIVITY_CODE"]. "|" . $abdDatLed[$i]["TIMEKEEPER_ID"]. "|" . $abdDatLed[$i]["LINE_ITEM_DESCRIPTION"]. "|" . $abdDatLed[$i]["LAW_FIRM_ID"]. "|" . $abdDatLed[$i]["LINE_ITEM_UNIT_COST"]. "|" . $abdDatLed[$i]["TIMEKEEPER_NAME"]. "|" . $abdDatLed[$i]["TIMEKEEPER_CLASSIFICATION"]. "|" . $abdDatLed[$i]["CLIENT_MATTER_ID"]. "|" . $abdDatLed[$i]["PO_NUMBER"]. "|" . $abdDatLed[$i]["CLIENT_TAX_ID"]. "|" . $abdDatLed[$i]["MATTER_NAME"]. "|" . $abdDatLed[$i]["INVOICE_TAX_TOTAL"]. "|" . $abdDatLed[$i]["INVOICE_NET_TOTAL"]. "|" . $abdDatLed[$i]["INVOICE_CURRENCY"]. "|" . $abdDatLed[$i]["TIMEKEEPER_LAST_NAME"]. "|" . $abdDatLed[$i]["TIMEKEEPER_FIRST_NAME"]. "|" . $abdDatLed[$i]["ACCOUNT_TYPE"]. "|" . $abdDatLed[$i]["LAW_FIRM_NAME"]. "|" . $abdDatLed[$i]["LAW_FIRM_ADDRESS_1"]. "|" . $abdDatLed[$i]["LAW_FIRM_ADDRESS_2"]. "|" . $abdDatLed[$i]["LAW_FIRM_CITY"]. "|" . $abdDatLed[$i]["LAW_FIRM_STATEorREGION"]. "|" . $abdDatLed[$i]["LAW_FIRM_POSTCODE"]. "|" . $abdDatLed[$i]["LAW_FIRM_COUNTRY"]. "|" . $abdDatLed[$i]["CLIENT_NAME"]. "|" . $abdDatLed[$i]["CLIENT_ADDRESS_1"]. "|" . $abdDatLed[$i]["CLIENT_ADDRESS_2"]. "|" . $abdDatLed[$i]["CLIENT_CITY"]. "|" . $abdDatLed[$i]["CLIENT_STATEorREGION"]. "|" . $abdDatLed[$i]["CLIENT_POSTCODE"]. "|" . $abdDatLed[$i]["CLIENT_COUNTRY"]. "|" . $abdDatLed[$i]["LINE_ITEM_TAX_RATE"]. "|" . $abdDatLed[$i]["LINE_ITEM_TAX_TOTAL"]. "|" . $abdDatLed[$i]["LINE_ITEM_TAX_TYPE"]. "|" . $abdDatLed[$i]["INVOICE_REPORTED_TAX_TOTAL"]. "|" . $abdDatLed[$i]["INVOICE_TAX_CURRENCY"]. "[]" . PHP_EOL); } } fclose($fileLedes); chmod($SendaCFDI.$arcLedes, 0777); # Obtenemos el access token de Zoho Books $boa_ClientId = $aDatPac["B_OAuth_client_id"]; $boa_ClientSecret = $aDatPac["B_OAuth_client_secret"]; $boa_RefreshToken = $aDatPac["B_OAuth_refresh_token"]; $boa_GrantType = $aDatPac["B_OAuth_grant_type"]; $boa_RedirectUri = $aDatPac["B_OAuth_redirect_uri"]; $boa_AuthUrl = "https://accounts.zoho.com/oauth/v2/token"; $boa_access_token = oauth($appOwner, 'ZBooks', $boa_RefreshToken, $boa_ClientId, $boa_ClientSecret, $boa_RedirectUri, $boa_GrantType, $boa_AuthUrl); # Envio del Archivos a Invoice de Zoho Books $file_name_with_full_path = '/var/www/html/aptusCFDIRF/archs_cfdi/'.$arcLedes; $request_url = 'https://www.zohoapis.com/books/v3/invoices/'.$bInvId.'/attachment?organization_id='.$organi_id_ZB; if (function_exists('curl_file_create')) { // php 5.6+ $cFile = curl_file_create($file_name_with_full_path); } else { $cFile = '@' . realpath($file_name_with_full_path); } $post = array( //'organization_id' => $organi_id_ZB, 'attachment'=> $cFile); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Zoho-oauthtoken ' . $boa_access_token)); $r = curl_exec($ch); /*echo $file_name_with_full_path; echo $request_url; echo $r;*/ # Usamos la funcion curl_errno() para atrapar cualquier error relacionado con la llamada. if (curl_errno($ch)) { $error_msg = curl_error($ch); } curl_close ($ch); if (isset($error_msg)) { $j_array = array('code' => '666', 'message' => "Error en la llamada curl " . $error_msg); $Resultado = json_encode($j_array); echo $Resultado; return; } else { $ra = json_decode($r); $resultPDF = $ra->code.' - '.$ra->message; $code = (int)$ra->code; if ($code != 0) { $j_array = array('code' => $ra->code, 'message' => "No se pudo adjuntar el archivo a Books, contacte al administrador. Mensaje Books => " . $ra->message); $Resultado = json_encode($j_array); echo $Resultado; return; } } //unlink($SendaCFDI.$arcLedes); $j_array = array('code' => "200", 'message' => "Proceso de creacion del archivo LEDES fue exitoso", 'archivo_ledes' => $fileLedes); $Resultado = json_encode($j_array); echo $Resultado; return;