Sample code for 30+ languages & platforms
PowerBuilder

Belgium eHealth Platform - AddressBook - Search for Professionals

See more Belgian eHealth Platform Examples

Demonstrates how to search for professionals using the AddressBook API.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Cert
oleobject loo_BdSecToken
integer li_StartIdx
integer li_EndIdx
string ls_Base64_saml_token
oleobject loo_Xml
oleobject loo_Dt
oleobject loo_Http
string ls_XmlStr
oleobject loo_Resp

li_Success = 0

// 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..
loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")
if li_rc < 0 then
    destroy loo_Cert
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Cert.LoadPfxFile("SSIN=12345678.acc.p12","p12_password")
if li_Success = 0 then
    Write-Debug loo_Cert.LastErrorText
    destroy loo_Cert
    return
end if

// 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
loo_BdSecToken = create oleobject
li_rc = loo_BdSecToken.ConnectToNewObject("Chilkat.BinData")

li_Success = loo_BdSecToken.LoadFile("qa_data/tokens/ehealth-fgov-be-sectoken.xml")
if li_Success = 0 then
    Write-Debug "Failed to load SAML security token"
    destroy loo_Cert
    destroy loo_BdSecToken
    return
end if

// The SAML security token is just the part from <Assertion ..> ... </Assertion>
// So let's get just that part..
li_StartIdx = loo_BdSecToken.FindString("<Assertion",0,"utf-8")
if li_StartIdx < 0 then
    Write-Debug "Did not find the start of the SAML assertion."
    destroy loo_Cert
    destroy loo_BdSecToken
    return
end if

li_EndIdx = loo_BdSecToken.FindString("</Assertion>",0,"utf-8")
if li_EndIdx < 0 then
    Write-Debug "Did not find the end of the SAML assertion."
    destroy loo_Cert
    destroy loo_BdSecToken
    return
end if

// Adjust the index to the 1st byte after "</Assertion>"
li_EndIdx = li_EndIdx + 12
ls_Base64_saml_token = loo_BdSecToken.GetEncodedChunk(li_StartIdx,li_EndIdx - li_StartIdx,"base64")

Write-Debug ls_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>

loo_Xml = create oleobject
li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml")

loo_Xml.Tag = "soapenv:Envelope"
loo_Xml.UpdateAttrAt("soapenv:Header|wsse:Security",1,"xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
loo_Xml.UpdateAttrAt("soapenv:Header|wsse:Security|wsse:BinarySecurityToken",1,"ValueType","http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID")
loo_Xml.UpdateAttrAt("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")

loo_Xml.UpdateChildContent("soapenv:Header|wsse:Security|wsse:BinarySecurityToken",ls_Base64_saml_token)

loo_Xml.UpdateAttrAt("soapenv:Body|add:SearchProfessionalsRequest",1,"Id","bdc38ae62-3e7f-4f80-80f7-c3e745500fa3")

loo_Dt = create oleobject
li_rc = loo_Dt.ConnectToNewObject("Chilkat.CkDateTime")

loo_Dt.SetFromCurrentSystemTime()
loo_Xml.UpdateAttrAt("soapenv:Body|add:SearchProfessionalsRequest",1,"IssueInstant",loo_Dt.GetAsTimestamp(1))

loo_Xml.UpdateAttrAt("soapenv:Body|add:SearchProfessionalsRequest",1,"Offset","0")
loo_Xml.UpdateAttrAt("soapenv:Body|add:SearchProfessionalsRequest",1,"MaxElements","100")
loo_Xml.UpdateChildContent("soapenv:Body|add:SearchProfessionalsRequest|urn:SSIN","74062423769")

Write-Debug loo_Xml.GetXml()

loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")

li_Success = loo_Http.SetSslClientCert(loo_Cert)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Cert
    destroy loo_BdSecToken
    destroy loo_Xml
    destroy loo_Dt
    destroy loo_Http
    return
end if

loo_Http.SetRequestHeader("Content-Type","text/xml")
loo_Http.SetRequestHeader("SOAPAction","urn:be:fgov:ehealth:addressbook:protocol:v1:searchProfessionals")

ls_XmlStr = loo_Xml.GetXml()
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")

li_Success = loo_Http.HttpStr("POST","https://services.ehealth.fgov.be/AddressBook/v1",ls_XmlStr,"utf-8","application/xml",loo_Resp)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Cert
    destroy loo_BdSecToken
    destroy loo_Xml
    destroy loo_Dt
    destroy loo_Http
    destroy loo_Resp
    return
end if

Write-Debug loo_Resp.BodyStr
Write-Debug "response status code = " + string(loo_Resp.StatusCode)


destroy loo_Cert
destroy loo_BdSecToken
destroy loo_Xml
destroy loo_Dt
destroy loo_Http
destroy loo_Resp