1

有一个具有很多功能的 Web 服务 (WSDL)。我想用 PHP 调用这些函数之一。该网络服务提供了一个文档,其中他们放置了一个包含标头和 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 的东西,但我找不到易于阅读的教程或一些清晰的解释......

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

4

2 回答 2

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
        )
    );

然后根据您的意愿处理响应(通过某些描述的实体或响应对象)。标头必须使用 new SoapHeader() 单独完成。

希望这可以帮助。

于 2012-08-07T14:48:21.100 回答
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>

我需要发送两个 SoapHeaders:

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 $result 时,屏幕保持白色,并且在代码中没有可见的 XML。

于 2012-08-09T08:09:45.323 回答