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
(Perl) 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
use chilkat(); # 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::CkCert->new(); $success = $cert->LoadPfxFile("qa_data/pfx/my_ibanity_certificate.pfx","my_pfx_password"); if ($success == 0) { print $cert->lastErrorText() . "\r\n"; exit; } # 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::CkDateTime->new(); $dtNow->SetFromCurrentSystemTime(); $created = $dtNow->getAsUnixTimeStr(0); $crypt2 = chilkat::CkCrypt2->new(); $crypt2->put_HashAlgorithm("sha512"); $crypt2->put_EncodingMode("base64"); $sbDigestHdrValue = chilkat::CkStringBuilder->new(); $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("")); print "Generated Digest" . "\r\n"; print $sbDigestHdrValue->getAsString() . "\r\n"; $request_target = "get /xs2a/financial-institutions"; $sbSigningString = chilkat::CkStringBuilder->new(); $sbSigningString->Append("(request-target): "); $sbSigningString->AppendLine($request_target,0); $sbSigningString->Append("host: "); $sbSigningString->AppendLine("api.ibanity.com",0); $sbSigningString->Append("digest: "); $sbSigningString->AppendLine($sbDigestHdrValue->getAsString(),0); $sbSigningString->Append("(created): "); $sbSigningString->Append($created); # ibanity-idempotency-key is not used with GET requests. print "Signing String:" . "\r\n"; print $sbSigningString->getAsString() . "\r\n"; $signed_headers_list = "(request-target) host digest (created)"; $privKey = chilkat::CkPrivateKey->new(); $success = $privKey->LoadEncryptedPemFile("my_ibanity_signature_private_key.pem","pem_password"); if ($success == 0) { print $privKey->lastErrorText() . "\r\n"; exit; } $rsa = chilkat::CkRsa->new(); $rsa->put_PssSaltLen(32); $rsa->put_EncodingMode("base64"); # Use the RSASSA-PSS signature algorithm $rsa->put_OaepPadding(1); $success = $rsa->ImportPrivateKeyObj($privKey); if ($success == 0) { print $rsa->lastErrorText() . "\r\n"; exit; } # Sign the signing string. $sigBase64 = $rsa->signStringENC($sbSigningString->getAsString(),"sha-256"); if ($rsa->get_LastMethodSuccess() == 0) { print $rsa->lastErrorText() . "\r\n"; exit; } print "Signature:" . "\r\n"; print $sigBase64 . "\r\n"; # Build the signature header value. $sbSigHeaderValue = chilkat::CkStringBuilder->new(); $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::CkHttp->new(); $success = $http->SetSslClientCert($cert); if ($success == 0) { print $http->lastErrorText() . "\r\n"; exit; } $http->SetRequestHeader("Signature",$sbSigHeaderValue->getAsString()); $http->SetRequestHeader("Digest",$sbDigestHdrValue->getAsString()); $sbResponseBody = chilkat::CkStringBuilder->new(); $success = $http->QuickGetSb("https://api.ibanity.com/xs2a/financial-institutions",$sbResponseBody); if ($success == 0) { print $http->lastErrorText() . "\r\n"; exit; } $jResp = chilkat::CkJsonObject->new(); $jResp->LoadSb($sbResponseBody); $jResp->put_EmitCompact(0); print "Response Body:" . "\r\n"; print $jResp->emit() . "\r\n"; $respStatusCode = $http->get_LastStatus(); print "Response Status Code = " . $respStatusCode . "\r\n"; if ($respStatusCode >= 400) { print "Response Header:" . "\r\n"; print $http->lastHeader() . "\r\n"; print "Failed." . "\r\n"; exit; } # 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"); while ($i < $count_i) { $jResp->put_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"); while ($j < $count_j) { $jResp->put_J($j); $strVal = $jResp->stringOf("data[i].attributes.authorizationModels[j]"); $j = $j + 1; } $j = 0; $count_j = $jResp->SizeOfArray("data[i].attributes.bulkPaymentsProductTypes"); while ($j < $count_j) { $jResp->put_J($j); $strVal = $jResp->stringOf("data[i].attributes.bulkPaymentsProductTypes[j]"); $j = $j + 1; } $j = 0; $count_j = $jResp->SizeOfArray("data[i].attributes.paymentsProductTypes"); while ($j < $count_j) { $jResp->put_J($j); $strVal = $jResp->stringOf("data[i].attributes.paymentsProductTypes[j]"); $j = $j + 1; } $j = 0; $count_j = $jResp->SizeOfArray("data[i].attributes.periodicPaymentsProductTypes"); while ($j < $count_j) { $jResp->put_J($j); $strVal = $jResp->stringOf("data[i].attributes.periodicPaymentsProductTypes[j]"); $j = $j + 1; } $i = $i + 1; } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.