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
(Go) 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.) cert := chilkat.NewCert() success := cert.LoadPfxFile("qa_data/pfx/my_ibanity_certificate.pfx","my_pfx_password") if success == false { fmt.Println(cert.LastErrorText()) cert.DisposeCert() return } // 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. dtNow := chilkat.NewCkDateTime() dtNow.SetFromCurrentSystemTime() created := dtNow.GetAsUnixTimeStr(false) crypt2 := chilkat.NewCrypt2() crypt2.SetHashAlgorithm("sha512") crypt2.SetEncodingMode("base64") sbDigestHdrValue := chilkat.NewStringBuilder() 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. sbDigestHdrValue.Append(*crypt2.HashStringENC("")) fmt.Println("Generated Digest") fmt.Println(*sbDigestHdrValue.GetAsString()) request_target := "get /xs2a/financial-institutions" sbSigningString := chilkat.NewStringBuilder() sbSigningString.Append("(request-target): ") sbSigningString.AppendLine(request_target,false) sbSigningString.Append("host: ") sbSigningString.AppendLine("api.ibanity.com",false) sbSigningString.Append("digest: ") sbSigningString.AppendLine(*sbDigestHdrValue.GetAsString(),false) sbSigningString.Append("(created): ") sbSigningString.Append(*created) // ibanity-idempotency-key is not used with GET requests. fmt.Println("Signing String:") fmt.Println(*sbSigningString.GetAsString()) signed_headers_list := "(request-target) host digest (created)" privKey := chilkat.NewPrivateKey() success = privKey.LoadEncryptedPemFile("my_ibanity_signature_private_key.pem","pem_password") if success == false { fmt.Println(privKey.LastErrorText()) cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() return } rsa := chilkat.NewRsa() rsa.SetPssSaltLen(32) rsa.SetEncodingMode("base64") // Use the RSASSA-PSS signature algorithm rsa.SetOaepPadding(true) success = rsa.ImportPrivateKeyObj(privKey) if success == false { fmt.Println(rsa.LastErrorText()) cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() return } // Sign the signing string. sigBase64 := rsa.SignStringENC(*sbSigningString.GetAsString(),"sha-256") if rsa.LastMethodSuccess() == false { fmt.Println(rsa.LastErrorText()) cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() return } fmt.Println("Signature:") fmt.Println(*sigBase64) // Build the signature header value. sbSigHeaderValue := chilkat.NewStringBuilder() sbSigHeaderValue.Append("keyId=\"") // Use your identifier for the application's signature certificate, obtained from the Developer Portal sbSigHeaderValue.Append("a0ce296d-84c8-4bd5-8eb4-de0339950cfa") sbSigHeaderValue.Append("\",created=") sbSigHeaderValue.Append(*created) sbSigHeaderValue.Append(",algorithm=\"hs2019\",headers=\"") sbSigHeaderValue.Append(signed_headers_list) sbSigHeaderValue.Append("\",signature=\"") sbSigHeaderValue.Append(*sigBase64) sbSigHeaderValue.Append("\"") // Send the GET request.. http := chilkat.NewHttp() success = http.SetSslClientCert(cert) if success == false { fmt.Println(http.LastErrorText()) cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() sbSigHeaderValue.DisposeStringBuilder() http.DisposeHttp() return } http.SetRequestHeader("Signature",*sbSigHeaderValue.GetAsString()) http.SetRequestHeader("Digest",*sbDigestHdrValue.GetAsString()) sbResponseBody := chilkat.NewStringBuilder() success = http.QuickGetSb("https://api.ibanity.com/xs2a/financial-institutions",sbResponseBody) if success == false { fmt.Println(http.LastErrorText()) cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() sbSigHeaderValue.DisposeStringBuilder() http.DisposeHttp() sbResponseBody.DisposeStringBuilder() return } jResp := chilkat.NewJsonObject() jResp.LoadSb(sbResponseBody) jResp.SetEmitCompact(false) fmt.Println("Response Body:") fmt.Println(*jResp.Emit()) respStatusCode := http.LastStatus() fmt.Println("Response Status Code = ", respStatusCode) if respStatusCode >= 400 { fmt.Println("Response Header:") fmt.Println(http.LastHeader()) fmt.Println("Failed.") cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() sbSigHeaderValue.DisposeStringBuilder() http.DisposeHttp() sbResponseBody.DisposeStringBuilder() jResp.DisposeJsonObject() return } // 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 var attributesBic *string = new(string) var attributesBulkPaymentsEnabled bool var attributesCountry *string = new(string) var attributesFinancialInstitutionCustomerReferenceRequired bool var attributesFutureDatedPaymentsAllowed bool var attributesLogoUrl *string = new(string) var attributesMaintenanceFrom *string = new(string) var attributesMaintenanceTo *string = new(string) var attributesMaintenanceType *string = new(string) var attributesMaxRequestedAccountReferences *string = new(string) var attributesMinRequestedAccountReferences int var attributesName *string = new(string) var attributesPaymentsEnabled bool var attributesPeriodicPaymentsEnabled bool var attributesPrimaryColor *string = new(string) var attributesRequiresCredentialStorage bool var attributesRequiresCustomerIpAddress bool var attributesSandbox bool var attributesSecondaryColor *string = new(string) var attributesSharedBrandName *string = new(string) var attributesSharedBrandReference *string = new(string) var attributesStatus *string = new(string) var id *string = new(string) var linksSelf *string = new(string) var v_type *string = new(string) var j int var count_j int var strVal *string = new(string) linksFirst := jResp.StringOf("links.first") metaPagingLimit := jResp.IntOf("meta.paging.limit") i := 0 count_i := jResp.SizeOfArray("data") for i < count_i { jResp.SetI(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") for j < count_j { jResp.SetJ(j) strVal = jResp.StringOf("data[i].attributes.authorizationModels[j]") j = j + 1 } j = 0 count_j = jResp.SizeOfArray("data[i].attributes.bulkPaymentsProductTypes") for j < count_j { jResp.SetJ(j) strVal = jResp.StringOf("data[i].attributes.bulkPaymentsProductTypes[j]") j = j + 1 } j = 0 count_j = jResp.SizeOfArray("data[i].attributes.paymentsProductTypes") for j < count_j { jResp.SetJ(j) strVal = jResp.StringOf("data[i].attributes.paymentsProductTypes[j]") j = j + 1 } j = 0 count_j = jResp.SizeOfArray("data[i].attributes.periodicPaymentsProductTypes") for j < count_j { jResp.SetJ(j) strVal = jResp.StringOf("data[i].attributes.periodicPaymentsProductTypes[j]") j = j + 1 } i = i + 1 } cert.DisposeCert() dtNow.DisposeCkDateTime() crypt2.DisposeCrypt2() sbDigestHdrValue.DisposeStringBuilder() sbSigningString.DisposeStringBuilder() privKey.DisposePrivateKey() rsa.DisposeRsa() sbSigHeaderValue.DisposeStringBuilder() http.DisposeHttp() sbResponseBody.DisposeStringBuilder() jResp.DisposeJsonObject() |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.