Параметр последовательности SoapClient - PullRequest
0 голосов
/ 05 февраля 2020

Я использую эту библиотеку https://github.com/phpro/soap-client, она прекрасно работает для меня, но я не могу понять, как мне сделать массив параметров, передаваемых в запрос.

<xsd:complexType name="docTypeRef_PackagesType">
 <xsd:sequence maxOccurs="999">
  <xsd:element name="RequestedPackages" type="tns:docTypeRef_RequestedPackagesType"/>
 </xsd:sequence>
</xsd:complexType>

Это должно отправить запрос ниже с массивом RequestedPackages

<Packages>
   <RequestedPackages number="1">
      <Weight>2</Weight>
      <Dimensions>
         <!--You may enter the following 3 items in any order-->
         <Length>1</Length>
         <Width>1</Width>
         <Height>1</Height>
      </Dimensions>
   </RequestedPackages>

   <RequestedPackages number="2">
      <Weight>1</Weight>
      <Dimensions>
         <!--You may enter the following 3 items in any order-->
         <Length>2</Length>
         <Width>2</Width>
         <Height>2</Height>
      </Dimensions>
   </RequestedPackages>
</Packages>

У кого-нибудь есть идеи, как заставить это работать? Я уже создал массив запрашиваемых пакетов, но он не работает.

use IteratorAggregate;

class DocTypeRefPackagesType implements IteratorAggregate
{

    private $RequestedPackages;

    public function getIterator(): array
    {
        return new \ArrayIterator(is_array($this->RequestedPackages) ? $this->RequestedPackages : []);
    }

    public function getRequestedPackages(): array
    {
        return $this->RequestedPackages;
    }
}

php параметр запроса:

$requestedPackages = [];
 $dimension = (new DocTypeRefDimensionsType)
                ->withLength(1)
                ->withWidth(1)
                ->withHeight(1);
$requestedPackages[] = (new DocTypeRefRequestedPackagesType)
                ->withWeight(2)
                ->withDimensions($dimension)
                ->withNumber(1);
$packages = (new DocTypeRefPackagesType)
            ->withRequestedPackages($requestedPackages);

 $dimension = (new DocTypeRefDimensionsType)
                ->withLength(2)
                ->withWidth(2)
                ->withHeight(2);
$requestedPackages[] = (new DocTypeRefRequestedPackagesType)
                ->withWeight(1)
                ->withDimensions($dimension)
                ->withNumber(2);
$packages = (new DocTypeRefPackagesType)
            ->withRequestedPackages($requestedPackages);

Я также пробовал TypeConverter, но запрос становится пустым тегом

<Packages>
 <RequestedPackages/>
</Packages>
...