1

多くの機能を備えたWebサービス(WSDL)があります。これらの関数の1つを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をいくつか試しましたが、読みやすいチュートリアルや明確な説明が見つかりません...

誰かが私を助けることができれば、それは素晴らしいことです!

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

その後、応答は必要に応じて処理されます(何らかの説明のエンティティまたは応答オブジェクトを介して)。ヘッダーは、新しい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は2つあります。

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 に答える