PureBasic
PureBasic
Group: Refresh OAuth2 Access Token
See more Microsoft Group Examples
Refreshes an expired or non-expired OAuth2 access token for the Microsoft Group REST API.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkFileAccess.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoadFile(json,"qa_data/tokens/msGraphGroup.json")
If success <> 1
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
req.i = CkHttpRequest::ckCreate()
If req.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::ckAddParam(req,"grant_type","refresh_token")
CkHttpRequest::ckAddParam(req,"redirect_uri","http://localhost:3017/")
CkHttpRequest::ckAddParam(req,"client_id","MICROSOFT-GRAPH-CLIENT-ID")
CkHttpRequest::ckAddParam(req,"client_secret","MICROSOFT-GRAPH-CLIENT-SECRET")
CkHttpRequest::ckAddParam(req,"refresh_token",CkJsonObject::ckStringOf(json,"refresh_token"))
CkHttpRequest::ckAddParam(req,"scope","openid profile offline_access user.readwrite group.readwrite.all files.readwrite")
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::setCkHttpVerb(req, "POST")
CkHttpRequest::setCkContentType(req, "application/x-www-form-urlencoded")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpReq(http,"https://login.microsoftonline.com/common/oauth2/v2.0/token",req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkJsonObject::ckDispose(json)
CkHttpRequest::ckDispose(req)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; Load the JSON response.
CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))
CkJsonObject::setCkEmitCompact(json, 0)
; Show the JSON response.
Debug CkJsonObject::ckEmit(json)
Debug "Response status code: " + Str(CkHttpResponse::ckStatusCode(resp))
; If the response status code is not 200, then it's an error.
If CkHttpResponse::ckStatusCode(resp) <> 200
CkJsonObject::ckDispose(json)
CkHttpRequest::ckDispose(req)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; Save the refreshed access token JSON to a file for future requests.
fac.i = CkFileAccess::ckCreate()
If fac.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkFileAccess::ckWriteEntireTextFile(fac,"qa_data/tokens/msGraphGroup.json",CkJsonObject::ckEmit(json),"utf-8",0)
Debug "Success."
CkJsonObject::ckDispose(json)
CkHttpRequest::ckDispose(req)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkFileAccess::ckDispose(fac)
ProcedureReturn
EndProcedure