Могу ли я использовать PHP SoapClient для анализа ответа SOAP без выполнения HTTP-запроса? - PullRequest
1 голос
/ 18 января 2012

В настоящее время я имею дело с архаичным процессором платежей, который делает подключение к их сервису как можно более сложным (включая настраиваемый клиентский SSL-сертификат, пароль и после этого базовую аутентификацию HTTP). Короче говоря, я не могу использовать SoapClient для выполнения запроса, но я смог сделать это с помощью cURL.

Теперь у меня есть ответ в строке, могу ли я использовать SoapClient для его анализа? Я бы предпочел не анализировать его вручную как обычный XML, так как мне пришлось бы дублировать многие функциональные возможности, такие как создание разумного исключения, например, при поиске <SOAP:Fault>.

Ответы [ 3 ]

1 голос
/ 19 января 2012

Нет, вы не можете.

(просто отвечая на это для потомков. На основании отсутствия доказательств обратного, вы, очевидно, не можете использовать SoapClient для анализа уже полученного ответа SOAP)

0 голосов
/ 18 января 2012

Давайте на секунду представим, что вы вызвали SoapClient :: __ doRequest (), и он вернул ваш ответ SOAP XML в переменную с именем $ response .

<?php

   //LOAD RESPONSE INTO SIMPLEXML
   $xml = simplexml_load_string($response);

   //REGISTER NAMESPACES
   $xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
   $xml->registerXPathNamespace('somenamespace', 'http://www.somenamespace/schema/');
   //...REGISTER OTHER NAMESPACES HERE...

   //LOOP THROUGH AND GRAB DATA FROM A NAMESPACE
   foreach($xml->xpath('//somenamespace:MessageHeader') as $header)
   {
      echo($header->xpath('//somenamespace:MyData')); 
   }

   //...ETC...

?>

Это просто пример / псевдокод (не проверен и не будет работать как есть). Я хочу сказать, что вы получили ответ SOAP вручную, поэтому теперь все, что вам нужно сделать, это проанализировать его. SimpleXML - это решение one , которое вы можете использовать для этого.

0 голосов
/ 18 января 2012

Вы можете определить контекст, используя context параметр SoapClient, чтобы указать SoapClient использовать SSL-сертификаты и т. Д. Контекст может быть создан с использованием stream_context_create с лотамиопций

...