Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 2116 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá amigos,

Estou fazendo a integração do meu ERP com a Api da Onvio (Domínio) pelo Delphi 10, mas estou com dificuldade de enviar o xml para a Api. Precisa ser enviado dois parâmetros no body que é o arquivo e a query e como estou utilizando o IdHTTP não sei como informar eles em conjunto.  Hoje da forma que eu envio da retorno de erro "HTTP 415 Unsupported Media Type";

function TfrmIntOnvio.EnviarArquivosApi:Boolean;
    var F: TSearchRec;
    Ret: Integer;
    Auth : TNetHeaders;
    Caminho, Arquivo : String;
    Resultado: TStringStream;
    xReqBody: TStringStream;
    ArqOnvio: TIdMultiPartFormDataStream;
    Arq: TStringStream;
    begin
   try
      Caminho := edtUrlInt.Text;
      ArqOnvio := TIdMultiPartFormDataStream.Create;
      Auth := [TNetHeader.Create('Authorization', 'Bearer ' + access_token)];
      Ret := FindFirst(PastaLocal+'\*.xml', faAnyFile, F);
      while Ret = 0 do
      begin
        if (F.Name <> '.') And (F.Name <> '..') then
        begin
          Arquivo := verificaCaminho(PastaLocal) + F.Name;

          Arq := TStringStream.Create('file[]=' + Arquivo + '&'
                                    + 'query={"boxe/File": true};application/json',TEncoding.UTF8);
          Resultado := TStringStream.Create('', TEncoding.UTF8);
          DMAPI.httpApi.Post(Caminho, Arq, Resultado, Auth);
          mmoInfo.Lines.add('Arquivo Enviado ' + Resultado.DataString);
          Application.ProcessMessages;
       end;
       Ret := FindNext(F);
    end;
    except
     on e: Exception do
       showmessage(e.Message);
     end;
   end;

Na imagem tem exemplo funcional no postmam que pessoal do suporte da Api me enviou.

 

Formato_Valido.jpg

  • Consultores
Postado

porque não está usando o restclient?

tem documentação ou link para entender?

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado

Com restclient vai funcionar e não precisa ficar sofrendo

só se estiver usando uma versão antiga do delphi dai a história é outra

 

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado

Estou usando o delphi 10.2 a principio é versão recente.

Fiz as mudanças para RestClient mas tenho uma duvida ainda como devo informar o valor da query. Tentei da forma que esta o código agora  e antes com as linhas que estão comentadas e nas duas situações retorna o erro 500, que pela documentação seria "Unexpected error on server.". Porem pelo postman se eu desmarca o file ou query também da erro 500, por isso acredito que forma que estou informando o body que não esteja correto.

try
    Caminho := edtUrlInt.Text;

    DMAPI.RESTClient.BaseURL     := Caminho;
    DMAPI.RESTClient.ContentType := 'multipart/form-data';
    DMAPI.RESTRequest.Client     := DMAPI.restClient;
    DMAPI.RESTRequest.Method     := rmPOST;
    DMAPI.RESTRequest.Response   := DMAPI.RESTResponse;
    DMAPI.RESTRequest.Params.AddHeader('Authorization', 'Bearer ' + access_token);
    DMAPI.RESTRequest.Params.ParameterByName('Authorization').Options := [poDoNotEncode];


    Ret := FindFirst(PastaLocal+'\*.xml', faAnyFile, F);
    while Ret = 0 do
    begin
       if (F.Name <> '.') And (F.Name <> '..') then
       begin
          Arquivo := verificaCaminho(PastaLocal) + F.Name;

          //DMAPI.RESTRequest.AddFile('file[]', arquivo, TRESTContentType.ctAPPLICATION_ATOM_XML);
          //DMAPI.RESTRequest.AddBody('query={"boxeFile":true}', TRESTContentType.ctAPPLICATION_JSON);

          DMAPI.RESTRequest.Params.AddItem;
          DMAPI.RESTRequest.Params.Items[1].name  := 'file[]';
          DMAPI.RESTRequest.Params.Items[1].Value := Arquivo;
          DMAPI.RESTRequest.Params.Items[1].ContentType := ctAPPLICATION_XML;
          DMAPI.RESTRequest.Params.Items[1].Kind  := TRESTRequestParameterKind.pkREQUESTBODY;

          DMAPI.RESTRequest.Params.AddItem;
          DMAPI.RESTRequest.Params.Items[2].name  := 'query';
          DMAPI.RESTRequest.Params.Items[2].Value := '{"boxe/File": true}';
          DMAPI.RESTRequest.Params.Items[2].ContentType := ctAPPLICATION_JSON;
          DMAPI.RESTRequest.Params.Items[2].Kind  := TRESTRequestParameterKind.pkREQUESTBODY;

          DMAPI.restRequest.Execute();

          if(DMAPI.RESTResponse.StatusCode = 201)then
          begin
            mmoInfo.Lines.add('Arquivo Enviado ' + DMAPI.RESTResponse.Content);
            Application.ProcessMessages;
          end
          else
          begin
             mmoInfo.Lines.add('Falha ao enviar o arquivo ' + DMAPI.RESTResponse.Content);
             Application.ProcessMessages;
          end;
       end;

       Ret := FindNext(F);
    end;
  except
  on e: Exception do
     showmessage(e.Message);
  end;

 

Postado

Cara, eu também estou tentando fazer essa parte da implementação dessa API durante essa semana, e a mesma coisa, sempre tenho o retorno 500. Já testei com Indy, RestClient, e outros componentes como o ICS.

Nada funciona, apenas ao testar pelo Postman. :(

Postado

Configuração para o Indy:

Params := TIdMultiPartFormDataStream.Create;

Params.AddFile('file[]', 'C:\Desenvolvimento\Teste_Indy\31200305405941000129550010008979891610757381-nfe.xml', 'application/xml');
Params.AddFormField('query', '{"boxe/File":true}', 'UTF-8', 'application/json');

IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + token;
IdHTTP1.Request.Accept := 'application/json';
IdHTTP1.Request.ContentType := 'multipart/form-data';

Assim deverá funcionar.

  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 2116 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...