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.
Boa tarde!
Top a documentação, o POST funcionou certinho! Teria um exemplo do GET implementado?
Bom dia Danillo, tudo joia?
Vou confirmar com o Rafa se ele teria algum exemplo para disponibilizar, ai se ele tiver, eu atualizo aqui o artigo.
Tenha um ótimo e abençoado fim de semana.
Um forte abraço.
Combinado, obrigado Daniel!
Bom dia Danillo, tudo joia?
Vi aqui com o Rafa, ele mandou esse trecho de exemplo:
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.