Este documento descreve como a API do SUAP (Sistema Unificado de Administração Pública) é utilizada no projeto SUPACO. As informações aqui contidas foram inferidas a partir da análise do código-fonte do projeto.
A URL base para todas as chamadas da API v2 do SUAP é:
https://suap.ifrn.edu.br/api/v2/
Isso é definido na constante SUAP_URL (em config.php) e concatenado com /api/v2/ nas funções que realizam as chamadas.
O projeto utiliza o fluxo de autorização OAuth2 para autenticar usuários e obter acesso aos dados da API.
-
Redirecionamento para Autorização:
- O usuário é redirecionado para a URL de autorização do SUAP:
https://suap.ifrn.edu.br/o/authorize/?response_type=code&client_id=[SEU_CLIENT_ID]&redirect_uri=[SUA_REDIRECT_URI] [SEU_CLIENT_ID]é o ID do cliente da sua aplicação registrada no SUAP (definido comoSUAP_CLIENT_IDemconfig.php).[SUA_REDIRECT_URI]é a URI para a qual o SUAP redirecionará o usuário após a autorização (definida comoREDIRECT_URIemconfig.php, por exemplo,http://localhost/SUAP/callback.php).- Este passo é iniciado em
login.php.
- O usuário é redirecionado para a URL de autorização do SUAP:
-
Obtenção do Código de Autorização:
- Após o usuário autorizar a aplicação, o SUAP redireciona de volta para a
REDIRECT_URIcom um parâmetrocodena URL.
- Após o usuário autorizar a aplicação, o SUAP redireciona de volta para a
-
Troca do Código pelo Token de Acesso:
- O script em
callback.phprecebe ocode. - Uma requisição POST é feita para o endpoint de token do SUAP:
POST https://suap.ifrn.edu.br/o/token/ - Corpo da Requisição (form-urlencoded):
grant_type: "authorization_code"code: O código recebido no passo anterior.redirect_uri: A mesmaREDIRECT_URIusada no passo 1.client_id: SeuSUAP_CLIENT_ID.client_secret: SeuSUAP_CLIENT_SECRET(definido emconfig.php).
- Resposta Esperada (JSON):
{ "access_token": "SEU_ACCESS_TOKEN", "expires_in": 36000, "token_type": "Bearer", "scope": "read write", "refresh_token": "SEU_REFRESH_TOKEN" } - O
access_token,refresh_tokene o tempo de expiração (access_token_expires, calculado a partir deexpires_in) são armazenados na sessão do usuário.
- O script em
-
Obtenção de Dados do Usuário (Opcional, mas feito no callback):
- Imediatamente após obter o token,
callback.phpfaz uma requisição GET para:GET https://suap.ifrn.edu.br/api/v2/minhas-informacoes/meus-dados/- Header de Autorização:
Authorization: Bearer [ACCESS_TOKEN]
- Header de Autorização:
- Os dados do usuário (como ID, matrícula, nome) são armazenados na sessão.
- Imediatamente após obter o token,
O projeto armazena o refresh_token na sessão, mas a lógica para utilizá-lo para obter um novo access_token quando o atual expira não está explicitamente detalhada nos trechos de código analisados para esta documentação (embora index.php verifique a expiração do token). Geralmente, o fluxo de refresh token envolve uma requisição POST para https://suap.ifrn.edu.br/o/token/ com:
grant_type: "refresh_token"refresh_token: Orefresh_tokenarmazenado.client_id: SeuSUAP_CLIENT_ID.client_secret: SeuSUAP_CLIENT_SECRET.
As seguintes rotas da API do SUAP são consumidas pelo projeto:
- Endpoint:
minhas-informacoes/meus-dados/ - Método:
GET - Descrição: Retorna dados cadastrais do usuário autenticado.
- Utilizado em:
callback.php(após obter o token) e potencialmente emindex.phpatravés degetSuapData.
- Endpoint:
meu-diario/boletim/[ano_letivo]/[periodo_letivo]/ - Método:
GET - Descrição: Retorna o boletim do aluno para um ano e período letivo específico.
[ano_letivo]: Ano letivo (ex: 2023).[periodo_letivo]: Período letivo (ex: 1 ou 2).
- Utilizado em:
index.phpatravés da funçãogetSuapData.
- Endpoint:
meu-diario/horario/[ano_letivo]/[periodo_letivo]/ - Método:
GET - Descrição: Retorna o horário de aulas do aluno para um ano e período letivo específico.
[ano_letivo]: Ano letivo.[periodo_letivo]: Período letivo.
- Utilizado em:
index.phpatravés da funçãogetSuapData.
-
Endpoint:
meu-diario/turmas-virtuais/ -
Método:
GET -
Descrição: Lista as turmas virtuais do aluno.
-
Utilizado em:
index.phpatravés da funçãogetSuapData. -
Endpoint:
meu-diario/turmas-virtuais/[id_turma]/ -
Método:
GET -
Descrição: Retorna detalhes de uma turma virtual específica.
[id_turma]: ID da turma virtual.
-
Utilizado em:
index.phpatravés da funçãogetSuapData.
As requisições para a API do SUAP, após a obtenção do access_token, são feitas utilizando cURL em PHP. As funções getSuapData (em index.php) e suap_request (em api_utils.php) encapsulam essa lógica.
<?php
session_start(); // Necessário para acessar o token da sessão
function getSuapData($endpoint) {
if (!isset($_SESSION['access_token'])) {
// Tratar erro: usuário não autenticado ou token não disponível
return null;
}
$token = $_SESSION['access_token'];
$suap_url_base = 'https://suap.ifrn.edu.br/api/v2/'; // Conforme definido em config.php e usado nas chamadas
$url = $suap_url_base . $endpoint;
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . $token,
"Accept: application/json" // É uma boa prática especificar o Accept header
],
// CURLOPT_VERBOSE => true, // Útil para debug
// CURLOPT_SSL_VERIFYPEER => false, // Apenas para desenvolvimento local, se necessário
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_error = curl_error($ch);
curl_close($ch);
if ($curl_error) {
error_log("Erro cURL ao acessar SUAP: " . $curl_error);
return null; // Ou lançar uma exceção
}
if ($http_code >= 200 && $http_code < 300) {
return json_decode($response, true);
} else {
error_log("Erro na API SUAP (HTTP {$http_code}): " . $response);
// Tratar diferentes códigos de erro (ex: 401 Unauthorized para token expirado)
return null; // Ou lançar uma exceção
}
}
// Exemplo de uso:
// $dadosUsuario = getSuapData("minhas-informacoes/meus-dados/");
// $boletim = getSuapData("meu-diario/boletim/2023/1/");
?>- Token de Acesso: Todas as requisições aos endpoints protegidos devem incluir o
access_tokenno headerAuthorizationcomo um "Bearer token". - Tratamento de Erros: É crucial verificar o código de status HTTP da resposta e tratar possíveis erros, como token expirado (
401 Unauthorized), permissões insuficientes (403 Forbidden), ou recurso não encontrado (404 Not Found). - Escopo do Token: O
access_tokenobtido pode ter escopos limitados, permitindo acesso apenas a certos endpoints ou operações. - Rate Limiting: APIs públicas geralmente implementam limites de taxa (rate limiting). Embora não detalhado no código, é uma consideração comum ao integrar com APIs.
Este documento serve como um guia inicial baseado no uso da API do SUAP pelo projeto SUPACO. Para informações completas e oficiais, consulte a documentação oficial da API do SUAP, se disponível.