Visual FoxPro
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
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