API PhGestor

Documentação Completa de Uso

© 2026 PhGestor - Todos os direitos reservados

← Voltar
Índice

Introdução

A API PhGestor permite integração com o sistema de gestão de clientes e produtos. Todas as requisições devem ser autenticadas com um token Bearer válido (exceto a autenticação inicial).

Características

Autenticação

Antes de usar qualquer outro endpoint, você deve se autenticar e obter um token.

POST /api.php?acao=autenticar

Autentica um cliente e retorna um token Bearer para uso nas próximas requisições.

Parâmetros (JSON Body)
Parâmetro Tipo Obrigatório Descrição
codigo Integer Sim Código do cliente no banco hospedado
senha String Sim Senha da API do cliente
Exemplos de Requisição
curl -X POST "http://localhost/api/api.php?acao=autenticar" \
  -H "Content-Type: application/json" \
  -d '{
    "codigo": 5,
    "senha": "3f853c53753588bd"
  }'
function autenticar(codigo, senha) {
    const url = 'http://localhost/api/api.php?acao=autenticar';

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            codigo: codigo,
            senha: senha
        })
    })
    .then(response => response.json())
    .then(data => {
        if (data.sucesso) {
            console.log('Token:', data.token);
            console.log('Cliente:', data.cliente.RAZAO);
            // Guardar token para próximas requisições
            localStorage.setItem('token', data.token);
        } else {
            console.error('Erro:', data.mensagem);
        }
    })
    .catch(error => console.error('Erro na requisição:', error));
}
$url = 'http://localhost/api/api.php?acao=autenticar';
$dados = array(
    'codigo' => 5,
    'senha' => '3f853c53753588bd'
);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dados));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json'
));

$response = curl_exec($ch);
$data = json_decode($response, true);

curl_close($ch);

if ($data['sucesso']) {
    echo 'Token: ' . $data['token'];
    echo 'Cliente: ' . $data['cliente']['RAZAO'];
} else {
    echo 'Erro: ' . $data['mensagem'];
}
Resposta de Sucesso (200)
{
    "sucesso": true,
    "token": "044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee",
    "cliente": {
        "CODIGO": 5,
        "RAZAO": "AUGUSTUS PHARMA LTDA"
    }
}
Resposta de Erro (401)
{
    "sucesso": false,
    "mensagem": "Cliente ou senha invalidos"
}

Buscar Cliente

Busca clientes no banco local por diversos critérios. Retorna todos os registros que correspondem ao critério.

GET /api.php?acao=buscar_cliente&tipo=...&valor=...
Parâmetros (Query String)
Parâmetro Tipo Obrigatório Descrição
tipo String Sim Campo para busca: codigo, nome, email, tele1, tele2, cpf
valor String Sim Valor a buscar (busca parcial com LIKE)
Headers Obrigatórios
Authorization: Bearer {token}
Exemplos de Requisição
curl -X GET "http://localhost/api/api.php?acao=buscar_cliente&tipo=nome&valor=ALUIZIO" \
  -H "Authorization: Bearer 044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee"
function buscarCliente(tipo, valor, token) {
    const url = 'http://localhost/api/api.php?acao=buscar_cliente&tipo=' + tipo + '&valor=' + encodeURIComponent(valor);

    fetch(url, {
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + token
        }
    })
    .then(response => response.json())
    .then(data => {
        if (data.sucesso) {
            console.log('Total encontrado:', data.total);
            console.log('Clientes:', data.clientes);
        } else {
            console.error('Erro:', data.mensagem);
        }
    })
    .catch(error => console.error('Erro na requisição:', error));
}
$token = '044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee';
$tipo = 'nome';
$valor = 'ALUIZIO';

$url = 'http://localhost/api/api.php?acao=buscar_cliente&tipo=' . $tipo . '&valor=' . urlencode($valor);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $token
));

$response = curl_exec($ch);
$data = json_decode($response, true);

curl_close($ch);

if ($data['sucesso']) {
    echo 'Total de clientes: ' . $data['total'];
    foreach ($data['clientes'] as $cliente) {
        echo $cliente['NOME'] . ' - ' . $cliente['TELE1'];
    }
} else {
    echo 'Erro: ' . $data['mensagem'];
}
Resposta de Sucesso (200)
{
    "sucesso": true,
    "total": 8,
    "clientes": [
        {
            "CODIGO": "1",
            "NOME": "ALUIZIO SILVA",
            "ENDERECO": "Rua A",
            "NUMERO": "123",
            "COMPLEMENTO": "Apt 10",
            "BAIRRO": "Centro",
            "CIDADE": "São Paulo",
            "CEP": "01310-100",
            "ESTADO": "SP",
            "TELE1": "1133334444",
            "TELE2": "11999998888",
            "INFO1": "email@example.com",
            "INFO2": "Observações"
        }
    ]
}

Buscar Produto

