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).
http://localhost/api/api.php
Antes de usar qualquer outro endpoint, você deve se autenticar e obter um token.
Autentica um cliente e retorna um token Bearer para uso nas próximas requisições.
| 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 |
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'];
}
{
"sucesso": true,
"token": "044f98afb667df221372fe0f6973021902ed65deb63d68faf7b6e325486728ee",
"cliente": {
"CODIGO": 5,
"RAZAO": "AUGUSTUS PHARMA LTDA"
}
}
{
"sucesso": false,
"mensagem": "Cliente ou senha invalidos"
}
Busca clientes no banco local por diversos critérios. Retorna todos os registros que correspondem ao critério.
| 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) |
Authorization: Bearer {token}
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'];
}
{
"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"
}
]
}
Busca produtos no banco local por descrição ou código. Retorna todos os registros que correspondem ao critério.
| 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) |
Authorization: Bearer {token}
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'];
}
{
"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"
}
]
}
Lista todos os produtos do banco local (limitado a 100 registros).
Authorization: Bearer {token}
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'];
}
{
"sucesso": true,
"total": 45,
"produtos": [
{
"CODIGO": "001",
"DESCRICAO": "PRODUTO A",
"PRECO": "10.50"
}
]
}
A API implementa Rate Limiting para proteger contra abuso. Cada cliente pode fazer até 100 requisições por hora.
Toda resposta inclui headers informativos:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1698765432
{
"sucesso": false,
"mensagem": "Limite de requisicoes excedido",
"requisicoes_usadas": 101,
"limite": 100,
"reset_em_segundos": 3456
}
| 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 |