0, 'falha' => 0, 'sem' => 0]; function chama($metodo, $caminho, $corpo = null) { global $BASE, $CHAVE, $cont; $ch = curl_init($BASE . $caminho); curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => $metodo, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_USERAGENT => 'HotelDasLojas-Teste/1.0 (php)', CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $CHAVE, 'Content-Type: application/json']]); if ($corpo !== null) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($corpo)); } $t0 = microtime(true); $txt = curl_exec($ch); $st = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $ms = (int) ((microtime(true) - $t0) * 1000); $d = json_decode((string) $txt, true) ?: []; $linha = sprintf('%-5s %-36s %s', $metodo, $caminho, $st); if ($st >= 200 && $st < 300) { $cont['ok']++; printf(" ✔ %s %5d ms\n", $linha, $ms); return $d['dados'] ?? null; } if ($st == 403) { $cont['sem']++; echo " – $linha sem permissão\n"; } else { $cont['falha']++; echo " ✘ $linha " . ($d['erro']['codigo'] ?? '') . ': ' . ($d['erro']['mensagem'] ?? '') . "\n"; } return null; } $primeiro = function ($d) { return is_array($d) && isset($d[0]) ? $d[0] : $d; }; echo "API do Hotel das Lojas · $BASE\n\n"; if ($loja = chama('GET', '/loja')) { echo " Loja: {$loja['nome']} ({$loja['url']})\n"; } if ($p = $primeiro(chama('GET', '/produtos?por_pagina=5'))) { chama('GET', "/produtos/{$p['id']}"); chama('GET', "/produtos/{$p['id']}/estoque"); chama('GET', "/produtos/{$p['id']}/imagens"); } chama('GET', '/categorias'); if ($ped = $primeiro(chama('GET', '/pedidos?por_pagina=5'))) { chama('GET', "/pedidos/{$ped['id']}"); } chama('GET', '/clientes?por_pagina=5'); chama('GET', '/cupons'); chama('GET', '/webhooks'); foreach (['/frete/faixas-cep', '/promocoes', '/avaliacoes?por_pagina=5', '/blog', '/cartoes-presente', '/relatorios/resumo'] as $r) { chama('GET', $r); } if ($escrita) { echo "\nEscrita (produto oculto de teste):\n"; if ($cat = chama('POST', '/categorias', ['nome' => 'Teste da API', 'visivel' => false])) { if ($np = chama('POST', '/produtos', ['nome' => 'Produto de teste da API', 'preco' => 10, 'categoria_id' => $cat['id'], 'visivel' => false, 'estoque' => ['controlado' => true, 'quantidade' => 5]])) { chama('PUT', "/produtos/{$np['id']}/estoque", ['operacao' => 'somar', 'quantidade' => 3, 'motivo' => 'teste da API']); chama('PATCH', "/produtos/{$np['id']}", ['ativo' => false]); } chama('PATCH', "/categorias/{$cat['id']}", ['ativo' => false]); } } printf("\n%d ok · %d falhas · %d sem permissão\n", $cont['ok'], $cont['falha'], $cont['sem']); exit($cont['falha'] ? 1 : 0);