Sample code for 30+ languages & platforms
PureBasic

Microsoft Graph -- List Users

See more Microsoft Graph Examples

Retrieve a list of Microsoft Graph user objects.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"

Procedure ChilkatExample()

    success.i = 0

    ; ------------------------------------------------------------------------------------------------------
    ; See an easier way to do OAuth2 client credentials:
    ; Example using Automatic OAuth2 Client Credentials
    ; ------------------------------------------------------------------------------------------------------

    ; Get an access token with the required scope using client credentials...
    ; See How to Create Microsoft Graph App (in Azure Portal) for Client Credentials Authentication
    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    CkHttpRequest::ckAddParam(req,"client_secret","CLIENT_SECRET")
    CkHttpRequest::ckAddParam(req,"client_id","CLIENT_ID")
    CkHttpRequest::ckAddParam(req,"scope","https://graph.microsoft.com/.default")
    CkHttpRequest::ckAddParam(req,"grant_type","client_credentials")

    ; Use your own tenant ID, for example 4d8fdd66-66d1-43b0-ae5c-e31b4b7de5cd
    url.s = "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token"

    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,url,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    statusCode.i = CkHttpResponse::ckStatusCode(resp)
    Debug "Response status code = " + Str(statusCode)

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

    CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))

    ; -----------------------------------------------------
    ; Use the access token obtained from above.
    ; Note: We don't need to re-fetch a new access token every time.  An access token is valid 
    ; for some amount of time, typically an hour (3600 seconds)

    ; Use your previously obtained access token here:
    CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(json,"access_token"))

    Debug "access token: " + CkHttp::ckAuthToken(http)

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

    success = CkHttp::ckQuickGetSb(http,"https://graph.microsoft.com/v1.0/users",sbResponse)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkHttpResponse::ckDispose(resp)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbResponse)
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(json,sbResponse)
    CkJsonObject::setCkEmitCompact(json, 0)

    Debug "Status code = " + Str(CkHttp::ckLastStatus(http))
    If CkHttp::ckLastStatus(http) <> 200
        Debug CkJsonObject::ckEmit(json)
        Debug "Failed."
    EndIf

    Debug CkJsonObject::ckEmit(json)

    ; Sample output
    ; {
    ;   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
    ;   "value": [
    ;     {
    ;       "@odata.id": "https://graph.microsoft.com/v2/6d8ddd66-68d1-43b0-af5c-e31b4b7dd5cd/directoryObjects/fca490d8-5918-4201-8079-c5dcbeafcdc9/Microsoft.DirectoryServices.User",
    ;       "businessPhones": [
    ;       ],
    ;       "displayName": "Joe Sample",
    ;       "givenName": "Joe",
    ;       "jobTitle": null,
    ;       "mail": null,
    ;       "mobilePhone": null,
    ;       "officeLocation": null,
    ;       "preferredLanguage": null,
    ;       "surname": "Sample",
    ;       "userPrincipalName": "admin_chilkatsoft.com#EXT#@adminchilkatsoft.onmicrosoft.com",
    ;       "id": "fca490d8-5918-4201-8079-c5dcbeafcdc9"
    ;     }
    ;   ]
    ; }

    ; Use this online tool to generate parsing code from sample JSON: 
    ; Generate Parsing Code from JSON

    odata_id.s
    displayName.s
    givenName.s
    jobTitle.s
    mail.s
    mobilePhone.s
    officeLocation.s
    preferredLanguage.s
    surname.s
    userPrincipalName.s
    id.s
    j.i
    count_j.i

    odata_context.s = CkJsonObject::ckStringOf(json,Chr(34) + "@odata.context" + Chr(34))
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(json,"value")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        odata_id = CkJsonObject::ckStringOf(json,"value[i]." + Chr(34) + "@odata.id" + Chr(34))
        displayName = CkJsonObject::ckStringOf(json,"value[i].displayName")
        givenName = CkJsonObject::ckStringOf(json,"value[i].givenName")
        jobTitle = CkJsonObject::ckStringOf(json,"value[i].jobTitle")
        mail = CkJsonObject::ckStringOf(json,"value[i].mail")
        mobilePhone = CkJsonObject::ckStringOf(json,"value[i].mobilePhone")
        officeLocation = CkJsonObject::ckStringOf(json,"value[i].officeLocation")
        preferredLanguage = CkJsonObject::ckStringOf(json,"value[i].preferredLanguage")
        surname = CkJsonObject::ckStringOf(json,"value[i].surname")
        userPrincipalName = CkJsonObject::ckStringOf(json,"value[i].userPrincipalName")
        id = CkJsonObject::ckStringOf(json,"value[i].id")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(json,"value[i].businessPhones")
        While j < count_j
            CkJsonObject::setCkJ(json, j)
            j = j + 1
        Wend
        i = i + 1
    Wend


    CkHttp::ckDispose(http)
    CkHttpRequest::ckDispose(req)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbResponse)


    ProcedureReturn
EndProcedure