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
(DataFlex) Google Drive Refresh Access TokenDemonstrates how to automatically refresh the access token when it expires.
Use ChilkatAx-9.5.0-win32.pkg Procedure Test Boolean iSuccess Handle hoJson String sTokenFilePath Variant vOauth2 Handle hoOauth2 Handle hoRest Boolean iBAutoReconnect String sJsonResponse Handle hoFac String sTemp1 Integer iTemp1 Boolean bTemp1 Move True To iSuccess // It requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This example uses a previously obtained access token having permission for the // Google Drive scope. // The access token (and refresh token) was previously saved to a JSON file with this format: // See Get Google Drive OAuth2 Access Token // { // "access_token": "ya29.Gls-BsdxTWuenChv ... yzVIrXikkLxu5T6dy4I6GjADFardoz4Lruw", // "expires_in": 3600, // "refresh_token": "1/tMBJ ... 27D-Hk6rpQYBA", // "scope": "https://www.googleapis.com/auth/drive", // "token_type": "Bearer" // } Get Create (RefClass(cComChilkatJsonObject)) To hoJson If (Not(IsComObjectCreated(hoJson))) Begin Send CreateComObject of hoJson End Move "qa_data/tokens/googleDrive.json" To sTokenFilePath Get ComLoadFile Of hoJson sTokenFilePath To iSuccess Get Create (RefClass(cComChilkatOAuth2)) To hoOauth2 If (Not(IsComObjectCreated(hoOauth2))) Begin Send CreateComObject of hoOauth2 End Get ComStringOf Of hoJson "access_token" To sTemp1 Set ComAccessToken Of hoOauth2 To sTemp1 Get ComStringOf Of hoJson "refresh_token" To sTemp1 Set ComRefreshToken Of hoOauth2 To sTemp1 Get Create (RefClass(cComChilkatRest)) To hoRest If (Not(IsComObjectCreated(hoRest))) Begin Send CreateComObject of hoRest End // Connect using TLS. Move True To iBAutoReconnect Get ComConnect Of hoRest "www.googleapis.com" 443 True iBAutoReconnect To iSuccess // Provide the authentication credentials (i.e. the access token) Get pvComObject of hoOauth2 to vOauth2 Get ComSetAuthOAuth2 Of hoRest vOauth2 To iSuccess // We'll test with a simple request to empty trash. // If our access token expired, we'll get a 401 response.. Get ComFullRequestNoBody Of hoRest "DELETE" "/drive/v3/files/trash" To sJsonResponse Get ComLastMethodSuccess Of hoRest To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End // If the access token expired, we'll get a 401 response status with this response body: // { // "error": { // "errors": [ // { // "domain": "global", // "reason": "authError", // "message": "Invalid Credentials", // "locationType": "header", // "location": "Authorization" // } // ], // "code": 401, // "message": "Invalid Credentials" // } // } Get ComResponseStatusCode Of hoRest To iTemp1 If (iTemp1 = 401) Begin Showln "Refreshing access token..." Set ComAuthorizationEndpoint Of hoOauth2 To "https://accounts.google.com/o/oauth2/v2/auth" Set ComTokenEndpoint Of hoOauth2 To "https://www.googleapis.com/oauth2/v4/token" // Replace these with actual values. Set ComClientId Of hoOauth2 To "GOOGLE-CLIENT-ID" Set ComClientSecret Of hoOauth2 To "GOOGLE-CLIENT-SECRET" Set ComScope Of hoOauth2 To "https://www.googleapis.com/auth/drive" // Use OAuth2 to refresh the access token. Get ComRefreshAccessToken Of hoOauth2 To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoOauth2 To sTemp1 Showln sTemp1 Procedure_Return End // Save the new access token to our XML file (so we can refresh it again when needed). Get ComAccessToken Of hoOauth2 To sTemp1 Get ComUpdateString Of hoJson "access_token" sTemp1 To iSuccess Get Create (RefClass(cComCkFileAccess)) To hoFac If (Not(IsComObjectCreated(hoFac))) Begin Send CreateComObject of hoFac End Get ComEmit Of hoJson To sTemp1 Get ComWriteEntireTextFile Of hoFac sTokenFilePath sTemp1 "utf-8" False To iSuccess Showln "Access Token Refreshed!" // Retry the request with the new access token.. Get ComFullRequestNoBody Of hoRest "DELETE" "/drive/v3/files/trash" To sJsonResponse Get ComLastMethodSuccess Of hoRest To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End End // A successful response will have a status code equal to 204 and the response body is empty. // (If not successful, then there should be a JSON response body with information..) Get ComResponseStatusCode Of hoRest To iTemp1 If (iTemp1 <> 204) Begin Get ComResponseStatusCode Of hoRest To iTemp1 Showln "response status code = " iTemp1 Get ComResponseStatusText Of hoRest To sTemp1 Showln "response status text = " sTemp1 Get ComResponseHeader Of hoRest To sTemp1 Showln "response header: " sTemp1 Showln "response JSON: " sJsonResponse Procedure_Return End Showln "Trash Emptied!" End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.