Sample code for 30+ languages & platforms
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

Go
    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()