Запрос PHP SOAP на отправку нескольких элементов

#php #xml #web-services #soap #wsdl

#php #xml #веб-сервисы #soap #wsdl

Вопрос:

Я пытаюсь подписаться на веб-службу, используя PHP Soap client. Мой PHP-код успешно достигает веб-службы, но не передает все необходимые элементы для подписки. Я попробовал два разных PHP-документа с идентичными результатами. Мой код основан на следующей ссылке https://devzone.zend.com/2202/php-and-soap-first-steps /. Я использовал SoapUI для анализа wsdl, и функция subscribe отформатирована как

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ass="http://assignment.soap.assignshare" xmlns:xsd="http://request.assignment.soap.assignshare/xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <ass:Subscribe>
         <ass:SasReqSubscribe>
            <xsd:Source>VendorC</xsd:Source>
            <xsd:Dest>http://192.168.50.3:26001/SAIWebService</xsd:Dest>
            <xsd:MsgTag>1</xsd:MsgTag>
            <xsd:SupportsPendingAssignments>false</xsd:SupportsPendingAssignments>
            <xsd:AppVersion>AppVersion</xsd:AppVersion>
            <xsd:ProtocolVersion>1.20</xsd:ProtocolVersion>
            <xsd:SubscriptionPort>http://localhost:26001/SAIWebService</xsd:SubscriptionPort>
         </ass:SasReqSubscribe>
      </ass:Subscribe>
   </soapenv:Body>
</soapenv:Envelope>
  

Я пытаюсь создать результат sae, используя PHP Soap. Мой первый PHP-код выглядит следующим образом.

     $wsdl = "http://192.168.50.3:26001/SAIWebservice?singlewsdl";

    $client = new SoapClient($wsdl, array(
                            "trace"=>1,
                            "exceptions"=>0));

    $name7 = "http://xx.xxx.183.202:8080";*/

    $parameters= array("Source"=>'Test',"Dest"=>'http://192.168.50.3:26001/SAIWebService',"MsgTag"=>1,"SupportsPendingAssignments"=>0,
    "AppVersion"=>'AppVersion,"ProtocolVersion"=>1.20,"SubscriptionPort"=>"http://xx.xxx.183.202:8080');

    $values = $client->Subscribe($parameters);

    print "<pre>n";

    print "<br />n Request : ".htmlspecialchars($client->__getLastRequest());

    print "<br />n Response: ".htmlspecialchars($client->__getLastResponse());

    print "</pre>";
  

Я использовал Wireshark для захвата опубликованного XML, но элементы «Source», «Dest», «MsgTag», «SupportsPendingAssignments», «ProtocolVersion» и «SubscriptionPort» не опубликованы.»
Захват WireShark

Второй PHP с теми же результатами

     $wsdl = "http://192.168.50.3:26001/SAIWebservice?singlewsdl";

    $client = new SoapClient($wsdl, array(
                            "trace"=>1,
                            "exceptions"=>0));
    $name1 = "Test";
    $name2 = "http://192.168.50.3:26001/SAIWebService";
    $name3 = "1";
    $name4 = "false";
    $name5 = "AppVersion";
    $name6 = "1.20";
    $name7 = "http://xx.xxx.183.202:8080";

    $parameters= array("Source"=>$name1,"Dest"=>$name2,"MsgTag"=>$name3,"SupportsPendingAssignments"=>$name4,"AppVersion"=>$name5,"ProtocolVersion"=>$name6,"SubscriptionPort"=>$name7);

    $values = $client->Subscribe($parameters);

    print "<pre>n";

    print "<br />n Request : ".htmlspecialchars($client->__getLastRequest());

    print "<br />n Response: ".htmlspecialchars($client->__getLastResponse());

    print "</pre>";

?>   
  

Я был бы признателен за любую помощь в объяснении того, почему элементы не передаются в запросе клиента PHP Soap.

Ответ №1:

Я привык отправлять параметры с помощью вызовов soap в качестве PHP-объекта стандартного класса. Не массивы. Возможно, просто приведите массив с параметрами к объекту с (object)$parameters в вашем $client->subscribe вызове

Комментарии:

1. Большое вам спасибо! Я использовал объект stdclass, чтобы заставить его работать.

2. Не могли бы вы принять ответ в интересах других?