有一个包含许多功能的Web服务(WSDL)。我想用PHP调用其中一个函数。 webservice提供了一个文档,其中包含了包含header和xml的格式,但我不知道如何从PHP发送请求。我现在搜索了几个小时,我根本就不知道。
他们提供的示例请求:
POST POSTURL HTTP/1.1
Host: HOST
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "SOAPLOCATION"
<?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>
<Version xmlns="URL" />
</soap:Body>
</soap:Envelope>
我也应该收到回应,但我甚至无法发送请求。
如何使用PHP发送请求以获取响应? 我尝试了一些PHP SoapClient的东西,但我找不到一个易于阅读的教程或一些明确的解释......
如果有人可以帮助我,那就太棒了!
答案 0 :(得分:0)
映射一些典型信息可能看起来像这样。
$data = array(
'UserName' => $user->getUsername(),
'Password' => $user->getPassword(),
'Email' => $user->getEmail(),
'FirstName' => $user->getFirstName(),
'LastName' => $user->getLastName(),
);
$response = $this->getDatasource()->TheServiceMethodForCreatingAUser(
array(
'user' => $data
)
);
然后根据您的意愿处理响应(通过某些描述的实体或响应对象)。标题必须通过使用新的SoapHeader()单独完成。
希望这有帮助。
答案 1 :(得分:0)
我对问题的补充是:
请求如下:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns="...">
<s:Body>
<Search>
<login>
<Wholesaler>...</Wholesaler>
<Username>...</Username>
<Password>...</Password>
</login>
<itemRequests>
<ItemRequest>
<ArticleId>int</ArticleId>
<SupplierId>int</SupplierId>
<QuantityRequested>int</QuantityRequested>
</ItemRequest>
</itemRequests>
</Search>
</s:Body>
</s:Envelope>
我需要发送两个SoapHeader:
Content-Type: text/xml; charset=utf-8
SOAPAction: URI
我知道服务提供商和行动标识符。
如果我有以下变量
$service
$action
$request
$header
如何用PHP发送请求? 我试过了
$client = new SoapClient($service);
$result = $client->__doRequest($request, $service, $action);
但我似乎没有得到回应......
回应应该是这样的:
Date: Thu, 09 Aug 2012 08:01:40 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Content-Length: 408
Cache-Control: private
Content-Type: text/xml; charset=utf-8
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SearchResponse xmlns="...">
<SearchResult>
<Wholesaler>...</Wholesaler>
<Username>...</Username>
<Error>false</Error>
<DateTime>2012-08-09T10:01:40.39125+02:00</DateTime>
<ItemResults />
</SearchResult>
</SearchResponse>
</s:Body>
</s:Envelope>
当我做一个简单的echo $结果时,屏幕保持白色,在代码中没有可见的XML。