Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save viniciusmelocodes/29fa0755ebd016eae480206602fb7a77 to your computer and use it in GitHub Desktop.
Save viniciusmelocodes/29fa0755ebd016eae480206602fb7a77 to your computer and use it in GitHub Desktop.
function TServicoIntegradorEComPlus.gerarTokenAcesso(servicoAtivo: Boolean): TStringList;
var
bodyParamItem, expires: string;
dadosToken: ISuperObject;
bodyRequest: TJSONObject;
qry: TFDQuery;
begin
qry := TFDQuery.Create(nil);
try
try
// Configuração conector
configurarConector;
rstrqstGerarTokenAcesso.ResetToDefaults;
rstclntGerarTokenAcesso.ResetToDefaults;
rstrspnsGerarTokenAcesso.ResetToDefaults;
qry.Connection := conFirebird;
qry.Close;
qry.SQL.Text := SQL_CONFIGURACOES_SISTEMAS;
qry.ParamByName('CFST_E_COM_PLUS_STORE_ID').AsInteger := storeId;
qry.Open;
if (qry.FieldByName('CFST_E_COM_PLUS_EXPIRACAO_TOKEN').AsDateTime < Now) or (qry.FieldByName('CFST_E_COM_PLUS_EXPIRACAO_TOKEN').AsDateTime = 0) then
begin
rstclntGerarTokenAcesso.BaseURL := GENERATE_ACCESS_TOKEN;
rstrqstGerarTokenAcesso.Client := rstclntGerarTokenAcesso;
rstrqstGerarTokenAcesso.Method := rmPOST;
rstrqstGerarTokenAcesso.Response := rstrspnsGerarTokenAcesso;
rstrqstGerarTokenAcesso.Params.Clear;
bodyParamItem := '{"_id": "' + qry.FieldByName('CFST_E_COM_PLUS_ID').AsString + '", "api_key": "' + qry.FieldByName('CFST_E_COM_PLUS_API_KEY').AsString + '"}';
rstrqstGerarTokenAcesso.Params.AddItem('Content-Type', 'application/json; charset=utf-8', pkHTTPHEADER);
rstrqstGerarTokenAcesso.Params.AddItem('X-Store-ID', qry.FieldByName('CFST_E_COM_PLUS_STORE_ID').AsString, pkHTTPHEADER);
rstrqstGerarTokenAcesso.Params.AddItem('body', bodyParamItem, pkREQUESTBODY, [poDoNotEncode]);
rstrqstGerarTokenAcesso.Execute;
dadosToken := SO(TJson.JsonEncode(rstrspnsGerarTokenAcesso.JSONValue));
if dadosToken <> nil then
begin
myId := dadosToken.S['my_id'];
accessToken := dadosToken.S['access_token'];
expires := dadosToken.S['expires'];
end;
qry.Edit;
qry.FieldByName('CFST_E_COM_PLUS_ACCESS_TOKEN').AsString := accessToken;
qry.FieldByName('CFST_E_COM_PLUS_EXPIRACAO_TOKEN').AsDateTime := XMLTimeToDateTime(expires);
qry.Post;
end
else
begin
accessToken := qry.FieldByName('CFST_E_COM_PLUS_ACCESS_TOKEN').AsString;
expires := qry.FieldByName('CFST_E_COM_PLUS_EXPIRACAO_TOKEN').AsString;
end;
except
on E: Exception do
begin
salvarLog('Erro ao gerar token de acesso. Detalhes: ' + E.Message, conFirebird);
conFirebird.Close;
FreeAndNil(qry);
Result := TStringList.Create;
Result.Add(E.Message);
end;
end;
finally
Result := TStringList.Create;
if myId <> '' then
begin
Result.Add('Novo token gerado:');
Result.Add('my_id: ' + myId);
Result.Add('access_token: ' + accessToken);
Result.Add('expires: ' + expires);
end
else
begin
Result.Add('Novo token de acesso não foi gerado, pois o token atual ainda é válido.');
Result.Add('Token atual:');
Result.Add('my_id: ' + myId);
Result.Add('access_token: ' + accessToken);
Result.Add('expires: ' + expires);
end;
if not servicoAtivo then
conFirebird.Close;
FreeAndNil(qry);
end;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment