Sample code for 30+ languages & platforms
SQL Server

Isabel Connect Create First Access Token and Refresh Token

See more Ibanity Examples

Creates your first access token and refresh token. Once created, the refresh token can be used to get a new access token after it expires, or before it expires.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- This example assumes the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @http int
    EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Implements the following CURL command:

    -- curl -X POST https://api.ibanity.com/isabel-connect/oauth2/token \
    -- --cert certificate.pem:qwertyuiop1 \
    -- --key private_key.pem  \
    -- -H "Content-Type: application/x-www-form-urlencoded" \
    -- -H "Accept: application/vnd.api+json" \
    -- -H "Ibanity-Idempotency-Key: af621a8f-f74b-41a2-b011-336997633df4"  \
    -- -d grant_type=authorization_code \
    -- -d code=valid_authorization_code \
    -- -d client_id=valid_client_id \
    -- -d client_secret=valid_client_secret \
    -- -d redirect_uri=https://fake-tpp.com 

    -- Ibanity provides the certificate + private key in PFX format.  This example will use the .pfx instead of the pair of PEM files.
    -- (It is also possible to implement using Chilkat with the PEM files, but PFX is easier.)
    DECLARE @cert int
    EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT

    EXEC sp_OAMethod @cert, 'LoadPfxFile', @success OUT, 'qa_data/pfx/my_ibanity_certificate.pfx', 'my_pfx_password'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @http
        EXEC @hr = sp_OADestroy @cert
        RETURN
      END

    EXEC sp_OAMethod @http, 'SetSslClientCert', @success OUT, @cert
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @http
        EXEC @hr = sp_OADestroy @cert
        RETURN
      END

    DECLARE @req int
    EXEC @hr = sp_OACreate 'Chilkat.HttpRequest', @req OUT

    EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
    EXEC sp_OASetProperty @req, 'Path', '/isabel-connect/oauth2/token'
    EXEC sp_OASetProperty @req, 'ContentType', 'application/x-www-form-urlencoded'
    EXEC sp_OAMethod @req, 'AddParam', NULL, 'grant_type', 'authorization_code'

    -- Note: For sandbox testing, we literally want to use the strings
    -- "valid_authorization_code", "valid_client_id", and "valid_client_secret".
    -- For the live app, you would replace these with actual values.
    EXEC sp_OAMethod @req, 'AddParam', NULL, 'code', 'valid_authorization_code'
    EXEC sp_OAMethod @req, 'AddParam', NULL, 'client_id', 'valid_client_id'
    EXEC sp_OAMethod @req, 'AddParam', NULL, 'client_secret', 'valid_client_secret'
    EXEC sp_OAMethod @req, 'AddParam', NULL, 'redirect_uri', 'https://fake-tpp.com'

    EXEC sp_OAMethod @req, 'AddHeader', NULL, 'Accept', 'application/vnd.api+json'

    DECLARE @crypt int
    EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT

    DECLARE @idempotencyKey nvarchar(4000)
    EXEC sp_OAMethod @crypt, 'GenerateUuid', @idempotencyKey OUT

    PRINT 'Ibanity-Idempotency-Key: ' + @idempotencyKey
    EXEC sp_OAMethod @req, 'AddHeader', NULL, 'Ibanity-Idempotency-Key', @idempotencyKey

    DECLARE @resp int
    EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT

    EXEC sp_OAMethod @http, 'HttpReq', @success OUT, 'https://api.ibanity.com/isabel-connect/oauth2/token', @req, @resp
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @http
        EXEC @hr = sp_OADestroy @cert
        EXEC @hr = sp_OADestroy @req
        EXEC @hr = sp_OADestroy @crypt
        EXEC @hr = sp_OADestroy @resp
        RETURN
      END

    DECLARE @sbResponseBody int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponseBody OUT

    EXEC sp_OAMethod @resp, 'GetBodySb', @success OUT, @sbResponseBody
    DECLARE @jResp int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jResp OUT

    EXEC sp_OAMethod @jResp, 'LoadSb', @success OUT, @sbResponseBody
    EXEC sp_OASetProperty @jResp, 'EmitCompact', 0


    PRINT 'Response Body:'
    EXEC sp_OAMethod @jResp, 'Emit', @sTmp0 OUT
    PRINT @sTmp0

    DECLARE @respStatusCode int
    EXEC sp_OAGetProperty @resp, 'StatusCode', @respStatusCode OUT

    PRINT 'Response Status Code = ' + @respStatusCode
    IF @respStatusCode >= 400
      BEGIN

        PRINT 'Response Header:'
        EXEC sp_OAGetProperty @resp, 'Header', @sTmp0 OUT
        PRINT @sTmp0

        PRINT 'Failed.'
        EXEC @hr = sp_OADestroy @http
        EXEC @hr = sp_OADestroy @cert
        EXEC @hr = sp_OADestroy @req
        EXEC @hr = sp_OADestroy @crypt
        EXEC @hr = sp_OADestroy @resp
        EXEC @hr = sp_OADestroy @sbResponseBody
        EXEC @hr = sp_OADestroy @jResp
        RETURN
      END

    -- Sample JSON response:
    -- (Sample code for parsing the JSON response is shown below)

    -- {
    --   "token_type": "Bearer",
    --   "scope": "cloudconnect",
    --   "refresh_token": "valid_refresh_token",
    --   "expires_in": 1799,
    --   "access_token": "access_token_1617371230"
    -- }

    -- Sample code for parsing the JSON response...
    -- Use the following online tool to generate parsing code from sample JSON:
    -- Generate Parsing Code from JSON

    DECLARE @token_type nvarchar(4000)
    EXEC sp_OAMethod @jResp, 'StringOf', @token_type OUT, 'token_type'
    DECLARE @scope nvarchar(4000)
    EXEC sp_OAMethod @jResp, 'StringOf', @scope OUT, 'scope'
    DECLARE @refresh_token nvarchar(4000)
    EXEC sp_OAMethod @jResp, 'StringOf', @refresh_token OUT, 'refresh_token'
    DECLARE @expires_in int
    EXEC sp_OAMethod @jResp, 'IntOf', @expires_in OUT, 'expires_in'
    DECLARE @access_token nvarchar(4000)
    EXEC sp_OAMethod @jResp, 'StringOf', @access_token OUT, 'access_token'

    -- Save to a file for future use in refreshing the access token.
    -- The refresh token is the same each time we refresh to get a new access token.
    EXEC sp_OAMethod @jResp, 'WriteFile', @success OUT, 'qa_data/tokens/isabel_refresh_token.json'

    -- Also save to a file to be used as the current access token.
    EXEC sp_OAMethod @jResp, 'WriteFile', @success OUT, 'qa_data/tokens/isabel_access_token.json'

    EXEC @hr = sp_OADestroy @http
    EXEC @hr = sp_OADestroy @cert
    EXEC @hr = sp_OADestroy @req
    EXEC @hr = sp_OADestroy @crypt
    EXEC @hr = sp_OADestroy @resp
    EXEC @hr = sp_OADestroy @sbResponseBody
    EXEC @hr = sp_OADestroy @jResp


END
GO