Go
Go
Ibanity XS2A List Financial Institutions
See more Ibanity Examples
Demonstrates how to send a request to get a list of financial institutions.Chilkat Go Downloads
success := false
// 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.SetPkcsPadding(false)
success = rsa.UsePrivateKey(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()