HEX
Server: Apache
System: Linux vpshost11508.publiccloud.com.br 5.15.179-grsec-vpshost-10.lc.el8.x86_64 #1 SMP Mon Apr 7 12:04:45 -03 2025 x86_64
User: wicomm2 (10002)
PHP: 8.3.0
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //home/wicomm2/public_html_backup/clientes/dashboard/api.php
<?php
header('Content-Type: application/json');

// Função para buscar pedidos de uma conta específica na VTEX
function fetchOrders($account, $environment, $filters, $appKey, $appToken)
{
    $baseUrl = "https://$account.$environment.com.br/api/oms/pvt/orders";
    $orders = []; // Armazena todos os pedidos
    $page = 1;    // Página inicial
    $hasMorePages = true; // Flag para continuar o loop

    // Configuração dos headers de autenticação
    $headers = [
        "X-VTEX-API-AppKey: $appKey",
        "X-VTEX-API-AppToken: $appToken",
    ];

    // Loop para percorrer todas as páginas
    while ($hasMorePages) {
        $url = "$baseUrl?_stats=1&page=$page";

        // Adiciona filtros de data
        if (!empty($filters['startDate']) && !empty($filters['endDate'])) {
            $startDate = DateTime::createFromFormat('Y-m-d', $filters['startDate']);
            $endDate = DateTime::createFromFormat('Y-m-d', $filters['endDate']);

            if ($startDate && $endDate) {
                $startDateFormatted = $startDate->format('Y-m-d\TH:i:s\Z');
                $endDateFormatted = $endDate->format('Y-m-d\TH:i:s\Z');
                $url .= "&f_creationDate=creationDate:[{$startDateFormatted}+TO+{$endDateFormatted}]";
            }
        } elseif (!empty($filters['range'])) {
            // Calcula a data de início com base no range
            $now = new DateTime('now', new DateTimeZone('UTC'));
            $startDate = clone $now;
            $startDate->modify("-{$filters['range']} days");
            $endDate = $now;

            $startDateFormatted = $startDate->format('Y-m-d\TH:i:s\Z');
            $endDateFormatted = $endDate->format('Y-m-d\TH:i:s\Z');

            $url .= "&f_creationDate=creationDate:[{$startDateFormatted}+TO+{$endDateFormatted}]";
        }

        // Requisição usando cURL
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            error_log("Erro na requisição: Código HTTP {$httpCode}");
            break; // Sai do loop em caso de erro
        }

        $data = json_decode($response, true);

        if (isset($data['list'])) {
            $orders = array_merge($orders, $data['list']); // Adiciona os pedidos à lista
        }

        // Verifica se há mais páginas
        if (isset($data['paging']['pages'])) {
            $hasMorePages = $page < $data['paging']['pages']; // Continua se não for a última página
        } else {
            $hasMorePages = false; // Interrompe o loop se não houver informação de páginas
        }

        error_log("Página {$page} carregada. Total de pedidos até agora: " . count($orders));
        $page++; // Incrementa para a próxima página
    }

    error_log("Total final de pedidos carregados para {$account}: " . count($orders));
    return $orders;
}


