tags:

views:

107

answers:

1

OVERVIEW:

The code is about making call to the escreen web service using SOAP and Curl with client authentication required. Currently I am not getting any result only HTTP 403 and 500 errors. The call requires client authenticate cert to be on the callng site.

CODE:

$content = "<TicketRequest>
  <Version>1.0</Version>
  <Mode>Test</Mode>
  <CommitAction></CommitAction>
  <PartnerInfo>
  <UserName>xxxxxxxxxx</UserName>
  <Password>xxxxxxxxxxx</Password>
  </ PartnerInfo>
  <RequestorOrderID></RequestorOrderID>
  <CustomerIdentification>
    <IPAddress></IPAddress>
    <ClientAccount>xxxxxxxxxx</ClientAccount>
    <ClientSubAccount>xxxxxxxxxx</ClientSubAccount>
    <InternalAccount></InternalAccount>
    <ElectronicClientID></ElectronicClientID>
  </CustomerIdentification>
  <TicketAction>
    <Type></Type>
    <Params>
      <Param>
      <ID>4646</ID>
      <Value></Value>
      </Param>
    </Params>
  </TicketAction>
</TicketRequest>";

$wsdl  = "https://services.escreen.com/SingleSignOnStage/SingleSignOn.asmx";

$headers = array(  "Content-type: text/xml;charset=\"utf-8\"", 
     "Accept: text/xml", 
     "Cache-Control: no-cache", 
     "Pragma: no-cache", 
  //   "SOAPAction: \"\"", 
     "Content-length: ".strlen($content),
    ); 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $wsdl); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $content); 

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
//curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('SOAPAction: ""')); 
curl_setopt($ch, CURLOPT_CAPATH, '/home/pps/');
curl_setopt($ch, CURLOPT_CAINFO,  '/home/pps/authority.pem');
curl_setopt($ch, CURLOPT_SSLCERT, 'PROTPLUSSOL_SSO.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'xxxxxxxxxxxx');

$output = curl_exec($ch);

// Check if any error occured
if(curl_errno($ch))
{
    echo 'Error no : '.curl_errno($ch).' Curl error: ' . curl_error($ch);
}

print_r($output);

QUESTIONS:

  1. I need to call the RequestTicket method and pass the XML string to it. I don't know how to do it here(pass the method name to call).

  2. For client authentication they gave us three certs, one root cert, one intermediate cert and a client authentication cert PROTPLUSSOL_SSOpem(it was a .pfx file). Since we are on linux we converted them to pem . In curl calls I could not find way to how to include both the root cert and the intermediate cert ,so I combined them by making a new pem file and copying the intermediate cert and them the root cert and naming it authority.pem . I am not sure whether it works or not and would like your opinion.

  3. For the current code Iam getting the error Error no : 77 Curl error: error setting certificate verify locations: CAfile: /home/pps/authority.pem CApath: /home/pps/

    If I disable the curl error message,I am getting blank page with page title 403 - Forbidden. Access is denied.

    If I comment out the CURLOPT_CAPATH and CURLOPT_CAINFO lines it gives http 500 error page with the message as content and the following at the top.

    HTTP/1.1 500 Internal Server Error. Cache-Control: private Content-Type: text/html Server: Microsoft-IIS/7.5 X-AspNet-Version: 1.1.4322 X-Powered-By: ASP.NET Date: Thu, 02 Sep 2010 14:46:38 GMT Content-Length: 1208

If I comment out as above and also CURLOPT_SSLCERT and CURLOPT_SSLCERTPASSWD it gives 403 error with the message as content.

So I would request you to help me out by pointing out whats wrong with the current code.

Thank you.

A: 

PHP comes with a soap client:

http://php.net/manual/en/book.soap.php

You can tell it to use a certificate, by passing an option local_cert to the constructor.

troelskn
Hi troelskn, thanks for the pointer ,i did try it passively but without passing the certs,let me try out by passing the cert at http://www.protection-plus-solutions.com/escreen/escreen_soapclient.php , but am still not sure how to specify the RequestTicket method nad whether I had tackled the certs correctly.
pillar.of.autumn