![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Xero API through an HTTP ProxyThis example demonstrates connecting through an HTTP proxy w/ 2-legged OAuth for a Xero private application. This example requires Chilkat v9.5.0.64 or later
LOCAL loRest LOCAL loSocket LOCAL lnBTls LOCAL lnPort LOCAL lnMaxWaitMs LOCAL lnSuccess LOCAL lcConsumerKey LOCAL lcConsumerSecret LOCAL loPfx LOCAL loPrivKeyFromPfx LOCAL loPrivKeyFromPem LOCAL loOauth1 LOCAL loSbXml LOCAL lnBAutoTrim LOCAL loXml LOCAL lnRecordCount LOCAL i * This example requires Chilkat v9.5.0.64 or later * This sample code would typically be placed in a subroutine or function * where the rest object is passed by reference. * It does the OAuth1 setup and makes the initial connection. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Rest') loRest = CreateObject('Chilkat.Rest') * Connect to the Xero server through an HTTP proxy, and then tell the REST object * to use the socket connection. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Socket') loSocket = CreateObject('Chilkat.Socket') * Set the HTTP proxy domain or IP address, and port. loSocket.HttpProxyHostname = "192.168.1.100" loSocket.HttpProxyPort = 8088 loSocket.HttpProxyForHttp = 1 * Connect through the HTTP proxy.. lnBTls = 1 lnPort = 443 lnMaxWaitMs = 5000 lnSuccess = loSocket.Connect("api.xero.com",lnPort,lnBTls,lnMaxWaitMs) IF (lnSuccess <> 1) THEN ? "Connect Failure Error Code: " + STR(loSocket.ConnectFailReason) ? loSocket.LastErrorText RELEASE loRest RELEASE loSocket CANCEL ENDIF * Use the HTTP proxied TLS connection: lnSuccess = loRest.UseConnection(loSocket,1) IF (lnSuccess <> 1) THEN ? loRest.LastErrorText RELEASE loRest RELEASE loSocket CANCEL ENDIF * OK, we're connected. * The UseConnection method has an internal reference to the underlying/internal socket. * The application can does not need to keep its socket object in existence. * ----------------------------------------------------------------- * Now setup the OAuth1 authenticator.. lcConsumerKey = "XERO_PRIVATE_APP_KEY" lcConsumerSecret = "XERO_PRIVATE_APP_SECRET" * Let's get our private key from our PFX (password protected), or the PEM (unprotected). * You can decide which to use. Either is OK, although I would recommend keeping your * private keys in a PFX and not in an unprotected PEM. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Pfx') loPfx = CreateObject('Chilkat.Pfx') lnSuccess = loPfx.LoadPfxFile("qa_data/certs/xero_private_app/public_privatekey.pfx","PFX_PASSWORD") IF (lnSuccess <> 1) THEN ? loPfx.LastErrorText RELEASE loRest RELEASE loSocket RELEASE loPfx CANCEL ENDIF loPrivKeyFromPfx = loPfx.GetPrivateKey(0) IF (loPfx.LastMethodSuccess <> 1) THEN ? loPfx.LastErrorText RELEASE loRest RELEASE loSocket RELEASE loPfx CANCEL ENDIF * Or we can load from a PEM.. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.PrivateKey') loPrivKeyFromPem = CreateObject('Chilkat.PrivateKey') lnSuccess = loPrivKeyFromPem.LoadPemFile("qa_data/certs/xero_private_app/privatekey.pem") IF (lnSuccess <> 1) THEN ? loPrivKeyFromPem.LastErrorText RELEASE loRest RELEASE loSocket RELEASE loPfx RELEASE loPrivKeyFromPem CANCEL ENDIF * Note: There are many other means for loading a private key, including * from other formats and directly from memory (i.e. not file-based). * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.OAuth1') loOauth1 = CreateObject('Chilkat.OAuth1') loOauth1.ConsumerKey = lcConsumerKey loOauth1.ConsumerSecret = lcConsumerSecret loOauth1.Token = lcConsumerKey loOauth1.TokenSecret = lcConsumerSecret loOauth1.SignatureMethod = "RSA-SHA1" loOauth1.SetRsaKey(loPrivKeyFromPfx) RELEASE loPrivKeyFromPfx * Install the OAuth1 authenticator. loRest.SetAuthOAuth1(loOauth1,0) ? "OK, the Xero OAuth1 is initialized and the REST object is ready to make REST API calls.." * ----------------------------------------------------------------- * Make a call to verify that OAuth1 through an HTTP proxy works.. * Get the full list of contacts. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.StringBuilder') loSbXml = CreateObject('Chilkat.StringBuilder') lnSuccess = loRest.FullRequestNoBodySb("GET","/api.xro/2.0/Contacts",loSbXml) IF (lnSuccess <> 1) THEN ? loRest.LastErrorText RELEASE loRest RELEASE loSocket RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml CANCEL ENDIF * A 200 response is expected for actual success. IF (loRest.ResponseStatusCode <> 200) THEN ? loSbXml.GetAsString() RELEASE loRest RELEASE loSocket RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml CANCEL ENDIF * Iterate over the contacts.. lnBAutoTrim = 0 * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml') loXml = CreateObject('Chilkat.Xml') loXml.LoadSb(loSbXml,lnBAutoTrim) loXml.SaveXml("qa_cache/xero_contacts.xml") * How many records exist? lnRecordCount = loXml.NumChildrenAt("Contacts") ? "numRecords = " + STR(lnRecordCount) i = 0 DO WHILE i < lnRecordCount loXml.I = i ? "ContactID: " + loXml.GetChildContent("Contacts|Contact[i]|ContactID") i = i + 1 ENDDO RELEASE loRest RELEASE loSocket RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml RELEASE loXml |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.