Вызовите метод SOAP через CURL в PHP, вызовите аутентификацию клиента - PullRequest
0 голосов
/ 02 сентября 2010

ОБЗОР:

Код предназначен для вызова веб-службы escreen с использованием SOAP и Curl с обязательной аутентификацией клиента.В настоящее время я не получаю никаких результатов только HTTP 403 и 500 ошибок.Вызов требует, чтобы сертификат аутентификации клиента был на сайте callng.

КОД:

$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);

ВОПРОСЫ:

  1. Мне нужно позвонить по RequestTicketметод и передать ему строку XML.Я не знаю, как это сделать здесь (передать имя метода для вызова).

  2. Для аутентификации клиента нам дали три сертификата, один корневой сертификат, один промежуточный сертификат и клиентсертификат аутентификации PROTPLUSSOL_SSOpem (это был файл .pfx).Поскольку мы находимся на Linux, мы преобразовали их в Pem.В вызовах curl я не смог найти способ включить как корневой сертификат, так и промежуточный сертификат, поэтому я объединил их, создав новый файл pem и скопировав промежуточный сертификат, а затем корневой сертификат, и присвоив ему имя author.pem.Я не уверен, работает ли он или нет, и хотел бы узнать ваше мнение.

  3. Для текущего кода Iam получаю ошибку Ошибка №: 77 Ошибка скручивания: ошибка установки сертификата, проверка местоположения: CAfile:/home/pps/authority.pem CApath: / home / pps /

    Если я отключаю сообщение об ошибке скручивания, я получаю пустую страницу с заголовком страницы 403 - Запрещено.Доступ запрещен.

    Если я закомментирую строки CURLOPT_CAPATH и CURLOPT_CAINFO, он выдаст страницу с ошибкой http 500 с сообщением в виде содержимого и следующим текстом вверху.

    HTTP / 1.1 500Внутренняя ошибка сервера.Cache-Control: private Тип контента: text / html Сервер: Microsoft-IIS / 7.5 X-AspNet-Version: 1.1.4322 X-Powered-By: ASP.NET Дата: четверг, 02 сентября 2010 г. 14:46:38 GMTContent-Length: 1208

Если я закомментирую, как указано выше, а также CURLOPT_SSLCERT и CURLOPT_SSLCERTPASSWD, это даст ошибку 403 с сообщением в качестве содержимого.

Так что я быпрошу вас помочь мне, указав, что не так с текущим кодом.

Спасибо.

1 Ответ

0 голосов
/ 02 сентября 2010

PHP поставляется с мыльным клиентом:

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

Вы можете указать ему использовать сертификат, передав опцию local_cert конструктору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...