PowerBuilder
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
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