// Rota para obter os dados
if ($_GET['action'] === 'getData') {
    $filters = json_decode($_GET['filters'], true);

    // Configuração das contas com suas respectivas credenciais
    $accounts = [
        'amakha' => [
            'environment' => 'vtexcommercestable',
            'appKey' => 'vtexappkey-amakha-UPXQDT',
            'appToken' => 'XTVOHWWRKTJHISGQWTSNEYFRJDURMKWYRRYNNKNFFXMQIUZHPFXREWLTLBICVHLTFGAFCBONPXEEDLDBDZCFTLPHJMPQDFJNFSSUSIBMZZDCCPHKMLNTAPIYFWNIJOHT',
        ],
        'dutycosmeticos' => [
            'environment' => 'vtexcommercestable',
            'appKey' => 'vtexappkey-dutycosmeticos-BJCPOP',
            'appToken' => 'JNGKHIYNWYZNOMATQIDDGFWGEVNWVWXYWPDDJCXMBEOIOFURCCWVYSKJCZHACFMWSZUCMOUSWIGVOPEHEZAHFHZUMVTGTWZHXNFPBBHBGGPZUCALBJQHMCJQIFLRDOQW',
        ],
        'agrobill' => [
            'environment' => 'vtexcommercestable',
            'appKey' => 'vtexappkey-agrobill-RYTDZG',
            'appToken' => 'TVONGJWVOAVISOICXJHIQUOLIHVPNQOSUOUGXDQZPGHVGZXVDQFVDKIHFBCHRTMMPRJOXPXWDLOZSMXVQDYSPOYSJBYWHTRUPHDHBYMOSVCKUPSZFGLGCTZMFWDPDFSO',
        ],
        'makaibikini' => [
            'environment' => 'vtexcommercestable',
            'appKey' => 'vtexappkey-makaibikini-NBWMGH',
            'appToken' => 'GDAQHVHHCQSTEUMCNTAZOWCFOPGMKYNEIDDVGEQRTTCLBRMCCHBHZPQIMDMIWIDKXVUGJEQHQSNNQMWFCUGGLDMYWVOFJDTLQVGKDLQESOCBUEKENIDXWGFAEDMCZVXG',
        ],
        'toymania' => [
            'environment' => 'vtexcommercestable',
            'appKey' => 'vtexappkey-toymania-EXMZZU',
            'appToken' => 'JHVNJNFMRKAZJSJCAPVKFJHARDVCINPFEDQGXIJNNQBQYIIPDAZZUTPSPLLIMRZRZFOZPBPRRJPIPHYHVXWOWEMAGHSMJBLNMXPHEYZNZGSKEHRFVMQISOBTBKIBKKFI',
        ]
    ];

    $results = [];

    // Itera sobre todas as contas para buscar os pedidos
    foreach ($accounts as $accountName => $config) {
        $orders = fetchOrders(
            $accountName,
            $config['environment'],
            $filters,
            $config['appKey'],
            $config['appToken']
        );

        $totalRevenue = 0;
        $totalTransactions = count($orders);
        $paymentMethods = [];
        $campaigns = [];

        foreach ($orders as $order) {
            // Soma o valor total dos pedidos
            if (isset($order['totalValue'])) {
                $totalRevenue += $order['totalValue'] / 100; // VTEX retorna em centavos
            }

            // Conta os métodos de pagamento
            if (!empty($order['paymentNames'])) {
                $payment = $order['paymentNames'];
                if (!isset($paymentMethods[$payment])) {
                    $paymentMethods[$payment] = 0;
                }
                $paymentMethods[$payment]++;
            }

            // Extração de campanhas/promos
            if (!empty($order['marketingData']['utmCampaign'])) {
                $campaign = $order['marketingData']['utmCampaign'];
                if (!isset($campaigns[$campaign])) {
                    $campaigns[$campaign] = 0;
                }
                $campaigns[$campaign]++;
            }
        }

        // Determina o meio de pagamento mais utilizado
        if (!empty($paymentMethods)) {
            $mostUsedPayment = array_keys($paymentMethods, max($paymentMethods))[0];
        } else {
            $mostUsedPayment = 'N/A'; // Valor padrão caso nenhum pagamento seja encontrado
        }

        // Prepara o resultado para esta conta
        $results[] = [
            'account' => $accountName,
            'totalRevenue' => number_format($totalRevenue, 2, '.', ''),
            'totalTransactions' => $totalTransactions,
            'mostUsedPayment' => $mostUsedPayment,
            'chartData' => [
                'labels' => ['Total Faturamento'],
                'values' => [$totalRevenue]
            ],
            'campaigns' => array_map(function ($key, $value) {
                return ['promotion' => $key, 'count' => $value];
            }, array_keys($campaigns), $campaigns),
        ];
    }

    echo json_encode($results);
}