Busca produtos no banco local por descrição ou código. Retorna todos os registros que correspondem ao critério.

GET /api.php?acao=buscar_produto&tipo=...&valor=...
Parâmetros (Query String)
Parâmetro Tipo Obrigatório Descrição
tipo String Sim Campo para busca: descricao, codigo
valor String Sim Valor a buscar (busca parcial com LIKE)
Headers Obrigatórios
Authorization: Bearer {token}
Exemplos de Requisição
curl -X GET "http://localhost/api/api.php?acao=buscar_produto&tipo=descricao&valor=DIPIRONA" \
  -H "Authorization: Bearer 044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee"
function buscarProduto(tipo, valor, token) {
    const url = 'http://localhost/api/api.php?acao=buscar_produto&tipo=' + tipo + '&valor=' + encodeURIComponent(valor);

    fetch(url, {
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + token
        }
    })
    .then(response => response.json())
    .then(data => {
        if (data.sucesso) {
            console.log('Total encontrado:', data.total);
            data.produtos.forEach(produto => {
                console.log(produto.DESCRICAO + ' - R$ ' + produto.VENDA);
            });
        } else {
            console.error('Erro:', data.mensagem);
        }
    })
    .catch(error => console.error('Erro na requisição:', error));
}
$token = '044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee';
$tipo = 'descricao';
$valor = 'DIPIRONA';

$url = 'http://localhost/api/api.php?acao=buscar_produto&tipo=' . $tipo . '&valor=' . urlencode($valor);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $token
));

$response = curl_exec($ch);
$data = json_decode($response, true);

curl_close($ch);

if ($data['sucesso']) {
    echo 'Total de produtos: ' . $data['total'];
    foreach ($data['produtos'] as $produto) {
        echo $produto['DESCRICAO'] . ' - R$ ' . $produto['VENDA'];
    }
} else {
    echo 'Erro: ' . $data['mensagem'];
}
Resposta de Sucesso (200)
{
    "sucesso": true,
    "total": 3,
    "produtos": [
        {
            "CODIGO": "001",
            "DESCRICAO": "DIPIRONA 500MG",
            "VENDA": "15.50",
            "DESCONTO": "0.00",
            "DESCONTOLV": "0.00",
            "SALDO": "150",
            "VENCIMENTO": "2026-12-31",
            "GETIN_TRIBUTAVEL": "S"
        }
    ]
}

Listar Produtos

Lista todos os produtos do banco local (limitado a 100 registros).

GET /api.php?acao=listar_produtos
Headers Obrigatórios
Authorization: Bearer {token}
Exemplos de Requisição
curl -X GET "http://localhost/api/api.php?acao=listar_produtos" \
  -H "Authorization: Bearer 044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee"
function listarProdutos(token) {
    const url = 'http://localhost/api/api.php?acao=listar_produtos';

    fetch(url, {
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + token
        }
    })
    .then(response => response.json())
    .then(data => {
        if (data.sucesso) {
            console.log('Total de produtos:', data.total);
            data.produtos.forEach(produto => {
                console.log(produto.DESCRICAO + ' - R$ ' + produto.PRECO);
            });
        } else {
            console.error('Erro:', data.mensagem);
        }
    })
    .catch(error => console.error('Erro na requisição:', error));
}
$token = '044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee';
$url = 'http://localhost/api/api.php?acao=listar_produtos';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $token
));

$response = curl_exec($ch);
$data = json_decode($response, true);

curl_close($ch);

if ($data['sucesso']) {
    echo 'Total de produtos: ' . $data['total'];
    foreach ($data['produtos'] as $produto) {
        echo $produto['DESCRICAO'] . ' - R$ ' . $produto['PRECO'];
    }
} else {
    echo 'Erro: ' . $data['mensagem'];
}
Resposta de Sucesso (200)
{
    "sucesso": true,
    "total": 45,
    "produtos": [
        {
            "CODIGO": "001",
            "DESCRICAO": "PRODUTO A",
            "PRECO": "10.50"
        }
    ]
}

Rate Limiting

A API implementa Rate Limiting para proteger contra abuso. Cada cliente pode fazer até 100 requisições por hora.

Headers de Rate Limit

Toda resposta inclui headers informativos:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1698765432
Resposta ao Exceder Limite (429)
{
    "sucesso": false,
    "mensagem": "Limite de requisicoes excedido",
    "requisicoes_usadas": 101,
    "limite": 100,
    "reset_em_segundos": 3456
}

Códigos de Erro

Código HTTP Descrição Exemplo
200 Requisição bem-sucedida Dados retornados com sucesso
400 Requisição inválida Parâmetros obrigatórios faltando
401 Não autorizado Token inválido ou expirado
404 Não encontrado Cliente ou produto não encontrado
405 Método não permitido Método HTTP não suportado
429 Muitas requisições Limite de requisições excedido
500 Erro no servidor Erro de banco de dados ou servidor

Notas Importantes