Ir para conteúdo
  • Cadastre-se

datilas

Membros
  • Total de ítens

    523
  • Registro em

  • Última visita

  • Days Won

    2

Posts postados por datilas

  1. Vamos supor que o seu cliente venha perder o XML da nota por exemplo, neste caso basta você ler os dados da nota do banco de dados, gerar e assinar o XML e por fim realizar uma consulta com o XML carregado, desta forma ao realizar a consulta a SEFAZ vai retornar o protocolo de autorização e o componente se encarrega de atualizar o XML acrescentando o protocolo nele, deixando-o assim um documento com validade jurídica.

    • Curtir 2
  2. 15 minutos atrás, Werner_Marques disse:

    @datilas, eu não localizei. Mas pode ser que você encontre, já que não tenho muita experiência com TEF.

    Segue o manual em anexo

    TEF Guia Tecnico Gerenciador Padrao 2.5_032010.rar 389 kB · 1 download

    Esse manual não contempla CDP ou nenhum tipo de captura de dados.

    Recomendo vc entrar em contato com eles e obter informações mais precisas de como fazer a captura de dados pelo pinpad

    Screenshot_20200221-124720.png

    • Curtir 1
  3. 59 minutos atrás, Werner_Marques disse:

    Bom dia,

    @datilas , Para o Pay&go funcionou perfeitamente.

    Já no D-TEF ele retorna um erro dizendo que o TEF_dial não está ativo, mesmo eu inicializando ele antes. O erro é disparado pela procedure FinalizarRequisicao pelo o que vi ele verifica se o arquivo sts existe, caso não exista na pasta resp ele retorna o erro.

    Pelo o que vi o D-TEF não possui esse comando CDP, vou continuar pesquisando. Muito obrigado.

    veja se no manual de integração do TEF-D existe essa possibilidade,

    caso exista vc pode fazer a alteração baseado nessa da pay&go

    se vc possuir o manual posta aqui por favor. pois eu não tenho

  4. o que esta me encafifando é essa mensagem "Unsupported Media Type"

    tenta assim

      IdHTTPConexao.Request.Clear;
      IdHTTPConexao.Request.ContentType := 'application/json';
      IdHTTPConexao.Request.CharSet := 'utf-8';
      IdHTTPConexao.Request.CustomHeaders.Clear;
      IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
      //IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
      IdHTTPConexao.Response.ContentType := 'application/json';
      IdHTTPConexao.Response.CharSet := 'utf-8';

  5. 48 minutos atrás, luizcnr disse:

    Tentei das seguintes formas:

    Onde estava o IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType); como foi comentado, mudei para IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'multipart/form-data');

    E me apresentou o seguinte erro:

    ---------------------------
    Aviso
    ---------------------------
    Atenção! Ocorreu ao Cadastrar Produto no iFood. 
    <html><body><h1>Whitelabel Error Page</h1><p>
    This application has no explicit mapping for /error, 
    so you are seeing this as a fallback.</p><div id='created'>
    Tue Nov 05 15:47:05 GMT-03:00 2019</div><div>There was an unexpected error 
    (type=Internal Server Error, status=500).</div><div>java.lang.RuntimeException: 
    java.io.IOException: Missing initial multi part boundary</div></body></html>

     

    Se eu comentar a linha citada, me apresenta o erro seguinte erro:

    ---------------------------
    Aviso
    ---------------------------
    Atenção! Ocorreu ao Cadastrar Produto no iFood. 
    <html><body><h1>Whitelabel Error Page</h1><p>
    This application has no explicit mapping for /error, 
    so you are seeing this as a fallback.</p><div id='created'>
    Tue Nov 05 15:47:05 GMT-03:00 2019</div><div>There was an unexpected error 
    (type=Internal Server Error, status=500).</div><div>java.lang.RuntimeException: 
    java.io.IOException: Missing initial multi part boundary</div></body></html>

     

    E de outra forma, se eu crio uma variável iJSONEnviar : TIdMultipartFormDataStream;

    E passo em IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType);

    Me retorna o seguinte erro:

    ---------------------------
    Aviso
    ---------------------------
    Atenção! Ocorreu ao Cadastrar Produto no iFood. 
    <html><body><h1>Whitelabel Error Page</h1><p>This application has no 
    explicit mapping for /error, so you are seeing this as a fallback.</p>
    <div id='created'>Tue Nov 05 15:54:19 GMT-03:00 2019</div><div>There was an unexpected error 
    (type=Internal Server Error, status=500).</div><div>java.lang.RuntimeException: 
    java.io.IOException: Missing initial multi part boundary</div></body></html>

      // comenta essa linha IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType);
      IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken); //deixa essa 
      IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');//deixa essa
      // comenta essa linha IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Disposition', 'form-data; name="sku"');
      IdHTTPConexao.Response.CharSet := 'UTF-8';

    código limpo pra não confundir:

    Var
     iRespostaIfood: String;
     iJSON: String;
     iJSONStream, AResponseContent: TStringStream;
    Begin
     AResponseContent := TStringStream.Create('');
     Try
      iJSON := ('{"merchantId": MerchantID,' + //CÓD DO RESTAURANTE
       '"externalCode":"205",' +
       '"availability": "AVAILABLE",' +
       '"name": "X BURGUER - TESTE",' +
       '"description": "PÃO, HAMBURGUER E QUEIJO",' +
       '"order": 1,' +
       '"schedules": [],' +
       '"price":{' +
       '"originalValue": 0,' +
       '"promotional": false,' +
       '"value": 12.50}' +
       '}');
      mRetorno.Lines.Clear;
      mRetorno.Lines.Add(iJSON);
      iJSONStream := TStringStream.Create(iJSON);
    
      //Configura o HTTP
      IdHTTPConexao.Request.Clear;
      IdHTTPConexao.Request.CustomHeaders.Clear;
      IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
      IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
      IdHTTPConexao.Response.CharSet := 'UTF-8';
    
      Try
       IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONStream, AResponseContent);
       iRespostaIfood := AResponseContent.DataString;
    
       //201 = Indica que novos parâmetros foram criados com sucesso
       If IdHTTPConexao.ResponseCode = 201 Then
        Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'),
         'Informação', MB_OK + MB_ICONINFORMATION);
      Except
       On e: EIdHTTPProtocolException Do
        Begin
         If (e.ErrorCode <> 200) Or (e.ErrorCode <> 201) Then
          Begin
           Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' +
            e.ErrorMessage),
            'Aviso', MB_OK + MB_ICONWARNING);
           Exit;
          End;
        End;
      End;
     Finally
      FreeAndNil(iJSONStream);
      FreeAndNil(AResponseContent);
     End;

     

  6. 17 minutos atrás, luizcnr disse:

    Então, eu já tentei das duas formas. No POSTMAN, eu usei o seguinte JSON:

    {

    "merchantId": 292468,

    "availability": "AVAILABLE",

    "externalCode":"201",

    "name": "FANTA LATA",

    "description": "",

    "order": 2,

    "schedules": [],

    "price": {

    "originalValue": 0,

    "promotional": false,

    "value": 12.50}

    }

    Foi retornado o código 201, sendo criado o produto na API do iFood. Eu acho que o problema, esteja no momento de passar os parâmetros no form-data.

    Mas, ainda não descobri qual a forma correta de passar esse JSON para criar o produto, via Delphi.

     

    tenta ssim:

    Var
     iStringListProduto: TStringList;
     iRespostaIfood: String;
     iJSON: String;
     iJSONStream, AResponseContent: TStringStream;
     // iJSONEnviar : TIdMultipartFormDataStream;
    Begin
     // iJSONEnviar := TIdMultiPartFormDataStream.Create;
    
     
     AResponseContent := TStringStream.Create('');
     Try
      iJSON := ('{"merchantId": MerchantID,' + //CÓD DO RESTAURANTE
       '"externalCode":"205",' +
       '"availability": "AVAILABLE",' +
       '"name": "X BURGUER - TESTE",' +
       '"description": "PÃO, HAMBURGUER E QUEIJO",' +
       '"order": 1,' +
       '"schedules": [],' +
       '"price":{' +
       '"originalValue": 0,' +
       '"promotional": false,' +
       '"value": 12.50}' +
       '}');
      mRetorno.Lines.Clear;
      mRetorno.Lines.Add(iJSON);
      iJSONStream := TStringStream.Create(iJSON);
      //Configura o HTTP
      IdHTTPConexao.Request.Clear;
      IdHTTPConexao.Request.CustomHeaders.Clear;
      IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType);
      IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
      IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
      //IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Disposition', 'form-data; name="sku"');
      IdHTTPConexao.Response.CharSet := 'UTF-8';
    
      Try
       IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONStream, AResponseContent);
       iRespostaIfood := AResponseContent.DataString;
    
       //201 = Indica que novos parâmetros foram criados com sucesso
       If IdHTTPConexao.ResponseCode = 201 Then
        Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'),
         'Informação', MB_OK + MB_ICONINFORMATION);
      Except
       On e: EIdHTTPProtocolException Do
        Begin
         If (e.ErrorCode <> 200) Or (e.ErrorCode <> 201) Then
          Begin
           Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' +
            e.ErrorMessage),
            'Aviso', MB_OK + MB_ICONWARNING);
           Exit;
          End;
        End;
      End;
     Finally
      If Assigned(iJSONStream) Then
       FreeAndNil(iJSONStream);
      FreeAndNil(AResponseContent);
     End;

     

  7. 2 horas atrás, luizcnr disse:

    Datilas, obrigado por responder.

    Realizei o teste com o que vce me solicitou, mas ainda não deu certo

    pelo que vi na documentação não preencher ('"schedules": [],' +) caso não exista.

    {
     "merchantId": 999999,
     "ID do Restaurante (MerchantID)",
     "externalCode": "155",
     "COD PDV",
     "availability": "AVAILABLE", --"Disponibilidade do item",
     "name": "X BURGUER",
     "Nome do Item",
     "description": "PÃO, HAMBURGUER E QUEIJO", --" Descrição do Item (Composição)",
     "order": 0: "Ordem para o item aparecer no cardápio",
     "price": {
      "originalValue": 0: --"Valor Original do Item (Somente preencher caso o item estiver em promoção)",
      "promotional": false: --"Item está em promoção?"
      "value": 12 --"Valor do item (Valor que vai para aparecer na plataforma Ifood)"
     } 
    }
    
    //preencher apenas se existir (schedules)
    
    {
     "merchantId": 999999,
     "ID do Restaurante (MerchantID)",
     "externalCode": 9430,
     "COD PDV"
     "availability": "AVAILABLE", --"Disponibilidade do item",
     "name": "Esfiha de Carne",
     "Nome do Item"
     "description": "Recheio com Mussarela.", --"Descrição do Item (Composição)",
     "schedules": [{
       --"Disponibilidade dos itens " Dias da semana e horário funcionamento ""
       "dayOfWeek": "MONDAY" --" Dia da semana que funciona"
      }, {
       "dayOfWeek": "FRIDAY" --" Dia da semana que funciona"
    
      }
     ],
     "order": 1, --"Ordem para o item aparecer no cardápio",
     "price": {
      "Preço"
      "originalValue": 3.96, --"Valor Original do Item (Somente preencher caso o item estiver em promoção)"
      "promotional": true,  --" Item está em promoção?"
      "value": 1.98 --"Valor promocional do item (Valor que vai para aparecer na plataforma Ifood)"
     }
    }

     

  8. 33 minutos atrás, luizcnr disse:

    Galera,

    Bom dia!

    Estou com um problema, por alguns dias e não consigo resolver. Estou realizando a integração do meu sistema com o iFood.

    Estou realizando alguns testes, por enquanto, estava obtendo sucesso, até tentar cadastrar o produto na API do iFood.

    O procedimento que estou utilizando para cadastro é o seguinte:

    procedure TfrmPrincipal.btnCriarProdutoClick(Sender: TObject);
    var
      iStringListProduto : TStringList;
      iRespostaIfood : string;
      iJSON : string;
      iJSONStream : TStringStream;
      iJSONEnviar : TIdMultipartFormDataStream;
    begin
      iJSONEnviar := TIdMultiPartFormDataStream.Create;

      try
        iJSON := ('{"merchantId": MerchantID,' + //CÓD DO RESTAURANTE
                  '"externalCode":"205",' + 
                  '"availability": "AVAILABLE",' + 
                  '"name": "X BURGUER - TESTE",' + 
                  '"description": "PÃO, HAMBURGUER E QUEIJO",' + 
                  '"order": 1,' + 
                  '"schedules": [],' +
                  '"price":{' +
                     '"originalValue": 0,' +
                     '"promotional": false,' + 
                     '"value": 12.50}'+
                   '}');  
        mRetorno.Lines.Clear;
        mRetorno.Lines.Add(iJSON);

        iJSONEnviar.AddFormField('sku', iJSON);

        //Configura o HTTP
        IdHTTPConexao.Request.Clear;
        //IdHTTPConexao.Request.CharSet             := 'UTF-8';
        IdHTTPConexao.Request.CustomHeaders.Clear;
        IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType);
        IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
        IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
        IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Disposition', 'form-data; name="sku"');
        IdHTTPConexao.Response.CharSet := 'UTF-8';

        try
          iRespostaIfood := IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONEnviar);

          //201 = Indica que novos parâmetros foram criados com sucesso
          if IdHTTPConexao.ResponseCode = 201 then
            Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'),
                'Informação', MB_OK+MB_ICONINFORMATION);
        except
          on e:EIdHTTPProtocolException do
          begin
            if (e.ErrorCode <> 200) or (e.ErrorCode <> 201) then
            begin
              Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' +
                  e.ErrorMessage),
                    'Aviso', MB_OK+MB_ICONWARNING);
              Exit;
            end;
          end;
        end;
      finally

      end;
    end;

    Estou obtendo o seguinte retorno de erro:

    ---------------------------
    Aviso
    ---------------------------
    Atenção! Ocorreu ao Cadastrar Produto no iFood. 
    <html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit 
    mapping for /error, so you are seeing this as a fallback.</p><div id='created'>
    Tue Nov 05 10:50:01 GMT-03:00 2019</div><div>There was an unexpected error 
    (type=Bad Request, status=400).</div><div>Unable to parse form content</div></body></html>

    Obs. Esse mesmo JSON, executei no POSTMAN e estou obtendo um retorno positivo que o produto é cadastrado com sucesso, porém, o erro está no fonte e não estou conseguindo identificar.

    Se alguém, conseguir me auxiliar ou ajudar.

    Obrigado!

    pode ser por causa do acento na palavra "PÃO" tente converter o texto para utf-8 ou tira o acento para testar

  9. aqui eu tenho uma vps com owncloud a versão Enterprise tem um plugin que filtra arquivos por extensão

    o owncloud funciona como um dropbox então ele sobe o arquivo assim que possivel

    o que eu faço é compactar a pasta de xml's e o backup do db e altero a extensão para uma especifica ".bkx"

    e filtro no owncloud por essa extensão

    quando o cliente é infectado por um vírus a ultima versão que vai ter no meu backup é valida

    já que ransomware encripta o arquivo e altera a extensão, ele não afeta o arquivo que já subiu.

    sem contar que eu tenho total controle ao owncloud então eu posso habilitar e desabilitar um cliente sempre que necessário

    • Curtir 3
  10. 1 hora atrás, MaikonPanazzolo disse:

    O aplicativo trata-se de um exe que captura a tela do computador(printscreen) e salva em uma pasta, juntamente com informações de teclas digitadas e afins

    isso é um comportamento de keylogger dificilmente você vai conseguir que um antivírus te deixe em paz,

    se voce precisa de um bugtrace voce poderia usar :

    http://madshi.net/madExceptDescription.htm

    https://www.eurekalog.com/downloads_delphi.php

    por exemplo, mas existe outros.

    • Curtir 2
  11. remova o IdHTTP1 do seu formulario e tente usar assim:

    Var
     code: Integer;
     sResponse: String;
     Json: String;
     JsontoSend, AResponseContent: TStringStream;
     iStatusCode: Integer;
     http: TIdHTTP;
    Begin
     Json := '{"Customer": { "DocumentType" : "CNPJ", "DocumentNumber" : "11229082000167" }, "Driver": { "PhoneCountry": "+55",  "PhoneNumber": "19999690130",  "Name": "Daniel Marcelo"} }';
     JsonToSend := TStringStream.Create(Json);
     AResponseContent := TStringStream.Create('');
     http := TIdHTTP.Create(Nil);
     Try
      http.Request.CharSet := 'utf-8';
      http.Request.ContentType := 'application/json';
      http.Request.CustomHeaders.AddValue('AppKey', '58fb05c3-4e8b-4929-b7df-95bd261035c9');
      http.Request.CustomHeaders.AddValue('RequesterKey', '629eda6f-9df5-40e7-a94e-4c54cec83a15');
    
      http.Response.ContentType := 'applicattion/json';
      http.Response.CharSet := 'utf-8';
      Try
       http.Post('https://api.tudoentregue.com.br/v1/customers/AddDriver', JsontoSend, AResponseContent);
      Except
       On E: Exception Do
        Begin
         Memo1.Lines.Clear;
         Memo1.Lines.Add('Error on Response Code: ' + InttoStr(http.ResponseCode));
         Memo1.Lines.Add('Error on Response Text: ' + http.ResponseText);
         Memo1.Lines.Add('Error on Request: ' + sLineBreak + e.Message);
         exit;
        End;
      End;
      Memo1.Lines.Clear;
      Memo1.Lines.Add('Response Content: ' + AResponseContent.DataString);
      Memo1.Lines.Add('Response Code: ' + InttoStr(http.ResponseCode));
      Memo1.Lines.Add('Response Text: ' + http.ResponseText);
     Finally
      JsontoSend.Free;
      AResponseContent.Free;
      http.Free;
     End;

    eu adicionei essas duas linhas:

         Memo1.Lines.Add('Error on Response Code: ' + InttoStr(http.ResponseCode));
         Memo1.Lines.Add('Error on Response Text: ' + http.ResponseText);

    porque caso ResponseCode for 403,404,422 o indy vai levantar um except

    sendo que

    //IdHTTP1.ResponseCode = 403 Motorista não Relacionado. *response vazio*
    //IdHTTP1.ResponseCode = 404 Motorista não Localizado. *response vazio*

    então você não conseguiria tratar o erro de Motorista não Localizado por exemplo.

    caso tenha resolvido seu problema marque o post como melhor resposta

    clicando no sinal de ✔️ no canto superior esquerdo do post 

    • Curtir 3
  12. 1 hora atrás, d2mpavan disse:

    Pra mim, na primeira vez que rodo retorna vazio.

    Na segunda vez em diante retorna o mesmo erro que aparece pra você.

    Por favor, dê uma olhada se pode me ajudar. O código abaixo está com o App e Requester Key...

    Não sei como fechar essa comunicação... lembrando que estou usando o componente IDHTTP.

    segue código...

    var code : Integer;
        sResponse : String;
        Json : String;
        JsontoSend, AResponseContent : TStringStream;
        iStatusCode : Integer;
    begin
      Json := '{"PhoneCountry": "+55",  "PhoneNumber": "19999999999",  "Name": "Daniel",  "IMEI": "123",  "DeviceKey": "123456", "DeviceId": "222555",';
      Json := Json +'"DeviceType": "MarcaModelo",  "OSName": "Android",  "OSVersion": "7.0",  "Email": "[email protected]",  "ZipCode": "13425066",  "City": "Piracicaba",  "State": "Sao Paulo",  "Enable": false}';

      JsonToSend := TStringStream.Create(Json);
      AResponseContent := TStringStream.Create('');
      try
       IdHTTP1.Request.Clear;
       IdHTTP1.Request.CharSet := 'UTF-8';
       IdHTTP1.Request.Method := 'POST';
       IdHTTP1.Request.Username := '';
       IdHTTP1.Request.Password := '';
       IdHTTP1.Request.ContentType := 'application/json';
       IdHTTP1.Request.CustomHeaders.AddValue('AppKey','58fb05c3-4e8b-4929-b7df-95bd261035c9');
       IdHTTP1.Request.CustomHeaders.AddValue('RequesterKey','629eda6f-9df5-40e7-a94e-4c54cec83a15');

       IdHTTP1.Response.ContentType := 'applicattion/json';
       IdHTTP1.Response.CharSet := 'UTF-8';
       try
         sresponse := IdHTTP1.Post('https://api.tudoentregue.com.br/v1/drivers',JsontoSend);
       except
         on E:EIdHTTPProtocolException do
         begin
           Memo1.Lines.Clear;
           Memo1.Lines.Add('Error on Request: ' + #13+#10 + e.Message);
           exit;
         end;
       end;
       Memo1.Lines.Clear;
       Memo1.Lines.Add(sResponse);

       finally
          JsontoSend.Free();
      end;
    end;
     

    consegui:

     Json := '{"PhoneCountry": "+55",  "PhoneNumber": "19999999999",  "Name": "Daniel",  "IMEI": "",  "DeviceKey": "", "DeviceId": "",';
     Json := Json + '"DeviceType": "MarcaModelo",  "OSName": "Android",  "OSVersion": "7.0",  "Email": "[email protected]",  "ZipCode": "13400000",  "City": "Piracicaba",  "State": "Sao Paulo",  "Enable": false}';
     AResponseContent := TStringStream.Create('');
     JsonToSend := TStringStream.Create(utf8Encode(Json));
     Try
      IdHTTP1.Request.Clear;
      IdHTTP1.Request.CharSet := 'utf-8';
      IdHTTP1.Request.ContentType := 'application/json';
      IdHTTP1.Request.CustomHeaders.AddValue('AppKey', '58fb05c3-4e8b-4929-b7df-95bd261035c9');
      IdHTTP1.Request.CustomHeaders.AddValue('RequesterKey', '629eda6f-9df5-40e7-a94e-4c54cec83a15');
    
      IdHTTP1.Response.ContentType := 'applicattion/json';
      IdHTTP1.Response.CharSet := 'utf-8';
      IdHTTP1.Post('http://api.tudoentregue.com.br/v1/drivers', JsontoSend, AResponseContent);
      //IdHTTP1.ResponseCode = 200 Atualização de Registro.
      //IdHTTP1.ResponseCode = 201 Inclusão de Registro.
      //IdHTTP1.ResponseCode = 422 Erro de Validação.
    
      showmessage(AResponseContent.DataString);
      showmessage(IdHTTP1.ResponseCode.ToString);
      showmessage(IdHTTP1.ResponseText);
    
     Finally
      JsontoSend.Free();
     End;

    de acordo com a api

    quando faz um post em /drivers

    o Response vem vazio mesmo

    o que valida a informação do post é o ResponseCode

      //IdHTTP1.ResponseCode = 200 Atualização de Registro.
      //IdHTTP1.ResponseCode = 201 Inclusão de Registro.
      //IdHTTP1.ResponseCode = 422 Erro de Validação.

    mas quando faz um get em /drivers

    ele responde os dados do motorista

    mas de uma boa lida na api pois os codigos do ResponseCode são muito importantes

    por exemplo quando faz um get em drivers:

    //IdHTTP1.ResponseCode = 200 Processado com Sucesso. *e vem os dados do motorista no response*
    //IdHTTP1.ResponseCode = 403 Motorista não Relacionado. *response vazio*
    //IdHTTP1.ResponseCode = 404 Motorista não Localizado. *response vazio*

  13. 11 minutos atrás, d2mpavan disse:

    Certo,

    Mas como faço para usar como você fez no seu exemplo inicial com o THTTPClient? (apresenta undeclared identifier)

    Ou com o TIDHTTP que estou usando terei o mesmo efeito?

    É que não estou tendo retorno usando o TIDHTTP...

     

    Obrigado!

    pra mim aparece: HTTP/1.1 422 Unprocessable Entity

    seu try except não esta deixando voce ver o erro

  14. voce pode testar dentro da propria api

    acessa: https://api.tudoentregue.com.br/Documentacao/index.html

    clique no botão Authorize do lado direito

    digite suas keys clique no botão Authorize dentro da tela que abriu

    feche essa tela.

    logo abaixo clique na primeira opção

    clique no botão "try it out"

    logo em baixo clique no botão execute

    vc vai ter uma resposta parecida com essa:

    curl -X POST "http://api.tudoentregue.com.br/v1/drivers" -H  "accept: application/json" -H  "AppKey: gfg" -H  "RequesterKey: gdf" -H  "content-type: application/json" -d "{  \"PhoneCountry\": \"+55\",  \"PhoneNumber\": \"99999999999\",  \"Name\": \"Motorista Exemplo\",  \"IMEI\": \"999999999999999\",  \"DeviceKey\": \"XXX99xXX-...\",  \"DeviceId\": \"9FF9F9FFF99FFFFF9999F9FFF99999F9\",  \"DeviceType\": \"MarcaModelo\",  \"OSName\": \"Android\",  \"OSVersion\": \"7.0\",  \"Email\": \"[email protected]\",  \"ZipCode\": \"99999999\",  \"City\": \"Cidade do Exemplo.\",  \"State\": \"Estado do Exemplo.\",  \"Enable\": false}"
    2 minutos atrás, d2mpavan disse:

    Então...

    Inseri as informações na uses, porém quando vou compilar, não encontra o arquivo, por exemplo: "file not found: NetConsts.dcu"

    Obrigado!

    então remova essa uses

  15. 6 minutos atrás, d2mpavan disse:

    Bom dia Datilas!

    Muito obrigado por me ajudar!

    Porém, quando inseri as keys e tentei transmitir um arquivo obtive uma resposta vazia e os dados não foram inseridos. Isso quando apenas inseri as chaves utilizando o componente idhttp que eu estava utilizando.

    Testei também conforme seu código só que apresentou erro "undeclared identifier: 'THTTPClient'

    Como devo declarar na uses para corrigir o problema? (uso Delphi Rad Studio XE).

     

    Desde já agradeço se puder me ajudar novamente.

    Grande abraço!

     

    Daniel

    uses

     System.Net.HttpClient,
     System.Net.URLClient,
     System.NetConsts;

  16. eu preciso consumir um serviço do firebase:

    curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]' \
    -H 'Content-Type: application/json' \
    --data-binary '{"email":"[[email protected]]","password":"[PASSWORD]","returnSecureToken":true}'

    com indy eu uso assim (funciona):

    Var
     lJsonStream: TStringStream;
     sUrlFull: String;
     AResponseContent: TStringStream;
     iStatusCode: Integer;
     sResponse: String;
     jsData: TJSONObject;
    Begin
     sUrlFull := 'https://identitytoolkit.googleapis.com/v1/accounts:' + 'signInWithPassword' + '?key=' + sAPIKEY;
     jsData.AddPair('email', '[email protected]');
     jsData.AddPair('password', '1a2b3C');
     jsData.AddPair('returnSecureToken', TJSONBool.Create(True));
    
     lJsonStream := TStringStream.Create(UTF8Encode(jsData.ToJSON));
     AResponseContent := TStringStream.Create('');
     Try
      IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0';
      IdHTTP1.Request.ContentType := 'application/json';
      IdHTTP1.Post(sUrlFull, lJsonStream, AResponseContent);
      iStatusCode := IdHTTP1.ResponseCode;
      sResponse := AResponseContent.DataString;
     Finally
      Begin
       FreeAndNil(lJsonStream);
       FreeAndNil(AResponseContent);
      End;
     End;

    com Net.HttpClient eu uso assim (funciona):

    Var
     lJsonStream: TStringStream;
     lIdHTTP: THTTPClient;
     sUrlFull: String;
     AResponseContent: TStringStream;
     iStatusCode: Integer;
     sResponse: String;
     jsData: TJSONObject;
    Begin
     sUrlFull := 'https://identitytoolkit.googleapis.com/v1/accounts:' + 'signInWithPassword' + '?key=' + sAPIKEY;
     jsData.AddPair('email', '[email protected]');
     jsData.AddPair('password', '1a2b3C');
     jsData.AddPair('returnSecureToken', TJSONBool.Create(True));
    
     lJsonStream := TStringStream.Create(UTF8Encode(jsData.ToJSON));
     AResponseContent := TStringStream.Create('');
     lIdHTTP := THTTPClient.Create;
     Try
      lIdHTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0';
      lIdHTTP.ContentType := 'application/json';
      iStatusCode := lIdHTTP.Post(sUrlFull, lJsonStream, AResponseContent).StatusCode;
      sResponse := AResponseContent.DataString;
     Finally
      Begin
       FreeAndNil(lJsonStream);
       FreeAndNil(AResponseContent);
       FreeAndNil(lIdHTTP);
      End;
     End;

     a pergunta é como faço isso com Synapse já tentei de vários jeitos, já procurei no Google mas não consegui.

  17. 40 minutos atrás, d2mpavan disse:

    Boa Tarde Pessoal!

    Se puderem me orientar, preciso consumir uma API (segue documentação... https://api.tudoentregue.com.br/Documentacao/index.html)

    Quanto à geração dos arquivo no formato Json, eu já consegui entender.

    Porém, já tentei de várias formas e não consigo fechar comunicação com web service para Post do arquivo.

    Vi na documentação que tem um "AppKey" e um "RequesterKey". As duas chaves eu possuo mas não tenho ideia de onde as defino.

    
    securityDefinitions": {
        "AppKey": {
          "type": "apiKey",
          "in": "header",
          "name": "AppKey",
          "description": "Identificador do software Homologado junto à ActiveCorp para integrar dados ao TudoEntregue."
        },
        "RequesterKey": {
          "type": "apiKey",
          "in": "header",
          "name": "RequesterKey",
          "description": "Identificador único do Motorista/Cliente junto ao TudoEntregue."

     

    Estou utilizando IDHTTP, mas seria interessante que o envio fosse através de HTTPS.

    Vejam como estou fazendo:

     

    var code : Integer;
        sResponse : String;
        Json : String;
        JsontoSend : TStringStream;
    begin
      Json := '{"PhoneCountry": "+55",  "PhoneNumber": "19999999999",  "Name": "Daniel",  "IMEI": "",  "DeviceKey": "", "DeviceId": "",';
      Json := Json +'"DeviceType": "MarcaModelo",  "OSName": "Android",  "OSVersion": "7.0",  "Email": "[email protected]",  "ZipCode": "13400000",  "City": "Piracicaba",  "State": "Sao Paulo",  "Enable": false}';

      JsonToSend := TStringStream.Create(utf8Encode(Json));
      try
       IdHTTP1.Request.Clear;
       IdHTTP1.Request.CharSet := 'UTF-8';
       IdHTTP1.Request.Method := 'POST';
       IdHTTP1.Request.ContentType := 'application/json';

       IdHTTP1.Response.ContentType := 'applicattion/json';
       IdHTTP1.Response.CharSet := 'UTF-8';
       try
         sResponse := IdHTTP1.Post('http://api.tudoentregue.com.br/v1/drivers',JsontoSend);
       except
         on E:EIdHTTPProtocolException do
         begin
           Memo1.Lines.Clear;
           Memo1.Lines.Add('Error on Request: ' + #13+#10 + e.Message);
           exit;
         end;
       end;
       Memo1.Lines.Clear;
       Memo1.Lines.Add(sResponse);

       finally
          JsontoSend.Free();
      end;
    end;
     

     

    Alguém poderia me dar um exemplo de como enviar os arquivos se possivel em HTTPS?

    Desde já agradeço!

     

    Daniel

    tente assim:

       IdHTTP1.Request.Clear;
       IdHTTP1.Request.CharSet := 'UTF-8';
       IdHTTP1.Request.Method := 'POST';
       IdHTTP1.Request.ContentType := 'application/json';
       IdHTTP1.Request.CustomHeaders.AddValue('AppKey','seuAppKey');
       IdHTTP1.Request.CustomHeaders.AddValue('RequesterKey','seuRequesterKey');

    ou assim:

    Var
     lJsonStream: TStringStream;
     lIdHTTP: THTTPClient;
     sUrlFull: String;
     AResponseContent: TStringStream;
     istatusCode:Integer;
     sResposta:String;
    Begin
     lJsonStream := TStringStream.Create(aJSON);
     AResponseContent := TStringStream.Create('');
     lIdHTTP := THTTPClient.Create;
     Try
      lIdHTTP.CustomHeaders['AppKey'] := 'seuAppKey';
      lIdHTTP.CustomHeaders['RequesterKey'] := 'seuRequesterKey';
      lIdHTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0';
      lIdHTTP.ContentType := 'application/json';
      istatusCode := lIdHTTP.Post('https://api.tudoentregue.com.br/v1/drivers', lJsonStream, AResponseContent).StatusCode;
      sResposta := AResponseContent.DataString;
     Finally
      Begin
       FreeAndNil(lJsonStream);
       FreeAndNil(AResponseContent);
       FreeAndNil(lIdHTTP);
      End;
     End;

    mas fica difícil testar sem as keys.

×
×
  • 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.