![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Belgium eHealth Platform - AddressBook - Search for ProfessionalsSee more Belgian eHealth Platform ExamplesDemonstrates how to search for professionals using the AddressBook API.For more information, see https://www.ehealth.fgov.be/ehealthplatform/nl/data/file/view/6c419e5685327eed7200d1c543c38a55d5387d30?name=AddressBook%20Consultation%20WS%20v.1%20-%20Cookbook%20v.1.11%20dd%2031082023.pdf
IncludeFile "CkBinData.pb" IncludeFile "CkDateTime.pb" IncludeFile "CkHttp.pb" IncludeFile "CkXml.pb" IncludeFile "CkHttpResponse.pb" IncludeFile "CkCert.pb" Procedure ChilkatExample() ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; -------------------------------------------------------------------------------- ; Also see Chilkat's Online WSDL Code Generator ; to generate code and SOAP Request and Response XML for each operation in a WSDL. ; -------------------------------------------------------------------------------- success.i = 1 ; Provide a certificate + private key. ; Note: If your certificate + private key is located on a hardware token or smartcard, you can call a different function to load from smartcard.. cert.i = CkCert::ckCreate() If cert.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkCert::ckLoadPfxFile(cert,"SSIN=12345678.acc.p12","p12_password") If success <> 1 Debug CkCert::ckLastErrorText(cert) CkCert::ckDispose(cert) ProcedureReturn EndIf ; Let's get the SAML Security Token obtained from https://services-acpt.ehealth.fgov.be/IAM/SecurityTokenService/v1/RequestSecurityToken ; a very short time ago.. ; See this example for how we got the SAML security token: eHealth Belgium Request Security Token bdSecToken.i = CkBinData::ckCreate() If bdSecToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkBinData::ckLoadFile(bdSecToken,"qa_data/tokens/ehealth-fgov-be-sectoken.xml") If success = 0 Debug "Failed to load SAML security token" CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) ProcedureReturn EndIf ; The SAML security token is just the part from <Assertion ..> ... </Assertion> ; So let's get just that part.. startIdx.i = CkBinData::ckFindString(bdSecToken,"<Assertion",0,"utf-8") If startIdx < 0 Debug "Did not find the start of the SAML assertion." CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) ProcedureReturn EndIf endIdx.i = CkBinData::ckFindString(bdSecToken,"</Assertion>",0,"utf-8") If endIdx < 0 Debug "Did not find the end of the SAML assertion." CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) ProcedureReturn EndIf ; Adjust the index to the 1st byte after "</Assertion>" endIdx = endIdx + 12 base64_saml_token.s = CkBinData::ckGetEncodedChunk(bdSecToken,startIdx,endIdx - startIdx,"base64") Debug base64_saml_token ; Our SOAP request will look like this: ; The SOAP request to search for professionals looks like this: ; <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:add="urn:be:fgov:ehealth:addressbook:protocol:v1"> ; <soapenv:Header> ; <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> ; <wsse:BinarySecurityToken ; ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID" ; EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">BASE64_SAML_TOKEN</wsse:BinarySecurityToken> ; </wsse:Security> ; </soapenv:Header> ; <soapenv:Body> ; <add:SearchProfessionalsRequest Id="bdc38ae62-3e7f-4f80-80f7-c3e745500fa3" IssueInstant="2016-03-23T18:49:26.968+01:00" Offset="0" MaxElements="100"> ; <add:SSIN>74062423769</add:SSIN> ; </add:SearchProfessionalsRequest> ; </soapenv:Body> ; </soapenv:Envelope> xml.i = CkXml::ckCreate() If xml.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkXml::setCkTag(xml, "soapenv:Envelope") CkXml::ckUpdateAttrAt(xml,"soapenv:Header|wsse:Security",1,"xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd") CkXml::ckUpdateAttrAt(xml,"soapenv:Header|wsse:Security|wsse:BinarySecurityToken",1,"ValueType","http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID") CkXml::ckUpdateAttrAt(xml,"soapenv:Header|wsse:Security|wsse:BinarySecurityToken",1,"EncodingType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary") CkXml::ckUpdateChildContent(xml,"soapenv:Header|wsse:Security|wsse:BinarySecurityToken",base64_saml_token) CkXml::ckUpdateAttrAt(xml,"soapenv:Body|add:SearchProfessionalsRequest",1,"Id","bdc38ae62-3e7f-4f80-80f7-c3e745500fa3") dt.i = CkDateTime::ckCreate() If dt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkDateTime::ckSetFromCurrentSystemTime(dt) CkXml::ckUpdateAttrAt(xml,"soapenv:Body|add:SearchProfessionalsRequest",1,"IssueInstant",CkDateTime::ckGetAsTimestamp(dt,1)) CkXml::ckUpdateAttrAt(xml,"soapenv:Body|add:SearchProfessionalsRequest",1,"Offset","0") CkXml::ckUpdateAttrAt(xml,"soapenv:Body|add:SearchProfessionalsRequest",1,"MaxElements","100") CkXml::ckUpdateChildContent(xml,"soapenv:Body|add:SearchProfessionalsRequest|urn:SSIN","74062423769") Debug CkXml::ckGetXml(xml) http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkHttp::ckSetSslClientCert(http,cert) If success <> 1 Debug CkHttp::ckLastErrorText(http) CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) CkXml::ckDispose(xml) CkDateTime::ckDispose(dt) CkHttp::ckDispose(http) ProcedureReturn EndIf CkHttp::ckSetRequestHeader(http,"Content-Type","text/xml") CkHttp::ckSetRequestHeader(http,"SOAPAction","urn:be:fgov:ehealth:addressbook:protocol:v1:searchProfessionals") resp.i = CkHttp::ckPostXml(http,"https://services.ehealth.fgov.be/AddressBook/v1",CkXml::ckGetXml(xml),"utf-8") If CkHttp::ckLastMethodSuccess(http) = 0 Debug CkHttp::ckLastErrorText(http) CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) CkXml::ckDispose(xml) CkDateTime::ckDispose(dt) CkHttp::ckDispose(http) ProcedureReturn EndIf Debug CkHttpResponse::ckBodyStr(resp) Debug "response status code = " + Str(CkHttpResponse::ckStatusCode(resp)) CkHttpResponse::ckDispose(resp) CkCert::ckDispose(cert) CkBinData::ckDispose(bdSecToken) CkXml::ckDispose(xml) CkDateTime::ckDispose(dt) CkHttp::ckDispose(http) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.