Exemplo de Consulta de Produto Com PHSYS API

Revisão de 10h06min de 15 de dezembro de 2025 por Endrio.korb (discussão | contribs) (Criou página com '==='''Introdução'''=== Imagine que você queira consultar informações de produtos cadastrados no PHERP a partir de outro sistema, aplicativo ou integração externa. Para...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Introdução

Imagine que você queira consultar informações de produtos cadastrados no PHERP a partir de outro sistema, aplicativo ou integração externa. Para isso, você pode criar um Script Específico e configurá-lo nos parâmetros de um endpoint na PHSYS API.

O exemplo abaixo, chamado C_ConsultarProdutos, demonstra justamente como esse processo funciona: recebendo dados em JSON, interpretando os códigos enviados, realizando a consulta no cadastro de produtos e retornando as informações encontradas ao cliente em formato JSON.

Modelo de Integração Personalizado

Este endpoint executa diretamente o procedimento interno C_ConsultarProdutos, onde o desenvolvedor implementa o tratamento da requisição. O body já deve conter exclusivamente os dados esperados pelo procedimento, uma vez que o endpoint sabe previamente qual método será executado.

No processamento interno:

  • O sistema lê o JSON enviado.
  • Percorre a lista de produtos informados.
  • Consulta os dados no cadastro de produtos.
  • Monta o JSON de retorno dinamicamente.
  • Retorna as informações encontradas.

Parâmetros fixos podem ser definidos no cadastro do endpoint e serão enviados automaticamente ao procedimento.

Modelo Integração

Imagem do modelo de integração

Parâmetros

Imagem dos parâmetros de integração

Como Realizar a Requisição

A chamada ao endpoint C_ConsultarProdutos deve ser realizada utilizando o método HTTP POST, enviando o conteúdo em formato JSON no corpo da requisição (body).

Cabeçalhos Necessários

A requisição deve incluir o seguinte cabeçalho:

Content-Type: application/json

Esse cabeçalho informa ao servidor que o conteúdo enviado é um JSON válido.

Estrutura da Requisição

A URL deve seguir o padrão:

http://<servidor>:<porta>/api/C_ConsultarProdutos

Exemplo típico:

http://localhost:211/api/C_ConsultarProdutos

Corpo da Requisição (Body)

O body deve conter uma lista de produtos a serem consultados. Cada item da lista deve conter o código do produto.

Exemplo:

{
  "Protudos": [
    { "Codigo": "5" },
    { "Codigo": "30" }
  ]
}

Exemplo de Envio utilizando Curl

curl -X POST "http://localhost:211/api/C_ConsultarProdutos" ^
     -H "Content-Type: application/json" ^
     -d "{
           \"Protudos\": [
             { \"Codigo\": \"5\" },
             { \"Codigo\": \"30\" }
           ]
         }"

Resposta da Requisição

O retorno é definido pelo parâmetro:

ParamByName('Result').AsString := <JSON de retorno>;

Exemplo de Resposta

{
  "Produtos": [
    {
      "NOME": "Mouse",
      "LARGURA": "10",
      "COMPRIMENTO": "15"
    }
  ]
}

Exemplo de Script

procedure C_ConsultarProdutos;
var
  Q:TPHQuery;
  TextJson:String;
  JsonObj: TPHJson;
  I: Integer;  
begin
  JsonObj := TPHJson.Create;                                              
  try
    JsonObj.LerJson(GetBody);

    Q := NewPHQuery;
    try      
      for I := 0 to JsonObj.ElementoDoNome('Protudos').Count - 1 do
      begin
        Q.Clear;                  
        Q.Add('SELECT NOME, '+
              '       LARGURA, '+
              '       COMPRIMENTO ' +
              'FROM PRODUTOS ' +
              'WHERE CODIGO = :COD');        
        Q.ParamByName('COD').AsInteger :=
          StrToInt(JsonObj.ElementoDoNome('Protudos')
                   .Linha(I)
                   .ElementoDoNome('Codigo')
                   .Texto);                                   
        Q.Open;

        if not (Q.Vazia) then
        begin
          if (TextJSON <> '') then
            TextJSON := TextJSON + ', ';

          TextJSON := TextJSON + '{ ' + 
                      '"NOME" : "' + Q.FieldByName('NOME').AsString + '",' +
                      '"LARGURA" : "' + Q.FieldByName('LARGURA').AsString + '",' +
                      '"COMPRIMENTO" : "' + Q.FieldByName('COMPRIMENTO').AsString + '"' +
                      '}';
        end;
      end;

      ParamByName('Result').AsString :=
        '{ "Produtos": [' + TextJSON + '] }';      
    finally
      Q.Free;
    end;              
  finally
    JsonObj.Free;    
  end;          
end;