soap入門 使用PHP的SOAP請求




web service php soap (2)

我對這個問題有一個補充:

請求如下:

<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 $結果,屏幕保持白色,並在代碼中沒有可見的XML。

有一個web服務(WSDL)具有很多功能。 我想用PHP調用其中的一個函數。 Web服務提供了一個文檔,其中他們把包括頭和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的東西,但我找不到一個容易閱讀的教程或一些清晰的解釋...

如果有人能幫助我,那會很棒的!


Answer #1

映射一些典型的信息可能看起來像這樣。

        $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()單獨完成。

希望這可以幫助。







wsdl