Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Zoom API - Create JWT to Authenticate API RequestsSee more Zoom ExamplesCreates a JWT for the Zoom API. For more information, see https://marketplace.zoom.us/docs/api-reference/using-zoom-apis#using-jwt
IncludeFile "CkHttp.pb" IncludeFile "CkJwt.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; Use your API key and secret here... apiKey.s = "o9rw6Gq0RnqlkfaSqtCMOA" apiSecret.s = "UslmE23Kjh7at9z3If1xAHEyLmPDNxvxQrjR" ; Create a JWT to authenticate Zoom API requests. jwt.i = CkJwt::ckCreate() If jwt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf jose.i = CkJsonObject::ckCreate() If jose.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkJsonObject::ckUpdateString(jose,"alg","HS256") success = CkJsonObject::ckUpdateString(jose,"typ","JWT") ; Build claims to look like this: ; {"aud":null,"iss":"o9rw6Gq0RnqlkfaSqtCMOA","exp":1627651762,"iat":1627646363} claims.i = CkJsonObject::ckCreate() If claims.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkJsonObject::ckUpdateString(claims,"iss",apiKey) success = CkJsonObject::ckUpdateNull(claims,"aud") ; Set the timestamp of when the JWT was created to now. curDateTime.i = CkJwt::ckGenNumericDate(jwt,0) success = CkJsonObject::ckAddIntAt(claims,-1,"iat",curDateTime) ; Set the timestamp defining an expiration time (end time) for the token ; to be now + 1 month(3600 * 24 * 30 seconds) oneMonth.i = 3600 * 24 * 30 success = CkJsonObject::ckAddIntAt(claims,-1,"exp",curDateTime + oneMonth) ; Produce the smallest possible JWT: CkJwt::setCkAutoCompact(jwt, 1) strJwt.s = CkJwt::ckCreateJwt(jwt,CkJsonObject::ckEmit(jose),CkJsonObject::ckEmit(claims),apiSecret) Debug strJwt ; Let's test the JWT to by sending the following request: ; curl --request GET \ ; --url 'https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1' \ ; --header 'authorization: Bearer { your_token }' \ ; --header 'content-type: application/json http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Implements the following CURL command: ; curl --request GET \ ; --url 'https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1' \ ; --header 'authorization: Bearer { your_token }' \ ; --header 'content-type: application/json ; Use the following online tool to generate HTTP code from a CURL command ; Convert a cURL Command to HTTP Source Code CkHttp::ckSetRequestHeader(http,"content-type","application/json") ; Adds the "Authorization: Bearer { your_token }" header. CkHttp::setCkAuthToken(http, strJwt) sbResponseBody.i = CkStringBuilder::ckCreate() If sbResponseBody.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkHttp::ckQuickGetSb(http,"https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1",sbResponseBody) If success = 0 Debug CkHttp::ckLastErrorText(http) CkJwt::ckDispose(jwt) CkJsonObject::ckDispose(jose) CkJsonObject::ckDispose(claims) CkHttp::ckDispose(http) CkStringBuilder::ckDispose(sbResponseBody) ProcedureReturn EndIf jResp.i = CkJsonObject::ckCreate() If jResp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoadSb(jResp,sbResponseBody) CkJsonObject::setCkEmitCompact(jResp, 0) Debug "Response Body:" Debug CkJsonObject::ckEmit(jResp) respStatusCode.i = CkHttp::ckLastStatus(http) Debug "Response Status Code = " + Str(respStatusCode) If respStatusCode >= 400 Debug "Response Header:" Debug CkHttp::ckLastHeader(http) Debug "Failed." CkJwt::ckDispose(jwt) CkJsonObject::ckDispose(jose) CkJsonObject::ckDispose(claims) CkHttp::ckDispose(http) CkStringBuilder::ckDispose(sbResponseBody) CkJsonObject::ckDispose(jResp) ProcedureReturn EndIf ; Sample output: ; { ; "page_count": 1, ; "page_number": 1, ; "page_size": 30, ; "total_records": 1, ; "users": [ ; { ; "id": "s8uAiMJiRmS_-eu1yOhKlg", ; "first_name": "Joe", ; "last_name": "Example", ; "email": "joe@example.com", ; "type": 1, ; "pmi": 5224934114, ; "timezone": "America/Chicago", ; "verified": 1, ; "created_at": "2021-07-30T11:56:37Z", ; "last_login_time": "2021-07-30T11:56:37Z", ; "language": "en-US", ; "phone_number": "", ; "status": "active", ; "role_id": "0" ; } ; ] ; } ; Sample code for parsing the JSON response... ; Use the following online tool to generate parsing code from sample JSON: ; Generate Parsing Code from JSON id.s first_name.s last_name.s email.s v_type.i pmi.i timezone.s verified.i created_at.s last_login_time.s language.s phone_number.s status.s role_id.s page_count.i = CkJsonObject::ckIntOf(jResp,"page_count") page_number.i = CkJsonObject::ckIntOf(jResp,"page_number") page_size.i = CkJsonObject::ckIntOf(jResp,"page_size") total_records.i = CkJsonObject::ckIntOf(jResp,"total_records") i.i = 0 count_i.i = CkJsonObject::ckSizeOfArray(jResp,"users") While i < count_i CkJsonObject::setCkI(jResp, i) id = CkJsonObject::ckStringOf(jResp,"users[i].id") first_name = CkJsonObject::ckStringOf(jResp,"users[i].first_name") last_name = CkJsonObject::ckStringOf(jResp,"users[i].last_name") email = CkJsonObject::ckStringOf(jResp,"users[i].email") v_type = CkJsonObject::ckIntOf(jResp,"users[i].type") pmi = CkJsonObject::ckIntOf(jResp,"users[i].pmi") timezone = CkJsonObject::ckStringOf(jResp,"users[i].timezone") verified = CkJsonObject::ckIntOf(jResp,"users[i].verified") created_at = CkJsonObject::ckStringOf(jResp,"users[i].created_at") last_login_time = CkJsonObject::ckStringOf(jResp,"users[i].last_login_time") language = CkJsonObject::ckStringOf(jResp,"users[i].language") phone_number = CkJsonObject::ckStringOf(jResp,"users[i].phone_number") status = CkJsonObject::ckStringOf(jResp,"users[i].status") role_id = CkJsonObject::ckStringOf(jResp,"users[i].role_id") i = i + 1 Wend CkJwt::ckDispose(jwt) CkJsonObject::ckDispose(jose) CkJsonObject::ckDispose(claims) CkHttp::ckDispose(http) CkStringBuilder::ckDispose(sbResponseBody) CkJsonObject::ckDispose(jResp) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.