Я пытался использовать PHP-клиент мыло.
Но SOAP XML должен содержать атрибут XML, такой как «opCode = EQ», в этом примере:
<ws:Query>
....
<com:Properties>
<com:xx>yy</com:xx>
<com:ab>cc</com:ab>
</com:Properties>
<com:QueryCondition>
<com:CmpOp opCode="EQ">
<com:Property>FolderName</com:Property>
<com:Value>AB028</com:Value>
</com:CmpOp>
</com:QueryCondition>
</ws:Query>
Я пытаюсь прочитать это с помощью этого кода:
$this->client = new SOAPClient(__DIR__ . '/WSDL.XML', array(
'trace' => 1,
'exception' => 1
));
$this->client->query((object) array(
// ..
'Properties' => (object) array(
'xx' => 'yy',
'ab' => 'cc'
),
'QueryCondition' => (object) array(
'CmpOp' => (object) array(
'opCode' => 'EQ',
'_' => (object) array(
'Property' => 'FolderName',
'Value' => 'AB028',
),
),
),
));
Но это приводит к:
<com:QueryCondition>
<com:CmpOp>
<com:Property>FolderName</com:Property>
<com:Value>AB028</com:Value>
</com:CmpOp>
</com:_><com:opCode>EQ</com:opCode></com:_>
</com:QueryCondition>
Может кто-нибудь сказать мне правильный синтаксис?
Все эти вещи с подчеркиванием я нашел в интернете.
Единственное рабочее решение, которое я нашел, это:
$this->client->query((object) array(
// ..
'Properties' => (object) array(
'xx' => 'yy',
'ab' => 'cc'
),
'QueryCondition' => (object) array(
'CmpOp' => new SoapVar(
'<CmpOp opCode="EQ">' .
'<Property>FolderName</Property>' .
'<Value>' . htmlspecialchars('AB028'). '</Value>' .
'</CmpOp>',
XSD_ANYXML
)
),
),
));
Других решений пока нет …