2012-01-10 28 views
7

しばらくの間、PHP開発者であったにもかかわらず、私は今、Webサービスの最初の味を得ています。私が使っている本はあまり役に立たないので、私は少し助けを得ることを望んでいた。私たちがビジネスをしている企業の1つは、必要な形式のXML文書を私に渡しました(私はそれを投稿します)。この特定の科目の私の未熟さのため、私は本当に何をすべきかはわかりません。このメッセージを実際のPOSTページに送信する方法、応答を受け取る方法、およびWSDLページを作成する必要があるかどうかを知る必要があります。どんな助けや方向性も非常に高く評価されますので、PHPマニュアルへのリンクを送るだけではありません。私は明らかにそこにいました。典型的には助けに行く場所です。PHP SOAP HTTPリクエスト

POST /sample/order.asmx HTTP/1.1 
Host: orders.sample.com 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Header> 
    <AuthenticationHeader xmlns="http://sample/"> 
     <Username>string</Username> 
     <Password>string</Password> 
    </AuthenticationHeader> 
    <DebugHeader xmlns="http://sample/"> 
     <Debug>boolean</Debug> 
     <Request>string</Request> 
    </DebugHeader> 
    </soap12:Header> 
    <soap12:Body> 
    <AddOrder xmlns="http://sample/"> 
     <order> 
     <Header> 
      <ID>string</ID> 
      <EntryDate>dateTime</EntryDate> 
      <OrderEntryView> 
      <SeqID>int</SeqID> 
      <Description>string</Description> 
      </OrderEntryView> 
      <ReferenceNumber>string</ReferenceNumber> 
      <PONumber>string</PONumber> 
      <Comments>string</Comments> 
      <IpAddress>string</IpAddress> 
     </Header> 
     </order> 
    </AddOrder> 
    </soap12:Body> 
</soap12:Envelope> 

上記は私が与えたAddOrder XMLドキュメントです(私はボディのほとんどを削除しました)。できるだけ具体的にするために詳細が必要な場合はお知らせください

答えて

7

を始めるいただければ幸いです! soapオブジェクトを使用して要求を作成することができます。要求は、WSDLに基づいてリモート・サーバーと通信する正しい方法を認識します。あなたはPHP manualでこれを行う方法を見ることができます。

また、CURLを使用して作業を行うこともできます。あなたはその後、は、その結果を持っている必要があり

$curlData = "<?xml version="1.0" encoding="utf-8"?>... etc"; 
$url='http://wherever.com/service/'; 
$curl = curl_init(); 

curl_setopt ($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl,CURLOPT_TIMEOUT,120); 
curl_setopt($curl,CURLOPT_ENCODING,'gzip'); 

curl_setopt($curl,CURLOPT_HTTPHEADER,array (
    'SOAPAction:""', 
    'Content-Type: text/xml; charset=utf-8', 
)); 

curl_setopt ($curl, CURLOPT_POST, 1); 
curl_setopt ($curl, CURLOPT_POSTFIELDS, $curlData); 

$result = curl_exec($curl); 
curl_close ($curl); 

:(上記の例であるように見える)にデータをポストする場所あなたは、あなたはちょうどこのような何かを行うことができ、知っておく必要があります$ result var。エンコードされているためにうまく動作しないことがありますが、時々私が見つけましたが、XMLドキュメントに変換しようとすることができます:

$xml = new SimpleXMLElement($result); 
print_r($xml); 
+0

ここで$ URLを知っていますか?ありがとう。 –

1

サービスのプロバイダとして、他の会社からWSDLドキュメントを提供する必要がありますこのサービスはコンピュータで読み取り可能な用語で記述されています。典型的には、http://their.service.url/wsdlまたは類似のURLを介して提供されます。

これで、サービスとやりとりするためにSoapClientインスタンスを作成できるはずです。

1

これは間違いなくSOAPリクエストであるため、これを正しく使用するにはSOAPを使用する必要があります。

私はSOAPとPHPのいくつかの出会いがあり、いつも私は外部のライブラリに頼らざるを得ませんでした。私が使用しなければならなかったのはZend_Soap_Clientでした。

もう一度、WSDLを利用できますか?クライアントライブラリを使用してSOAP Webサービスを使用できるようにするには、WSDLが必要です。

http://framework.zend.com/manual/en/zend.soap.html

そして、ここで私が使用した私のコードのサンプルです、私はあなたがオプションのカップルを持っている、それはあなたが

ini_set('soap.wsdl_cache_enabled', 0); 
set_include_path(dirname(__FILE__).'/../../libraries/:'.get_include_path()); 
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

//Include the classes for the webservice 
include('CatalogOrder.php'); 
include('CatalogOrderItem.php'); 
include('CatalogOrderWebservice.php'); 

//Check the mode 
if(isset($_GET['wsdl'])) { 

    $autodiscover = new Zend_Soap_AutoDiscover(array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ) 
    )); 
    $autodiscover->setComplexTypeStrategy(new Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex()); 
    $autodiscover->setClass('CatalogOrderWebService'); 
    $autodiscover->handle(); 

//Return the consume form and process the actions of the consumer 
} elseif(isset($_GET['consume'])) { 

    // pointing to the current file here 
    $soap = new Zend_Soap_Client("http://".$_SERVER['HTTP_HOST']."/admin/export/WebService.php?wsdl", array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ), 
     'encoding' => 'iso-8859-1' 
    )); 
    include('CatalogOrderWebserviceConsumer.php'); 

//Process SOAP requests 
} else { 

    // pointing to the current file here 
    $soap = new Zend_Soap_Server("http://".$_SERVER['HTTP_HOST']."/admin/export/WebService.php?wsdl", array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ), 
     'encoding' => 'iso-8859-1' 
    )); 
    $soap->setClass('CatalogOrderWebService'); 
    $soap->handle(); 

}