Ir para conteúdo
  • Cadastre-se

cellfantasma

Membros
  • Total de ítens

    5
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

cellfantasma's Achievements

Rookie

Rookie (2/14)

  • First Post
  • Week One Done
  • One Month Later
  • One Year In
  • Conversation Starter

Recent Badges

3

Reputação

  1. Ola Michele e Daniel, se estiverem precisando ou para alguém que tenha a mesma dúvida vou postar trechos de códigos que usei para estar conseguindo o token. TParametros = class private FGrantType: String; FClientId: String; FClientSecret: String; FPassword: String; FUsername: String; FMerchant: String; public property Merchant: String read FMerchant write FMerchant; property ClientId: String read FClientId write FClientId; property ClientSecret: String read FClientSecret write FClientSecret; property GrantType: String read FGrantType write FGrantType; property Username: String read FUsername write FUsername; property Password: String read FPassword write FPassword; constructor Create; end; No create desta Classe eu carrego os parâmetros, inicialmente eu coloquei em um arquivo ini constructor TParametros.Create; var oIni: TIniFile; begin oIni := TIniFile.Create(TNjFunc.GetIniFileName); try FMerchant := TNjFunc.Decrypt(oIni.ReadString('iFood','Merchant','')); FClientId := TNjFunc.Decrypt(oIni.ReadString('iFood','ClientId','')); FClientSecret := TNjFunc.Decrypt(oIni.ReadString('iFood','ClientSecret','')); FGrantType := TNjFunc.Decrypt(oIni.ReadString('iFood','GrantType','')); FUsername := TNjFunc.Decrypt(oIni.ReadString('iFood','Username','')); FPassword := TNjFunc.Decrypt(oIni.ReadString('iFood','Password','')); finally FreeAndNil(oIni); end; end; Após eu tenho uma outra classe que faz as requisições dos outros EndPoints, mas está faz requisição do Token function TResquestIFOOD.GetToken: Boolean; var slParams: TStringList; ssResponse: TStringStream; soResponse: ISuperObject; sURL: String; {$REGION 'CARREGA CREDENCIAIS'} procedure LoadParams; begin with slParams do begin Add('client_id=' + FParams.ClientId); Add('client_secret=' + FParams.ClientSecret); Add('grant_type=' + FParams.GrantType); Add('username=' + FParams.Username); Add('password=' + FParams.Password); end; end; {$ENDREGION} begin Result := False; //Montando URL sURL := FURL; sURL := sURL + '/oauth/token'; slParams := TStringList.Create; ssResponse := TStringStream.Create; LoadParams; try if TMethodUtils.POST(sURL, slParams, ssResponse, True, FToken, FAPI) then begin soResponse := SO(ssResponse.DataString); FToken := soResponse.S['access_token']; Result := True end; finally FreeAndNil(ssResponse); FreeAndNil(slParams); end; end; Na época eu estava com erro ao fazer o Polling, a URL estavá correta e o token também. Porém o header que eu estava mandando que estava errado. Então quando é para conseguir pegar o Token eu uso um tipo de Header e para os demais endspoints eu uso outro. Segue abaixo: if pIsGetToken then begin Request.Accept := 'application/json'; end else begin Request.Clear; Request.ContentType := 'application/json'; Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + pToken); end; Obs: Usamos Delphi 10.3 Para Parse e criação de objetos Json: https://github.com/onryldz/x-superobject
  2. Pessoal, queria uma força de quem está tentando fazer integração do iFood ou de quem souber resolver este problema. Abaixo o trexo do código: var Indy: TidHTTP; sURL: WideString; ssResponse: TStringStream; sToken: String; begin sToken := memo1.Lines.Text; sURL := 'https://pos-api.ifood.com.br/v3.0/orders/'+ edtReference.text; ssResponse := TStringStream.Create; Indy := TidHTTP.Create; try with Indy do begin // Request.Clear; // Request.ContentType := 'application/json'; // Request.Charset := 'UFT-8'; // Request.BasicAuthentication := False; // Request.CustomHeaders.Clear; // Request.CustomHeaders.AddValue('Content-Type', 'application/json'); ProtocolVersion := pv1_1; Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + sToken); // Request.CustomHeaders.AddValue('cache-control', 'no-cache'); // Request.Accept := 'application/json'; Get(sURL, ssResponse); end; except on E: EIdHTTPProtocolException do if not (E.ErrorCode in [200,201,202]) and not(E.ErrorCode = 404) then MessageDlg( 'Erro de Requisição' + #13#10 + 'Code: ' + IntToStr(E.ErrorCode) + ' ' + E.Message , mtInformation, [mbOK], 0 ); end; Pois bem. Estou tentando fazer requisições dos endpoints de Orders do ifood, segue link com a decumentação: https://developer.ifood.com.br/reference#eventspolling. Estou conseguindo pegar o Token, com o token faço o Polling sem problemas. Quando chego na parte da mudança de status dos pedidos, encontro sempre o seguinte erro '401 - Unauthorized', sergundo o ifood o seguinte erro ocorre por conta que o token não ser valido. Mas o mesmo token no PostMan faz a requisição. Já tentei até acrescentar os header no postMan, ja tirei todos os Header deixando apenas o Authorization. Então recorro a este forum, e pergunto alguém tem alguma ideia do que seja?
  3. Ok, muito obrigado, já estou seguindo sua dica e pesquisando sobre.
  4. Olá não tentei ainda, pois quando comecei a pesquisar, encontrei algumas soluções e exemplos usando TidHTTP para fazer as requisições.
  5. Boa tarde pessoal. Se possível queria uma ajuda de vocês. Estou tentando fazer a integração com API do iFood e estou com problemas no endpoint de Abertura/Fechamento do resturante ao dar Put em ' https://pos-api.ifood.com.br/v1.0/merchants/id/statuses' Sempre que executa o delphi retorna a seguinte mensagem: '[dcc32 Error] uDMiFood.pas(261): E2250 There is no overloaded version of 'Put' that can be called with these arguments' Ja verifiquei dentro do TidHTTP e há dois métodos de put, estou informando os parametros que correpondem ao primeiro método 1) procedure TIdCustomHTTP.Put(AURL: string; ASource, AResponseContent: TStream); begin DoRequest(Id_HTTPMethodPut, AURL, ASource, AResponseContent, []); end; ---------------------------------------------------------------------------------------------- 2) function TIdCustomHTTP.Put(AURL: string; ASource: TStream {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF} ): string; var LResponse: TMemoryStream; begin LResponse := TMemoryStream.Create; try Put(AURL, ASource, LResponse); LResponse.Position := 0; Result := ReadStringAsCharset(LResponse, Response.Charset{$IFDEF STRING_IS_ANSI}, ADestEncoding{$ENDIF}); finally FreeAndNil(LResponse); end; end; ------------------------------------------------------------------------------------------- Fiz seguindo o exemplo do seguinte site: http://www.bemmelhor.com.br/info/index.php?title=HTTP_GET_no_Delphi_2010 Abaixo o trecho do código que estou trabalhando, desde já agradeço. procedure TdmIFood.StatusRestaurante(pStatus, pMotivo, pMerchant: String); var slParam: TStringList; HTTPClient: TidHTTP; ssJson: TStringStream; begin HTTPClient := TidHTTP.Create; slParam := TStringList.Create; ssJson := TStringStream.Create('', TEncoding.UTF8); try with slParam do begin Add('status=' + pStatus); Add('reason=' + pMotivo); end; with HttpClient do begin Request.Clear; Request.ContentType := 'application/json'; Request.CharSet := 'UTF-8'; Request.BasicAuthentication := False; Request.CustomHeaders.Clear; Request.CustomHeaders.AddValue('cache-control', 'no-cache'); Request.CustomHeaders.AddValue('Content-Type', 'application/json'); Request.CustomHeaders.AddValue('Authorization', 'bearer' + FToken); Request.Accept := 'application/json'; Put('https://pos-api.ifood.com.br/v1.0/merchants/' + pMerchant + '/statuses', slParam, ssJson); end; ShowMessage(ssJson.DataString); finally FreeAndNil(HTTPClient); FreeAndNil(slParam); FreeAndNil(ssJson); end; end;
×
×
  • 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...