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);
}