Versão atual:

REST OAuth 2.0 Obter Token Google Cloud

Meu objetivo é utilizar o ADVPL para obter o token da google cloud, para utilizá-lo em operações de upload de arquivos para o cloud storage.

Por favor, algum colega poderia me instruir de como utilizar o ADVPL para obter o token da google cloud ?

Detalhe muito importante : Toda a estrutura sistema protheus 12.25 esta no ambiente TCloud Totvs

-- Para melhor analisarem disponibilizei:

01 Imagens da configuração na ferramenta postman (*1)

02 Meu código fonte para obter o token da google cloud --

Observação : No fonte disponibilizado eu consegui validar a url, mas o token não é retornado

Para que consigam testar devem configurar o ambiente google cloud storage

(*1) imagens getnewaccesstokenpostman0.png, getnewaccesstokenpostman1.png, getnewaccesstokenpostman2.png

Muito obrigado

#include "totvs.ch"
/*
  Programa principal para chamar a rotina getAcssTkn() e obter o token do google cloud storage relacionado ao
  escopo https://www.googleapis.com/auth/devstorage.full_control
*/
user function thbi_csv()
    //Get access token to use for file upload
    accssTkn := getAcssTkn()
return nil

/**/
static function getAcssTkn()
    Local aHeadOut := {}
    Local oathURL := "https://accounts.google.com/o/oauth2/auth"
    Local athURLPrm := ""
//    Local acssTknURL := "https://accounts.google.com/o/oauth2/token"
    Local stPth := ""
    Local clntId := "[client_id]"
    Local clntScrt := "[client_secret]"
    Local rdrctURI := "[redirect_uri]"
    Local scpAPIPrds := "https://www.googleapis.com/auth/devstorage.full_control"
    Local cnttTp := "application/x-www-form-urlencoded" //"application/json"  //"text/csv" //Content-type
    Local accptdHdr := "application/json" // "*/*"
    Local cnnctnHdr := "keep-alive"
    Local cAutent := ""
    Local cAutentErr := ""
    Local ojLogin := nil
    Local oRest := nil
    Local jAutenticacao := nil
    Local cToken := ""

    ojLogin := JSonObject():New()
    cBody := ojLogin:ToJson()

    //Params to complete url
    athURLPrm := "?client_id="+clntId+"&"
    athURLPrm += "response_type=code&"
    athURLPrm += "state=musa_id&"
    athURLPrm += "scope="+scpAPIPrds+"&"
    athURLPrm += "prompt=consent&"
    athURLPrm += "include_granted_scopes=true&"
    athURLPrm += "redirect_uri="+rdrctURI

    aAdd(aHeadOut,"Authorization: Basic "+clntId+":"+clntScrt)
    aAdd(aHeadOut,"Cache-Control: no-cache")
    aAdd(aHeadOut,"Content-Type: " + cnttTp)
    aAdd(aHeadOut,"Accept: " + accptdHdr)
    aAdd(aHeadOut,"Connection: " + cnnctnHdr)
    aAdd(aHeadOut,"User-Agent: Chrome/65.0 (compatible; Protheus " + GetBuild() + ")")

    //Validate url
    oRest := FWRest():New(oathURL+athURLPrm)
    oRest:SetPath(stPth)
    oRest:SetPostParams(cBody)

    //Validate url and header
    if (oRest:Post(aHeadOut))
        //ConOut("Post: " + oRest:GetResult())
        cAutent := oRest:GetResult()
    else
        //ConOut("Post: " + oRest:GetLastError())
        cAutentErr := oRest:GetResult()
        cAutent := oRest:GetLastError()
        Alert("Post Error: " + cAutent)
    endif

    jAutenticacao := JSonObject():New()
    jAutenticacao:FromJson(cAutent)
    cToken := jAutenticacao['access_token']
return(cToken)

Versões (3):

Ver a versão formatada

REST OAuth 2.0 Obter Token Google Cloud

Comentário

new question