PHP-клиент SOAP, разрабатывающий идентичные теги - PullRequest
0 голосов
/ 06 мая 2010

Я пытаюсь сгенерировать XML-запрос SOAP, который выглядит примерно так:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dto="dto" xmlns:com="">
   <soapenv:Header>
      <dto:AuthenticationDTO>
     <dto:LOGIN_ID>login</dto:LOGIN_ID>
     <dto:LOGIN_PASSWORD>login</dto:LOGIN_PASSWORD>
  </dto:AuthenticationDTO>
   </soapenv:Header>
   <soapenv:Body>
  <com:createAccount>
     <com:AccountFields>
        <!--Zero or more repetitions:-->
        <dto:FieldDTO>
           <!--Optional:-->
           <dto:children/>
           <!--Optional:-->
           <dto:fieldType>GENERAL</dto:fieldType>
           <!--Optional:-->
           <dto:index>0</dto:index>
           <!--Optional:-->
           <dto:label>BusinessName</dto:label>
           <!--Optional:-->
           <dto:name>BizInfo-BusinessName</dto:name>
           <!--Optional:-->
           <dto:value>the business name</dto:value>
        </dto:FieldDTO>
        <!--Zero or more repetitions:-->
        <dto:FieldDTO>
           <!--Optional:-->
           <dto:children/>
           <!--Optional:-->
           <dto:fieldType>GENERAL</dto:fieldType>
           <!--Optional:-->
           <dto:index>0</dto:index>
           <!--Optional:-->
           <dto:label>BusinessCountry</dto:label>
           <!--Optional:-->
           <dto:name>BizInfo-Country</dto:name>
           <!--Optional:-->
           <dto:value>US</dto:value>
        </dto:FieldDTO>
     </com:AccountFields>
     <com:ApplicationNumber></com:ApplicationNumber>
     <com:CreditTerms></com:CreditTerms>
     <com:GenerateAccountIdIndicator>true</com:GenerateAccountIdIndicator>
  </com:createAccount>

Я получаю ответ, используя этот код:

<code>    $matchCompany->FieldList->FieldDTO->fieldType = 'GENERAL';
    $matchCompany->FieldList->FieldDTO->label = 'Business Name';
    $matchCompany->FieldList->FieldDTO->name = 'BizInfo-BusinessName';
    $matchCompany->FieldList->FieldDTO->index = '0';
try
{  
    $result = $soapClient->getAccountInfo($matchCompany);     
    print "<pre>";
    print_r($result); 
    print "
"; эхо "ЗАПРОС: \ n". htmlentities ($ soapClient -> __ getLastRequest ()). "\ П"; } поймать (ошибка SoapFault $) { echo $ fault-> код ошибки. "-". $ Вино-> faultstring; эхо "ЗАПРОС: \ n". htmlentities ($ soapClient -> __ getLastRequest ()). "\ П"; }

но если я попытаюсь упорядочить элемент fielddto следующим образом:

    //$matchCompany->FieldList->FieldDTO[]['fieldType'] = 'GENERAL';
//$matchCompany->FieldList->FieldDTO[]['label'] = 'Business Name';
//$matchCompany->FieldList->FieldDTO[]['name'] = 'BizInfo-BusinessName';
//$matchCompany->FieldList->FieldDTO[]['index'] = '0';

Оборачивает каждый элемент в свой собственный тег FieldDTO вместо помещения всех четырех элементов в один тег FieldDTO.

Чего мне не хватает? Кажется, что это должно работать, но это не совсем правильно.

1 Ответ

2 голосов
/ 06 мая 2010

Обратите внимание, что при каждом выполнении $matchCompany->FieldList->FieldDTO[]['any_field'] индекс массива увеличивается на единицу. Вы можете использовать определенный и вручную увеличенный индекс (например, $matchCompany->FieldList->FieldDTO[$i]['any_field'] = 'any_value') или просто установить все значения сразу:

$matchCompany->FieldList->FieldDTO[] = array(
    'fieldType' => 'GENERAL',
    'label' => 'Business Name',
    'name' => 'BizInfo-BusinessName',
    'index' => '0'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...