Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 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==", .... }
    jsonToken.i = CkJsonObject::ckCreate()
    If jsonToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/geoop.json")

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Connect to GeoOp...
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"login.geoop.com",443,1,bAutoReconnect)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkJsonObject::ckDispose(jsonToken)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    ; Set the X-Version header.
    CkRest::ckAddHeader(rest,"X-Version","1.0")

    ; Provide the required form params to get the new access token
    Debug "refresh_token = " + CkJsonObject::ckStringOf(jsonToken,"refresh_token")
    CkRest::ckAddQueryParam(rest,"refresh_token",CkJsonObject::ckStringOf(jsonToken,"refresh_token"))
    CkRest::ckAddQueryParam(rest,"grant_type","refresh_token")
    CkRest::ckAddQueryParam(rest,"client_id","GEOOP-CLIENT-ID")
    CkRest::ckAddQueryParam(rest,"client_secret","GEOOP-CLIENT-SECRET")

    responseBody.s = CkRest::ckFullRequestFormUrlEncoded(rest,"POST","/oauth2/token")
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkJsonObject::ckDispose(jsonToken)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    ; If the response status code did not indicate success, then see what happened..
    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug "Request Header: "
        Debug CkRest::ckLastRequestHeader(rest)
        Debug "----"
        Debug "Response StatusCode = " + Str(CkRest::ckResponseStatusCode(rest))
        Debug "Response StatusLine: " + CkRest::ckResponseStatusText(rest)
        Debug "Response Header:"
        Debug CkRest::ckResponseHeader(rest)
        Debug responseBody
        CkJsonObject::ckDispose(jsonToken)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(json, 0)
    CkJsonObject::ckLoad(json,responseBody)

    ; Show the full JSON response.  It should contain the new access token...
    Debug CkJsonObject::ckEmit(json)


    CkJsonObject::ckDispose(jsonToken)
    CkRest::ckDispose(rest)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure