使用PHP的SOAP请求

时间:2012-08-07 13:37:32

标签: php soap wsdl

有一个包含许多功能的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的东西,但我找不到一个易于阅读的教程或一些明确的解释......

如果有人可以帮助我,那就太棒了!

2 个答案:

答案 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。