Ir para conteúdo
  • Cadastre-se

cellfantasma

Membros
  • Total de ítens

    5
  • Registro em

  • Última visita

Tudo que cellfantasma postou

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