50 [info] > git config --get commit.template [3ms] 2025-05-07 15:26:26.056 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [1ms] 2025-05-07 15:26:26.065 [info] > git status -z -uall [4ms] 2025-05-07 15:26:26.066 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [2ms] 2025-05-07 15:27:51.916 [info] > git config --get commit.template [5ms] 2025-05-07 15:27:51.916 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [1ms] 2025-05-07 15:27:51.925 [info] > git status -z -uall [4ms] 2025-05-07 15:27:51.926 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [1ms] 2025-05-07 15:28:09.250 [info] > git config --get commit.template [5ms] 2025-05-07 15:28:09.250 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [1ms] 2025-05-07 15:28:09.261 [info] > git status -z -uall [5ms] 2025-05-07 15:28:09.262 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [1ms] 2025-05-07 15:28:36.670 [info] > git config --get commit.template [5ms] 2025-05-07 15:28:36.672 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [2ms] 2025-05-07 15:28:36.680 [info] > git status -z -uall [3ms] 2025-05-07 15:28:36.682 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [2ms] 2025-05-07 15:28:47.449 [info] > git config --get commit.template [3ms] 2025-05-07 15:28:47.455 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [2ms] 2025-05-07 15:28:47.465 [info] > git status -z -uall [4ms] 2025-05-07 15:28:47.466 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [1ms] 2025-05-07 15:29:18.711 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [2ms] 2025-05-07 15:29:18.711 [info] > git config --get commit.template [8ms] 2025-05-07 15:29:18.721 [info] > git status -z -uall [5ms] 2025-05-07 15:29:18.721 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [1ms] 2025-05-07 15:33:07.848 [info] > git config --get commit.template [5ms] 2025-05-07 15:33:07.849 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [1ms] 2025-05-07 15:33:07.857 [info] > git status -z -uall [4ms] 2025-05-07 15:33:07.859 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [2ms] 2025-05-07 15:34:12.158 [info] > git config --get commit.template [5ms] 2025-05-07 15:34:12.160 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs/remotes/master [3ms] 2025-05-07 15:34:12.167 [info] > git status -z -uall [4ms] 2025-05-07 15:34:12.168 [info] > git for-each-ref --sort -committerdate --format %(refname)%00%(objectname)%00%(*objectname) [1ms] 2025-05-07 15:35:09.511 [info] > git config --get commit.template [5ms] 2025-05-07 15:35:09.512 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/master refs "Falta el parámetro: $key"])); return null; } return base64_decode($_REQUEST[$key]); } function makeCurlRequest($url, $method = 'GET', $headers = [], $body = null) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => $headers, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, )); if ($body !== null) { curl_setopt($curl, CURLOPT_POSTFIELDS, $body); } $response = curl_exec($curl); if (curl_errno($curl)) { $err = curl_error($curl); curl_close($curl); exit(json_encode(["error" => "Curl error: $err"])); } curl_close($curl); return $response; } $pCRMData = getDecodedParam('pCRMData'); $pNDAccessToken = getDecodedParam('pNDAccessToken'); $pRecordId = getDecodedParam('pRecordId'); $pNDProfile = json_decode(getDecodedParam('pNDProfile', false) ?? '[]'); $aCRMData = json_decode($pCRMData); $CRMaccess_token = oauth( $aCRMData->pAppOwner, $aCRMData->pAppToken, $aCRMData->pCRMRefreshToken, $aCRMData->pCRMClientId, $aCRMData->pCRMClientSecret, $aCRMData->pRedirectUri, 'refresh_token', 'https://accounts.zoho.com/oauth/v2/token' ); $sUrl = "https://www.zohoapis.com/crm/v2/{$aCRMData->pModule}/{$pRecordId}/Attachments"; var_dump([$sUrl, 'GET', ["Authorization: Zoho-oauthtoken $CRMaccess_token"]]); return ; $response = makeCurlRequest($sUrl, 'GET', ["Authorization: Zoho-oauthtoken $CRMaccess_token"]); $data = json_decode($response); if (empty($data->data)) exit(json_encode(["error" => "El registro no cuenta con archivos adjuntos"])); $attachments = $data->data; $customAttrTest = []; foreach ($attachments as $file) { $id = $file->id; $fileName = $file->File_Name; $author = strstr($file->Owner->email, '@', true); $download = makeCurlRequest( "https://www.zohoapis.com/crm/v2/{$aCRMData->pModule}/{$pRecordId}/Attachments/{$id}", 'GET', ["Authorization: Zoho-oauthtoken $CRMaccess_token"] ); file_put_contents($fileName, $download); $fileProfile = array_merge($pNDProfile, [["id" => "1", "value" => $author]]); $upload = makeCurlRequest( "https://api.vault.netvoyage.com/v1/Document/upload", 'POST', [ "Authorization: Bearer $pNDAccessToken", "Content-Type: multipart/form-data", "Accept: application/json" ], [ 'file' => new CURLFile($fileName), 'destination' => $aCRMData->pDestination, 'cabinet' => $aCRMData->pCabinet, 'return' => 'full', 'customAttributes' => new CURLString(json_encode($fileProfile)) ] ); $uldata = json_decode($upload); $fileId = $uldata->standardAttributes->id ?? null; $envId = $uldata->standardAttributes->envId ?? null; $fileUrl = $uldata->standardAttributes->url ?? null; if (!$fileId) continue; $logMsg = "Archivo $fileName agregado a NetDocuments:\nEnvelope ID: $envId\nID: $fileId\nURL: https://vault.netvoyage.com/neWeb2/goId.aspx?id=$fileId&open=Y"; $recordObject = [ 'Usuario_Originador' => ['name' => $aCRMData->pUsuarioOriginadorName, 'id' => $aCRMData->pUsuarioOriginadorId], 'Interfase' => $aCRMData->pInterfase, 'Modulo' => $aCRMData->pModule, 'Log' => $logMsg, 'Registro' => $aCRMData->pRegistroUrl ]; $body = ['data' => [$recordObject]]; makeCurlRequest( 'https://www.zohoapis.com/crm/v2/AptusLogs', 'POST', ["Authorization: Zoho-oauthtoken $CRMaccess_token"], json_encode($body) ); makeCurlRequest( "https://www.zohoapis.com/crm/v2/{$aCRMData->pModule}/{$pRecordId}/Attachments/{$id}", 'DELETE', ["Authorization: Zoho-oauthtoken $CRMaccess_token"] ); unlink($fileName); $customAttrTest[] = ["file_id" => $fileId, "attributes" => json_encode($fileProfile)]; } // Solo si se requiere debug if (isset($_REQUEST['debug']) && $_REQUEST['debug'] == '1') { makeCurlRequest( 'https://zohoapi-730085095.development.catalystserverless.com/server/Cliq/sendMessage', 'POST', ['Content-Type: application/json'], json_encode([ "client_key" => "704580140", "recipient" => "uploadattachmentstond", "bot_name" => "devbotq", "message" => json_encode($customAttrTest) ]) ); } echo json_encode([ "status" => "ok", "archivos_subidos" => count($customAttrTest), "detalle" => $customAttrTest ]); ?>