Sample code for 30+ languages & platforms
Xbase++

GeoOp Exchange Refresh Token for New Access Token

See more GeoOp Examples

Demonstrates how to use the /oauth2/token endpoint to exchange it for a new access token once the current access token has expired.

Note: This example requires Chilkat v9.5.0.65 or greater.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oJsonToken
LOCAL oRest
LOCAL nBAutoReconnect
LOCAL cResponseBody
LOCAL oJson

nSuccess := 0

//  This example assumes the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

//  This example also assumes that OAuth2 access and refresh tokens were previously fetched.
//  and saved in a JSON file.  

//  First get our previously obtained refresh token.
//  { .... "refresh_token":"e6dqdG....mzjpT04w==", .... }
oJsonToken := CreateObject("Chilkat.JsonObject")
nSuccess := oJsonToken:LoadFile("qa_data/tokens/geoop.json")

oRest := CreateObject("Chilkat.Rest")

//  Connect to GeoOp...
nBAutoReconnect := 1
nSuccess := oRest:Connect("login.geoop.com", 443, 1, nBAutoReconnect)
IF (nSuccess != 1)
    ? oRest:LastErrorText
    oJsonToken:destroy()
    oRest:destroy()
    RETURN
ENDIF

//  Set the X-Version header.
oRest:AddHeader("X-Version", "1.0")

//  Provide the required form params to get the new access token
? "refresh_token = " + oJsonToken:StringOf("refresh_token")
oRest:AddQueryParam("refresh_token", oJsonToken:StringOf("refresh_token"))
oRest:AddQueryParam("grant_type", "refresh_token")
oRest:AddQueryParam("client_id", "GEOOP-CLIENT-ID")
oRest:AddQueryParam("client_secret", "GEOOP-CLIENT-SECRET")

cResponseBody := oRest:FullRequestFormUrlEncoded("POST", "/oauth2/token")
IF (oRest:LastMethodSuccess != 1)
    ? oRest:LastErrorText
    oJsonToken:destroy()
    oRest:destroy()
    RETURN
ENDIF

//  If the response status code did not indicate success, then see what happened..
IF (oRest:ResponseStatusCode != 200)
    ? "Request Header: "
    ? oRest:LastRequestHeader
    ? "----"
    ? "Response StatusCode = " + Str(oRest:ResponseStatusCode)
    ? "Response StatusLine: " + oRest:ResponseStatusText
    ? "Response Header:"
    ? oRest:ResponseHeader
    ? cResponseBody
    oJsonToken:destroy()
    oRest:destroy()
    RETURN
ENDIF

oJson := CreateObject("Chilkat.JsonObject")
oJson:EmitCompact := 0
oJson:Load(cResponseBody)

//  Show the full JSON response.  It should contain the new access token...
? oJson:Emit()

oJsonToken:destroy()
oRest:destroy()
oJson:destroy()