Sample code for 30+ languages & platforms
Visual FoxPro

Belgium eHealth Platform - AddressBook - Search for Professionals

See more Belgian eHealth Platform Examples

Demonstrates how to search for professionals using the AddressBook API.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loCert
LOCAL loBdSecToken
LOCAL lnStartIdx
LOCAL lnEndIdx
LOCAL lcBase64_saml_token
LOCAL loXml
LOCAL loDt
LOCAL loHttp
LOCAL lcXmlStr
LOCAL loResp

lnSuccess = 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..
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadPfxFile("SSIN=12345678.acc.p12","p12_password")
IF (lnSuccess = 0) THEN
    ? loCert.LastErrorText
    RELEASE loCert
    CANCEL
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
loBdSecToken = CreateObject('Chilkat.BinData')
lnSuccess = loBdSecToken.LoadFile("qa_data/tokens/ehealth-fgov-be-sectoken.xml")
IF (lnSuccess = 0) THEN
    ? "Failed to load SAML security token"
    RELEASE loCert
    RELEASE loBdSecToken
    CANCEL
ENDIF

* The SAML security token is just the part from <Assertion ..> ... </Assertion>
* So let's get just that part..
lnStartIdx = loBdSecToken.FindString("<Assertion",0,"utf-8")
IF (lnStartIdx < 0) THEN
    ? "Did not find the start of the SAML assertion."
    RELEASE loCert
    RELEASE loBdSecToken
    CANCEL
ENDIF

lnEndIdx = loBdSecToken.FindString("</Assertion>",0,"utf-8")
IF (lnEndIdx < 0) THEN
    ? "Did not find the end of the SAML assertion."
    RELEASE loCert
    RELEASE loBdSecToken
    CANCEL
ENDIF

* Adjust the index to the 1st byte after "</Assertion>"
lnEndIdx = lnEndIdx + 12
lcBase64_saml_token = loBdSecToken.GetEncodedChunk(lnStartIdx,lnEndIdx - lnStartIdx,"base64")

? lcBase64_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>

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

loXml.UpdateChildContent("soapenv:Header|wsse:Security|wsse:BinarySecurityToken",lcBase64_saml_token)

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

loDt = CreateObject('Chilkat.CkDateTime')
loDt.SetFromCurrentSystemTime()
loXml.UpdateAttrAt("soapenv:Body|add:SearchProfessionalsRequest",1,"IssueInstant",loDt.GetAsTimestamp(1))

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

? loXml.GetXml()

loHttp = CreateObject('Chilkat.Http')

lnSuccess = loHttp.SetSslClientCert(loCert)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loCert
    RELEASE loBdSecToken
    RELEASE loXml
    RELEASE loDt
    RELEASE loHttp
    CANCEL
ENDIF

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

lcXmlStr = loXml.GetXml()
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpStr("POST","https://services.ehealth.fgov.be/AddressBook/v1",lcXmlStr,"utf-8","application/xml",loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loCert
    RELEASE loBdSecToken
    RELEASE loXml
    RELEASE loDt
    RELEASE loHttp
    RELEASE loResp
    CANCEL
ENDIF

? loResp.BodyStr
? "response status code = " + STR(loResp.StatusCode)

RELEASE loCert
RELEASE loBdSecToken
RELEASE loXml
RELEASE loDt
RELEASE loHttp
RELEASE loResp