Sample code for 30+ languages & platforms
DataFlex

Belgium eHealth Platform - AddressBook - Search for Professionals

See more Belgian eHealth Platform Examples

Demonstrates how to search for professionals using the AddressBook API.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vCert
    Handle hoCert
    Handle hoBdSecToken
    Integer iStartIdx
    Integer iEndIdx
    String sBase64_saml_token
    Handle hoXml
    Handle hoDt
    Handle hoHttp
    String sXmlStr
    Variant vResp
    Handle hoResp
    String sTemp1
    Integer iTemp1

    Move False To iSuccess

    // 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.
    // --------------------------------------------------------------------------------

    // 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..
    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End
    Get ComLoadPfxFile Of hoCert "SSIN=12345678.acc.p12" "p12_password" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCert To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // 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
    Get Create (RefClass(cComChilkatBinData)) To hoBdSecToken
    If (Not(IsComObjectCreated(hoBdSecToken))) Begin
        Send CreateComObject of hoBdSecToken
    End
    Get ComLoadFile Of hoBdSecToken "qa_data/tokens/ehealth-fgov-be-sectoken.xml" To iSuccess
    If (iSuccess = False) Begin
        Showln "Failed to load SAML security token"
        Procedure_Return
    End

    // The SAML security token is just the part from <Assertion ..> ... </Assertion>
    // So let's get just that part..
    Get ComFindString Of hoBdSecToken "<Assertion" 0 "utf-8" To iStartIdx
    If (iStartIdx < 0) Begin
        Showln "Did not find the start of the SAML assertion."
        Procedure_Return
    End

    Get ComFindString Of hoBdSecToken "</Assertion>" 0 "utf-8" To iEndIdx
    If (iEndIdx < 0) Begin
        Showln "Did not find the end of the SAML assertion."
        Procedure_Return
    End

    // Adjust the index to the 1st byte after "</Assertion>"
    Move (iEndIdx + 12) To iEndIdx
    Get ComGetEncodedChunk Of hoBdSecToken iStartIdx (iEndIdx - iStartIdx) "base64" To sBase64_saml_token

    Showln sBase64_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>

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End
    Set ComTag Of hoXml To "soapenv:Envelope"
    Get ComUpdateAttrAt Of hoXml "soapenv:Header|wsse:Security" True "xmlns:wsse" "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" To iSuccess
    Get ComUpdateAttrAt Of hoXml "soapenv:Header|wsse:Security|wsse:BinarySecurityToken" True "ValueType" "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID" To iSuccess
    Get ComUpdateAttrAt Of hoXml "soapenv:Header|wsse:Security|wsse:BinarySecurityToken" True "EncodingType" "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" To iSuccess

    Send ComUpdateChildContent To hoXml "soapenv:Header|wsse:Security|wsse:BinarySecurityToken" sBase64_saml_token

    Get ComUpdateAttrAt Of hoXml "soapenv:Body|add:SearchProfessionalsRequest" True "Id" "bdc38ae62-3e7f-4f80-80f7-c3e745500fa3" To iSuccess

    Get Create (RefClass(cComCkDateTime)) To hoDt
    If (Not(IsComObjectCreated(hoDt))) Begin
        Send CreateComObject of hoDt
    End
    Get ComSetFromCurrentSystemTime Of hoDt To iSuccess
    Get ComGetAsTimestamp Of hoDt True To sTemp1
    Get ComUpdateAttrAt Of hoXml "soapenv:Body|add:SearchProfessionalsRequest" True "IssueInstant" sTemp1 To iSuccess

    Get ComUpdateAttrAt Of hoXml "soapenv:Body|add:SearchProfessionalsRequest" True "Offset" "0" To iSuccess
    Get ComUpdateAttrAt Of hoXml "soapenv:Body|add:SearchProfessionalsRequest" True "MaxElements" "100" To iSuccess
    Send ComUpdateChildContent To hoXml "soapenv:Body|add:SearchProfessionalsRequest|urn:SSIN" "74062423769"

    Get ComGetXml Of hoXml To sTemp1
    Showln sTemp1

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    Get pvComObject of hoCert to vCert
    Get ComSetSslClientCert Of hoHttp vCert To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Send ComSetRequestHeader To hoHttp "Content-Type" "text/xml"
    Send ComSetRequestHeader To hoHttp "SOAPAction" "urn:be:fgov:ehealth:addressbook:protocol:v1:searchProfessionals"

    Get ComGetXml Of hoXml To sXmlStr
    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Get pvComObject of hoResp to vResp
    Get ComHttpStr Of hoHttp "POST" "https://services.ehealth.fgov.be/AddressBook/v1" sXmlStr "utf-8" "application/xml" vResp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComBodyStr Of hoResp To sTemp1
    Showln sTemp1
    Get ComStatusCode Of hoResp To iTemp1
    Showln "response status code = " iTemp1


End_Procedure