Integração API de Notas Destinadas com Delphi

Boa tarde pessoal,

Estou fazendo integração da API de Notas Destinadas com a linguagem Delphi (versão Seattle) mas estou com problemas pra passar um array num parâmetro, alguém passou por isso?

Componentes Delphi: RESTClient, RESTRequest

URL https://api.nfe.tecnospeed.com.br/destinadas/v1/protocolos

Estou com problemas pra passar o comando abaixo no body:

{
“periodo”: {
“dataInicial”: “2020-09-01”,
“dataFinal”: “2020-09-30”
}

No meu componente vem nesse formato abaixo mas exibe o erro: “{“erro”:{“mensagem”:“É necessário informar um período ou um array de chaves de NFe para realizara busca.”}}”

‘{“periodo”:[{“dataInicial”:“2021-02-01”,“dataFinal”:“2021-02-28”}]}’}

Alguém tem alguma idea?

1 Curtida

Bom dia Michele,
Tudo bem?

Conforme conversamos, estarei gerando um exempli certinho desse consumo da API no Delphi e te mando assim que concluir e também já anexo aqui também o exemplo do request pra ficar registrado certinho.

Atenciosamente,
João Thiago Silva Costa

1 Curtida

Boa noite Michele,

Tudo bem?? Só pra já adiantar ai pra ti, vou colocar o método da adição de consulta e a tratativa que estou usando para ler o retorno aqui embaixo. Na segunda-feira te passo o projeto inteiro.

procedure TForm1.LerRetorno;
var
I : Integer;
begin
mmoRetorno1.Lines.Clear;
mmoRetornoTratado.Lines.Clear;

if Assigned(APIResponse.JSONValue) then
begin
mmoRetorno1.Lines.Text := APIResponse.JSONValue.ToString;

fdmTbResponse.Open;
fdmTbResponse.First;

while not fdmTbResponse.Eof do
begin
  for I := 0 to fdmTbResponse.FieldCount - 1 do
  begin
    mmoRetornoTratado.Lines.Add(fdmTbResponse.Fields[I].FieldName + ' = ' + fdmTbResponse.Fields[I].AsString);

    if fdmTbResponse.Fields[I].FieldName = 'id' then
      edtProtocolo.Text := fdmTbResponse.Fields[I].AsString;
  end;

  fdmTbResponse.Next;
end;

end
else
begin
if APIResponse.StatusCode = 200 then
mmoRetorno1.Lines.Text := 'Sucesso status: ’ + IntToStr(APIResponse.StatusCode)
else
mmoRetorno1.Lines.Text := 'Error: ’ + IntToStr(APIResponse.StatusCode);
end;
end;

procedure TForm1.btnAdcConsultaClick(Sender: TObject);
var
jsBody: TJSONobject;

procedure GerarJSON;
var
jsPeriodo: TJSONobject;
jsChaves : TJSONArray;
begin
jsBody := TJSONobject.Create;
jsPeriodo := TJSONobject.Create;
jsChaves := TJSONArray.Create;

if rgConsulta.ItemIndex = 0 then
begin
  jsPeriodo.AddPair('dataInicial', FormatDateTime('yyyy-mm-dd', dtpDtInicio.Date));
  jsPeriodo.AddPair('dataFinal', FormatDateTime('yyyy-mm-dd', dtpDtFinal.Date));
  jsBody.AddPair(TJSONPair.Create('periodo', jsPeriodo));
end
else
begin
  jsChaves.Add(edtChaveNFe.Text);
  jsBody.AddPair(TJSONPair.Create('nfeChaves', jsChaves));
end;

end;
begin
APINFeDest.Accept := ‘application/json, text/plain; q=0.9, text/html;q=0.8,’;
APINFeDest.AcceptCharset := ‘utf-8, *;q=0.8’;
APINFeDest.ContentType := ‘application/json’;

APIRequest.Params.Clear;
APIRequest.ClearBody;

APIRequest.Params.AddHeader(‘token_sh’, edtToken.Text);
APIRequest.Params.AddHeader(‘cpfCnpjSoftwareHouse’, edtCNPJSH.Text);
APIRequest.Params.AddHeader(‘cpfCnpjDestinatario’, edtCNPJDest.Text);

APIRequest.AddParameter(‘Content-Type’, ‘application/json’, TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);

GerarJSON;
APIRequest.Params.AddBody(jsBody.ToString, ctAPPLICATION_JSON);

APIRequest.Resource := ‘protocolos’;
APIRequest.Method := rmPOST;
APIRequest.Execute;

LerRetorno;
end;

Atenciosamente,

João Thiago Silva Costa