Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(Excel) Ibanity XS2A List Financial InstitutionsSee more Ibanity ExamplesDemonstrates how to send a request to get a list of financial institutions. For more information, see https://documentation.ibanity.com/xs2a/api/curl#authentication
' This example requires the Chilkat API to have been previously unlocked. ' See Global Unlock Sample for sample code. ' Send the following request: ' $ curl -X GET https://api.ibanity.com/xs2a/financial-institutions \ ' --cert certificate.pem \ ' --key private_key.pem \ ' -H 'Signature: keyId="75b5d796-de5c-400a-81ce-e72371b01cbc",created=1599659223,algorithm="hs2019",headers="(request-target) digest (created) host",signature="BASE64(RSA-SHA256(SIGNING_STRING))"' \ ' -H 'Digest: SHA-512=beDaRguyEb8fhh5wnl37bOTDtvhuYZyZNkTZ9LiC9Wc=' ' 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.) Dim cert As Chilkat.Cert Set cert = Chilkat.NewCert success = cert.LoadPfxFile("qa_data/pfx/my_ibanity_certificate.pfx","my_pfx_password") If (success = False) Then Debug.Print cert.LastErrorText Exit Sub End If ' We need to calculate the Digest and Signature header fields. ' For a detailed explanation, see Calculate Ibanity HTTP Signature Example ' We'll just write the code here as briefly as possible. Dim dtNow As Chilkat.CkDateTime Set dtNow = Chilkat.NewCkDateTime Dim success As Boolean success = dtNow.SetFromCurrentSystemTime() created = dtNow.GetAsUnixTimeStr(False) Dim crypt2 As Chilkat.Crypt2 Set crypt2 = Chilkat.NewCrypt2 crypt2.HashAlgorithm = "sha512" crypt2.EncodingMode = "base64" Dim sbDigestHdrValue As Chilkat.StringBuilder Set sbDigestHdrValue = Chilkat.NewStringBuilder success = sbDigestHdrValue.Append("SHA-512=") ' GET requests have empty payloads. The SHA-512 hash of the empty string is the same for all GET requests. ' Therefore all GET requests will use "z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==" ' You can eliminate the explicit hash computation (for GET requests) and simply use the above literal string. success = sbDigestHdrValue.Append(crypt2.HashStringENC("")) Debug.Print "Generated Digest" Debug.Print sbDigestHdrValue.GetAsString() request_target = "get /xs2a/financial-institutions" Dim sbSigningString As Chilkat.StringBuilder Set sbSigningString = Chilkat.NewStringBuilder success = sbSigningString.Append("(request-target): ") success = sbSigningString.AppendLine(request_target,False) success = sbSigningString.Append("host: ") success = sbSigningString.AppendLine("api.ibanity.com",False) success = sbSigningString.Append("digest: ") success = sbSigningString.AppendLine(sbDigestHdrValue.GetAsString(),False) success = sbSigningString.Append("(created): ") success = sbSigningString.Append(created) ' ibanity-idempotency-key is not used with GET requests. Debug.Print "Signing String:" Debug.Print sbSigningString.GetAsString() signed_headers_list = "(request-target) host digest (created)" Dim privKey As Chilkat.PrivateKey Set privKey = Chilkat.NewPrivateKey success = privKey.LoadEncryptedPemFile("my_ibanity_signature_private_key.pem","pem_password") If (success = False) Then Debug.Print privKey.LastErrorText Exit Sub End If Dim rsa As Chilkat.Rsa Set rsa = Chilkat.NewRsa rsa.PssSaltLen = 32 rsa.EncodingMode = "base64" ' Use the RSASSA-PSS signature algorithm rsa.OaepPadding = True success = rsa.ImportPrivateKeyObj(privKey) If (success = False) Then Debug.Print rsa.LastErrorText Exit Sub End If ' Sign the signing string. sigBase64 = rsa.SignStringENC(sbSigningString.GetAsString(),"sha-256") If (rsa.LastMethodSuccess = False) Then Debug.Print rsa.LastErrorText Exit Sub End If Debug.Print "Signature:" Debug.Print sigBase64 ' Build the signature header value. Dim sbSigHeaderValue As Chilkat.StringBuilder Set sbSigHeaderValue = Chilkat.NewStringBuilder success = sbSigHeaderValue.Append("keyId=""") ' Use your identifier for the application's signature certificate, obtained from the Developer Portal success = sbSigHeaderValue.Append("a0ce296d-84c8-4bd5-8eb4-de0339950cfa") success = sbSigHeaderValue.Append(""",created=") success = sbSigHeaderValue.Append(created) success = sbSigHeaderValue.Append(",algorithm=""hs2019"",headers=""") success = sbSigHeaderValue.Append(signed_headers_list) success = sbSigHeaderValue.Append(""",signature=""") success = sbSigHeaderValue.Append(sigBase64) success = sbSigHeaderValue.Append("""") ' Send the GET request.. Dim http As Chilkat.Http Set http = Chilkat.NewHttp success = http.SetSslClientCert(cert) If (success = False) Then Debug.Print http.LastErrorText Exit Sub End If http.SetRequestHeader "Signature",sbSigHeaderValue.GetAsString() http.SetRequestHeader "Digest",sbDigestHdrValue.GetAsString() Dim sbResponseBody As Chilkat.StringBuilder Set sbResponseBody = Chilkat.NewStringBuilder success = http.QuickGetSb("https://api.ibanity.com/xs2a/financial-institutions",sbResponseBody) If (success = False) Then Debug.Print http.LastErrorText Exit Sub End If Dim jResp As Chilkat.JsonObject Set jResp = Chilkat.NewJsonObject success = jResp.LoadSb(sbResponseBody) jResp.EmitCompact = False Debug.Print "Response Body:" Debug.Print jResp.Emit() respStatusCode = http.LastStatus Debug.Print "Response Status Code = "; respStatusCode If (respStatusCode >= 400) Then Debug.Print "Response Header:" Debug.Print http.LastHeader Debug.Print "Failed." Exit Sub End If ' Sample output: ' (Sample code for parsing the JSON response is shown below) ' { ' "data": [ ' { ' "attributes": { ' "authorizationModels": [ ' "detailed", ' "financialInstitutionOffered" ' ], ' "bic": "NBBEBEBB203", ' "bulkPaymentsEnabled": true, ' "bulkPaymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "country": null, ' "financialInstitutionCustomerReferenceRequired": false, ' "futureDatedPaymentsAllowed": true, ' "logoUrl": "https://s3.eu-central-1.amazonaws.com/ibanity-production-financial-institution-assets/sandbox.png", ' "maintenanceFrom": null, ' "maintenanceTo": null, ' "maintenanceType": null, ' "maxRequestedAccountReferences": null, ' "minRequestedAccountReferences": 0, ' "name": "Bogus Financial", ' "paymentsEnabled": true, ' "paymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "periodicPaymentsEnabled": true, ' "periodicPaymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "primaryColor": "#7d39ff", ' "requiresCredentialStorage": false, ' "requiresCustomerIpAddress": false, ' "sandbox": true, ' "secondaryColor": "#3DF2C2", ' "sharedBrandName": null, ' "sharedBrandReference": null, ' "status": "beta" ' }, ' "id": "2d3d70a4-cb3c-477c-97e1-cbe495b82841", ' "links": { ' "self": "https://api.ibanity.com/xs2a/financial-institutions/2d3d70a4-cb3c-477c-97e1-cbe495b82841" ' }, ' "type": "financialInstitution" ' }, ' { ' "attributes": { ' "authorizationModels": [ ' "detailed", ' "financialInstitutionOffered" ' ], ' "bic": "NBBEBEBB203", ' "bulkPaymentsEnabled": true, ' "bulkPaymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "country": null, ' "financialInstitutionCustomerReferenceRequired": false, ' "futureDatedPaymentsAllowed": true, ' "logoUrl": "https://s3.eu-central-1.amazonaws.com/ibanity-production-financial-institution-assets/sandbox.png", ' "maintenanceFrom": null, ' "maintenanceTo": null, ' "maintenanceType": null, ' "maxRequestedAccountReferences": null, ' "minRequestedAccountReferences": 0, ' "name": "XYZ Trust", ' "paymentsEnabled": true, ' "paymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "periodicPaymentsEnabled": true, ' "periodicPaymentsProductTypes": [ ' "sepaCreditTransfer" ' ], ' "primaryColor": "#7d39ff", ' "requiresCredentialStorage": false, ' "requiresCustomerIpAddress": false, ' "sandbox": true, ' "secondaryColor": "#3DF2C2", ' "sharedBrandName": null, ' "sharedBrandReference": null, ' "status": "beta" ' }, ' "id": "d4100f28-936b-4379-a3f8-86314a2014fb", ' "links": { ' "self": "https://api.ibanity.com/xs2a/financial-institutions/d4100f28-936b-4379-a3f8-86314a2014fb" ' }, ' "type": "financialInstitution" ' } ' ], ' "links": { ' "first": "https://api.ibanity.com/xs2a/financial-institutions" ' }, ' "meta": { ' "paging": { ' "limit": 10 ' } ' } ' } ' Sample code for parsing the JSON response... ' Use the following online tool to generate parsing code from sample JSON: ' Generate Parsing Code from JSON linksFirst = jResp.StringOf("links.first") metaPagingLimit = jResp.IntOf("meta.paging.limit") i = 0 count_i = jResp.SizeOfArray("data") Do While i < count_i jResp.I = i attributesBic = jResp.StringOf("data[i].attributes.bic") attributesBulkPaymentsEnabled = jResp.BoolOf("data[i].attributes.bulkPaymentsEnabled") attributesCountry = jResp.StringOf("data[i].attributes.country") attributesFinancialInstitutionCustomerReferenceRequired = jResp.BoolOf("data[i].attributes.financialInstitutionCustomerReferenceRequired") attributesFutureDatedPaymentsAllowed = jResp.BoolOf("data[i].attributes.futureDatedPaymentsAllowed") attributesLogoUrl = jResp.StringOf("data[i].attributes.logoUrl") attributesMaintenanceFrom = jResp.StringOf("data[i].attributes.maintenanceFrom") attributesMaintenanceTo = jResp.StringOf("data[i].attributes.maintenanceTo") attributesMaintenanceType = jResp.StringOf("data[i].attributes.maintenanceType") attributesMaxRequestedAccountReferences = jResp.StringOf("data[i].attributes.maxRequestedAccountReferences") attributesMinRequestedAccountReferences = jResp.IntOf("data[i].attributes.minRequestedAccountReferences") attributesName = jResp.StringOf("data[i].attributes.name") attributesPaymentsEnabled = jResp.BoolOf("data[i].attributes.paymentsEnabled") attributesPeriodicPaymentsEnabled = jResp.BoolOf("data[i].attributes.periodicPaymentsEnabled") attributesPrimaryColor = jResp.StringOf("data[i].attributes.primaryColor") attributesRequiresCredentialStorage = jResp.BoolOf("data[i].attributes.requiresCredentialStorage") attributesRequiresCustomerIpAddress = jResp.BoolOf("data[i].attributes.requiresCustomerIpAddress") attributesSandbox = jResp.BoolOf("data[i].attributes.sandbox") attributesSecondaryColor = jResp.StringOf("data[i].attributes.secondaryColor") attributesSharedBrandName = jResp.StringOf("data[i].attributes.sharedBrandName") attributesSharedBrandReference = jResp.StringOf("data[i].attributes.sharedBrandReference") attributesStatus = jResp.StringOf("data[i].attributes.status") id = jResp.StringOf("data[i].id") linksSelf = jResp.StringOf("data[i].links.self") v_type = jResp.StringOf("data[i].type") j = 0 count_j = jResp.SizeOfArray("data[i].attributes.authorizationModels") Do While j < count_j jResp.J = j strVal = jResp.StringOf("data[i].attributes.authorizationModels[j]") j = j + 1 Loop j = 0 count_j = jResp.SizeOfArray("data[i].attributes.bulkPaymentsProductTypes") Do While j < count_j jResp.J = j strVal = jResp.StringOf("data[i].attributes.bulkPaymentsProductTypes[j]") j = j + 1 Loop j = 0 count_j = jResp.SizeOfArray("data[i].attributes.paymentsProductTypes") Do While j < count_j jResp.J = j strVal = jResp.StringOf("data[i].attributes.paymentsProductTypes[j]") j = j + 1 Loop j = 0 count_j = jResp.SizeOfArray("data[i].attributes.periodicPaymentsProductTypes") Do While j < count_j jResp.J = j strVal = jResp.StringOf("data[i].attributes.periodicPaymentsProductTypes[j]") j = j + 1 Loop i = i + 1 Loop |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.