Exemplo de Integração do Protheus com Fluig usando FWoAuth1Fluig

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:

  1. O primeiro passo será validar se é um body válido
  2. Em seguida será acionado a FWoAuth1Fluig passando os tokens e as keys
  3. 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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação