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
(PHP Extension) 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
<?php // The version number (9_5_0) should match version of the Chilkat extension used, omitting the micro-version number. // For example, if using Chilkat v9.5.0.48, then include as shown here: include("chilkat_9_5_0.php"); // 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 = new CkCert(); $success = $cert->LoadPfxFile('qa_data/pfx/my_ibanity_certificate.pfx','my_pfx_password'); if ($success == false) { print $cert->lastErrorText() . "\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 = new CkDateTime(); $dtNow->SetFromCurrentSystemTime(); $created = $dtNow->getAsUnixTimeStr(false); $crypt2 = new CkCrypt2(); $crypt2->put_HashAlgorithm('sha512'); $crypt2->put_EncodingMode('base64'); $sbDigestHdrValue = new CkStringBuilder(); $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' . "\n"; print $sbDigestHdrValue->getAsString() . "\n"; $request_target = 'get /xs2a/financial-institutions'; $sbSigningString = new CkStringBuilder(); $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. print 'Signing String:' . "\n"; print $sbSigningString->getAsString() . "\n"; $signed_headers_list = '(request-target) host digest (created)'; $privKey = new CkPrivateKey(); $success = $privKey->LoadEncryptedPemFile('my_ibanity_signature_private_key.pem','pem_password'); if ($success == false) { print $privKey->lastErrorText() . "\n"; exit; } $rsa = new CkRsa(); $rsa->put_PssSaltLen(32); $rsa->put_EncodingMode('base64'); // Use the RSASSA-PSS signature algorithm $rsa->put_OaepPadding(true); $success = $rsa->ImportPrivateKeyObj($privKey); if ($success == false) { print $rsa->lastErrorText() . "\n"; exit; } // Sign the signing string. $sigBase64 = $rsa->signStringENC($sbSigningString->getAsString(),'sha-256'); if ($rsa->get_LastMethodSuccess() == false) { print $rsa->lastErrorText() . "\n"; exit; } print 'Signature:' . "\n"; print $sigBase64 . "\n"; // Build the signature header value. $sbSigHeaderValue = new CkStringBuilder(); $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 = new CkHttp(); $success = $http->SetSslClientCert($cert); if ($success == false) { print $http->lastErrorText() . "\n"; exit; } $http->SetRequestHeader('Signature',$sbSigHeaderValue->getAsString()); $http->SetRequestHeader('Digest',$sbDigestHdrValue->getAsString()); $sbResponseBody = new CkStringBuilder(); $success = $http->QuickGetSb('https://api.ibanity.com/xs2a/financial-institutions',$sbResponseBody); if ($success == false) { print $http->lastErrorText() . "\n"; exit; } $jResp = new CkJsonObject(); $jResp->LoadSb($sbResponseBody); $jResp->put_EmitCompact(false); print 'Response Body:' . "\n"; print $jResp->emit() . "\n"; $respStatusCode = $http->get_LastStatus(); print 'Response Status Code = ' . $respStatusCode . "\n"; if ($respStatusCode >= 400) { print 'Response Header:' . "\n"; print $http->lastHeader() . "\n"; print 'Failed.' . "\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.