No artigo de hoje, será demonstrado em como integrar o Protheus e o Fluig através da utilização da classe FWoAuth1Fluig.
Esse conteúdo foi gentilmente disponibilizado pelo Rafael Rubin ( LinkedIn ).
Basicamente pessoal, a lógica para fazer a integração com o Fluig através da linguagem AdvPL ou TLPP, requer primeiro fazer a autenticação, onde é possível utilizar a classe FWoAuth1Fluig.
Então para isso, a lógica seria mais ou menos a seguinte:
- O primeiro passo será validar se é um body válido
- Em seguida será acionado a FWoAuth1Fluig passando os tokens e as keys
- Se tiver tudo certo, será retornado um JsonObject
Ai com esse objeto, você consegue tratar as informações na sua integração e customização.
Abaixo o código fonte de exemplo, do cenário descrito acima:
//Bibliotecas #Include 'Totvs.ch' #Include 'RestFul.ch' /*/{Protheus.doc} User Function zFlRest Fluig - REST (com o Auth 1.0) @author Rafael Rubin @since 07/06/2024 @version 1.0 @type function @param cTipo, Caractere, Tipo da integração (por enquanto feito apenas com POST) @param cFnFluig, Caractere, EndPoint da Função no Fluig @param cBody, Caractere, Body da requisição usada na integração @return jInfoRet, JSON, Informações que serão retornadas da API /*/ User Function zFlRest(cTipo, cFnFluig, cBody) Local aArea := FWGetArea() Local cStringJson Local jInfoRet Local cResultado := '' Local oClientFluig Local lContinua := .T. //Informações da integração abaixo Local cWSFluig := Alltrim(GetMV('MV_X_FLEND')) //Endereço (URL) do Fluig para usar na integração Local cOACKey := Alltrim(GetMV('MV_X_FLCK')) //OAUTH Consumer Key Local cOACSecret := Alltrim(GetMV('MV_X_FLCS')) //OAUTH Consumer Secret Local cOAAToken := Alltrim(GetMV('MV_X_FLAT')) //OAUTH Access Token Local cOATSecret := Alltrim(GetMV('MV_X_FLTS')) //OAUTH Token Secret //Pega o JSON do Body jInfoRet := JsonObject():New() cStringJson := jInfoRet:FromJson(cBody) //Se houve falha na transformação do body em JsonObject, flaga para não continuar If ! Empty(cStringJson) cStringJson := jInfoRet:FromJson('{"status":"ERRO", "mensagem":"' + ret + '"}') lContinua := .F. EndIf //Se tiver tudo ok If lContinua //Aciona a integração com o Fluig oClientFluig := FWoAuth1Fluig():New(cOACKey,; //Consumer Key cOACSecret,; //Consumer Secret cWSFluig,; //Endereco '') //Callback //Define o Token e o SecretToken oClientFluig:SetToken(cOAAToken) //Access Token oClientFluig:SetSecretToken(cOATSecret) //Token Secret //Se for POST, executa a instrução de autenticação If (cTipo == 'POST') cResultado:= oClientFluig:Post(cWSFLuig+cFnFluig,"",cBody) Else cStringJson := jInfoRet:FromJson('{"status":"ERRO", "mensagem":"FUNCAO NAO IMPLEMENTADA"}') lContinua := .F. EndIf EndIf //Se deu tudo certo com a autenticação If lContinua cStringJson := jInfoRet:FromJson(cResultado) //Se não houve falha na transforação do resultado em JSON If ! Empty(cStringJson) cStringJson := jInfoRet:FromJson('{"status":"ERRO", "mensagem":"' + ret + '"}') lContinua := .F. EndIf EndIf FWRestArea(aArea) Return jInfoRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.