这是我第一次在PHP上使用SoapClient。我的任务是创建一个脚本来自动向服务器发送Soap请求。 SOAP UI中的正确请求是:
肥皂网址:http://example.com:8181/inventory/soap/inventory-api?wsdl
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:inv="http://example.com:8181/inventory-api/">
<soapenv:Header/>
<soapenv:Body>
<inv:searchStockItemRequest>
<inv:filter>
<inv:ItemID>100</inv:ItemID>
<inv:ItemID>101</inv:ItemID>
<inv:ItemID>102</inv:ItemID>
</inv:filter>
</inv:searchStockItemRequest>
</soapenv:Body>
</soapenv:Envelope>
这意味着:搜索ID为100或101或102的StockItem。 这是我目前的代码。
$xml = '<inv:filter>
<inv:ItemID>100</inv:ItemID>
<inv:ItemID>101</inv:ItemID>
<inv:ItemID>102</inv:ItemID>
</inv:filter>';
$client = new SoapClient(null, array(
'location' => 'http://example.com:8181/inventory/soap/inventory-api?wsdl',
'uri' => MCA_INVENTORY_WSDL)
);
$result = $client->searchItem(htmlspecialchars($xml));
结果是错误的消息:
&#34;缺少必需的元素{http://example.com:8181/inventory-api/}过滤器&#34;
我认为服务器无法检测到上面的过滤元素。有人请帮忙!!!
答案 0 :(得分:0)
Soap URL: http://example.com:8181/inventory/soap/inventory-api?wsdl
这是您的wsdl地址,而不是您的服务端点网址。
在网络浏览器中打开上面的网址。在wsdl中找到此标记<soap:address location>
。它应该在wsdl末尾的<service>
标记内。现在用这个终点url替换wsdl url。
它应该工作。
$client = new SoapClient(null, array(
'location' => 'http://example.com:8181/inventory/soap/inventory-api?wsdl',
'uri' => MCA_INVENTORY_WSDL)
答案 1 :(得分:0)
我认为你必须使用正确的数据格式而不是XML字符串。根据您使用SOAP UI的正确请求,使用SoapClient的代码应如下所示:
$client = new SoapClient('http://example.com:8181/inventory/soap/inventory-api?wsdl');
$result = $client->searchStockItemRequest(array(
'filter' => array(
'ItemID' => array(100, 101, 102)
)
));
我不确定ItemID
数组格式是否正确。您可以打印要检查的请求:
echo $client->__getLastRequest();
不要忘记启用跟踪选项:
$client = new SoapClient('...', array('trace' => true));