PHP: soapCall со сложными аргументами - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь установить SOAP-соединение между поставщиком и мной, чтобы синхронизировать данные между нашими базами данных. Мне удалось связать его с помощью простого soapCall, который бросил эти строки php ($ service - это имя функции Soap, к которой я обращаюсь, а $ data - ассоциативный массив, содержащий мои переменные):

    $request = new SoapClient($client, array('soap_version' => SOAP_1_1));
    $response = $request->$service($data);

Эти строки работают, если в моей схеме переменных XML нет коллекций, как в этом примере:

<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
      <ServiceITryToReach xmlns="https://mysuplier:65100/">
        <Login>login</Login>
        <Password>pass</Password>
        <Variables>
          <Variable1>data</Variable1>
          <Variable2>data</Variable2>
        </Variables>
      </ServiceITryToReach>
    </soap:Body>
</soap:Envelope>

В приведенном выше примере мой ассоциативный массив, содержащий мои переменные, будет:

array('Login'=>'login','Password'=>'pass','Variables'=>array('Variable1'=>'data','Variable2'=>'data'));

Но, если моя схема XML содержит наборы переменных одного типа, как я могу представить ее с помощью ассоциативного массива в PHP?

 <?xml version="1.0" encoding="utf-8"?>
        <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
          <ServiceITryToReach xmlns="https://mysuplier:65100/">
            <Login>login</Login>
            <Password>pass</Password>
            <Variables>
              <Variable>
                 <data>data</data>
              </Variable>
              <Variable>
                 <data>data</data>
              </Variable>
              <Variable>
                 <data>data</data>
              </Variable>
            </Variables>
          </ServiceITryToReach>
        </soap:Body>
    </soap:Envelope> 

В заключение я ищу другой простой способ запроса моего поставщика с несколькими переменными. Лучше всего было бы иметь прямой XML-ввод в моем методе soapCall вместо ассоциативного массива . Идея ? Спасибо, Нико

...