One Hat Cyber Team
Your IP :
216.73.216.36
Server IP :
162.240.179.46
Server :
Linux vps-14493116.nutrivittasaude.com.br 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.2.31
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
lifeprimeti
/
meta.lifeprimeti.com.br
/
api
/
View File Name :
digigo.php
<?php require_once __DIR__ . '/../config/database.php'; require_once __DIR__ . '/../includes/digigo.php'; requireAdmin(); header('Content-Type: application/json; charset=utf-8'); $action = $_GET['action'] ?? $_POST['action'] ?? ''; $empresaId = getEmpresaId(); try { $globalCfg = DigiGOClient::getGlobalConfig($pdo); $companyCfg = DigiGOClient::getCompanyConfig($pdo, $empresaId); $digigoModo = $companyCfg['digigo_modo'] ?? 'proprio'; if ($digigoModo === 'global') { if (!DigiGOClient::isGloballyConfigured($globalCfg)) { throw new Exception('DigiGO Global indisponivel — super admin nao configurou'); } $baseUrl = $globalCfg['digigo_base_url']; $adminToken = $globalCfg['digigo_admin_token']; } else { if (empty($companyCfg['digigo_base_url']) || empty($companyCfg['digigo_admin_token'])) { throw new Exception('DigiGO Proprio nao configurado'); } $baseUrl = $companyCfg['digigo_base_url']; $adminToken = $companyCfg['digigo_admin_token']; } switch ($action) { case 'connect': $empresa = getEmpresa(); $slug = $empresa['slug'] ?? 'empresa' . $empresaId; $userName = $slug . '-' . $empresaId; if (empty($companyCfg['digigo_user_token'])) { $adminClient = new DigiGOClient($baseUrl, $adminToken); $userTokenValue = bin2hex(random_bytes(32)); $result = $adminClient->adminCreateUser($userName, $userTokenValue); $userToken = $result['user']['token'] ?? $result['user']['api_token'] ?? $result['data']['token'] ?? $result['data']['api_token'] ?? $result['data']['access_token'] ?? $result['token'] ?? $result['api_token'] ?? $result['access_token'] ?? $result['result']['token'] ?? $userTokenValue; $userNameResp = $result['user']['name'] ?? $result['data']['name'] ?? $result['name'] ?? $userName; $pdo->prepare("UPDATE configuracoes SET digigo_user_token=?, digigo_user_name=?, digigo_connected=0 WHERE empresa_id=?") ->execute([$userToken, $userNameResp, $empresaId]); $companyCfg['digigo_user_token'] = $userToken; } $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); // 1. Init session via connect, then get QR $pdo->prepare("UPDATE configuracoes SET digigo_connected=0 WHERE empresa_id=?")->execute([$empresaId]); $connectResp = null; try { $connectResp = $userClient->sessionConnect(); } catch (Exception $e) {} // 2. Get QR code $qrInit = null; try { $qrInit = $userClient->sessionQr(10); } catch (Exception $e) {} $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_connect_debug.json', json_encode(['connect' => $connectResp, 'qr_init' => $qrInit], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); $qrCodeInConnect = null; if (is_array($qrInit)) { $qrCodeInConnect = $qrInit['qrcode'] ?? $qrInit['QRCode'] ?? $qrInit['base64'] ?? $qrInit['image'] ?? $qrInit['data']['qrcode'] ?? $qrInit['data']['QRCode'] ?? $qrInit['data']['base64'] ?? $qrInit['data']['image'] ?? $qrInit['result']['qrcode'] ?? $qrInit['result']['QRCode'] ?? $qrInit['result']['base64'] ?? $qrInit['result']['image'] ?? null; } echo json_encode(['success' => true, 'data' => ['connect' => $connectResp, 'qr_init' => $qrInit], 'qr_inline' => $qrCodeInConnect]); exit; case 'finalize': if (empty($companyCfg['digigo_user_token'])) { throw new Exception('Usuario DigiGO nao criado'); } $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); $result = $userClient->sessionStatus(); $d = $result['data'] ?? $result; if (!empty($d['loggedIn'])) { $pdo->prepare("UPDATE configuracoes SET digigo_connected=1 WHERE empresa_id=?")->execute([$empresaId]); echo json_encode(['success' => true, 'connected' => true, 'data' => $result]); } else { $pdo->prepare("UPDATE configuracoes SET digigo_connected=0 WHERE empresa_id=?")->execute([$empresaId]); echo json_encode(['success' => true, 'connected' => false, 'error' => 'WhatsApp nao escaneou o QR ainda', 'data' => $result]); } exit; case 'qr': if (empty($companyCfg['digigo_user_token'])) { throw new Exception('Usuario DigiGO nao criado'); } $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); try { $result = $userClient->sessionQr(5); $inner = $result['data'] ?? $result; if (!empty($inner['loggedIn'])) { $pdo->prepare("UPDATE configuracoes SET digigo_connected=1 WHERE empresa_id=?")->execute([$empresaId]); } $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_qr_debug.json', json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); echo json_encode(['success' => true, 'data' => $result]); } catch (Exception $e) { echo json_encode(['success' => true, 'data' => ['timeout' => true, 'error' => $e->getMessage()]]); } exit; case 'status': if (empty($companyCfg['digigo_user_token'])) { echo json_encode(['success' => true, 'connected' => false, 'status' => 'not_created']); exit; } $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); $result = $userClient->sessionStatus(); $d = $result['data'] ?? $result; $loggedIn = !empty($d['loggedIn']); if ($loggedIn) { $pdo->prepare("UPDATE configuracoes SET digigo_connected=1 WHERE empresa_id=?")->execute([$empresaId]); } else { $pdo->prepare("UPDATE configuracoes SET digigo_connected=0 WHERE empresa_id=?")->execute([$empresaId]); } $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_status_debug.json', json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); echo json_encode(['success' => true, 'connected' => $loggedIn, 'jid' => $d['jid'] ?? '', 'data' => $result]); exit; case 'disconnect': if (empty($companyCfg['digigo_user_token'])) { throw new Exception('Usuario DigiGO nao criado'); } $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); try { $userClient->sessionDisconnect(); } catch (Exception $e) {} try { $adminClient = new DigiGOClient($baseUrl, $adminToken); $userName = $companyCfg['digigo_user_name'] ?: ''; if (!empty($userName)) { try { $adminClient->adminDeleteUser($userName); } catch (Exception $e1) { // Try alternative: DELETE /admin/users with body try { $adminClient->adminDeleteUserByName($userName); } catch (Exception $e2) { // Log both failures $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_delete_error.json', json_encode([ 'delete_by_url' => $e1->getMessage(), 'delete_by_body' => $e2->getMessage(), 'user_name' => $userName ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); } } } } catch (Exception $e) { $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_delete_error.json', json_encode(['error' => $e->getMessage(), 'user_name' => $userName ?? ''], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); } $pdo->prepare("UPDATE configuracoes SET digigo_user_token=NULL, digigo_user_name=NULL, digigo_connected=0 WHERE empresa_id=?")->execute([$empresaId]); echo json_encode(['success' => true]); exit; case 'test_send': if (empty($companyCfg['digigo_user_token'])) { throw new Exception('Usuario DigiGO nao criado'); } if (empty($companyCfg['digigo_connected'])) { throw new Exception('WhatsApp nao conectado'); } $to = $_POST['to'] ?? ''; if (empty($to)) { throw new Exception('Numero de destino obrigatorio'); } $text = $_POST['text'] ?? 'Mensagem de teste do sistema Barbearia Prime'; $userClient = new DigiGOClient($baseUrl, $companyCfg['digigo_user_token'], false); try { $userClient->sessionConnect(); $result = $userClient->sendText($to, $text); echo json_encode(['success' => true, 'data' => $result]); } catch (Exception $e) { $logDir = __DIR__ . '/../backup'; if (!is_dir($logDir)) @mkdir($logDir, 0755, true); file_put_contents($logDir . '/digigo_send_error.json', json_encode(['error' => $e->getMessage(), 'to' => $to, 'text' => $text], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); throw $e; } exit; case 'health': $testUrl = rtrim($globalCfg['digigo_base_url'] ?: '', '/'); if (empty($testUrl)) { echo json_encode(['success' => true, 'online' => false, 'configured' => false, 'error' => 'URL nao configurada']); exit; } $ch = curl_init($testUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_NOBODY => true, CURLOPT_SSL_VERIFYPEER => false, ]); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); echo json_encode(['success' => true, 'online' => empty($error) && $httpCode > 0, 'configured' => true, 'http_code' => $httpCode, 'error' => $error]); exit; default: throw new Exception('Acao invalida'); } } catch (Exception $e) { echo json_encode(['success' => false, 'error' => $e->getMessage()]); }