2009-11-01 60 views
6

有沒有一種方法可以從WSDL文件生成PHP Soap客戶端?如何生成一個PHP soap客戶端代碼?

我的意思是這樣wsdl.exe或.NET svcutil.exe,是一類生成的代碼可以是服務的客戶,而不是像這樣:

$WSDL  = new SOAP_WSDL($wsdl_url); 
$client = $WSDL->getProxy(); 

我的問題是,我想PHP客戶端能夠使用服務工作,即使該服務不公開其WSDL。

回答

8

您可以使用方法[generateProxyCode]包裝中提供SOAP_WSDL(http://pear.php.net/reference/SOAP-0.9.4/SOAP/SOAP_WSDL.html#methodgenerateProxyCode)方法,並將其保存到一個文件:

$WSDL  = new SOAP_WSDL($wsdl_url); 
$php  = $WSDL->generateProxyCode(); 
file_put_contents('wsdl_proxy.php', '<?php ' . $php . ' ?>'); 

require 'wsdl_proxy.php'; 
+4

關於示例代碼的兩點需要注意:您需要在PEAR類中添加require_once(「SOAP/WSDL」)。這個方法不是$ WSDL-> getProxyCode();但$ WSDL-> generateProxyCode(); – Pisu

3

只是爲了幫助別人誰遇到這篇文章,認爲「如何我該幹什麼用這個SOAP_WSDL的東西?「 (像我一樣)

打開命令行,並獲得你的php目錄

在php目錄我跑了pear.bat腳本(我在這個例子中安裝了XAMPP精簡版)一次。在此之後,我能夠鍵入CMD通過以下線

梨-V(提供的版本的安裝)

梨列表

如果鍵入上面並沒有看到你需要SOAP做從CMD行:

  • 梨安裝Net_DIME-1.0.1

  • 梨安裝Mail_Mime-1.5.2

  • 梨安裝Mail-1.2.0b1

  • 梨安裝SOAP-0.12.0

現在你安裝這些包,做一套 「梨清單」,你應該看到SOAP上市之後。

如果是這樣,您可以包含對SOAP下的pear目錄下的php文件的引用。這條道路的

一個例子是C:\ Xampplite文件\ PHP \ PEAR \ SOAP

7

有這個應用程序,這就是所謂的wsdl2phpgenerator:

http://code.google.com/p/wsdl2phpgenerator/

來看,這對一個WSDL文件,它將根據WSDL服務生成類。

+0

wsdl2phpgenerator會給你一個很好的開端 – jjwdesign

+1

要獲得最新版本去wsdl2phpgenerator的新家, github,https://github.com/walle/wsdl2phpgenerator 在https://github.com/reload/wsdl2phpgenerator還有一個值得注意的分支,它試圖集成pull請求,我沒有真正的時間來驗證和合並 –

0

我用wsdl2php,一個簡單的PEAR工具;似乎該項目是死的,但你仍然可以在這裏下載最新版本:http://sourceforge.net/projects/wsdl2php/

它需要在開發機器使用PHP 5和梨,你必須與此PEAR命令進行安裝:

sudo pear install wsdl2php-0.2.1-pear.tgz 

在此之後,您可以生成PHP類與此命令文件:

wsdl2php <WSDL_URL> 

它會產生擴展SoapClient的一個主類,和其他許多歸類代表的請求,響應和複雜的對象,所以它是非常有用的什麼時候 在像NetBeans這樣的「智能感知」IDE中開發。

0

我試圖使用在這裏列出的everething。

找到了另一個的choise:https://github.com/mikaelcom/WsdlToPhp

加號的特點比較與以前:

  • 無依賴。 既用於發電機又用於創建客戶端。在

  • 類爲參數。

  • 使用示例爲創建客戶端當然不是那麼重要。但是一些非常有用的

  • 較少的代碼(在對比與SOAP_WSDL)次

劣勢:

  • 回答任何複雜的亞型被包裹到包含技術信息的另一個對象。
+0

感謝您的詳細反饋,您能否向我發送有關您的評論的更多詳細信息「答案和任何複雜的子類型都被包含到包含技術信息的另一個對象」中,請發送電子郵件至[email protected]com,真的很感謝,Thks –

+0

實際上,這是不正確的。在.NET中,您可以獲得與服務時完全相同的對象。但在我的情況下,當我從.NET服務獲取PHP的響應時,我有「額外」包裝。它們實際上以WSDL的形式出現,但.NET以某種方式「知道」某些類只是爲了技術需要並將其刪除。 –

+0

謝謝,如果你有一些例子,它會很好,否則我會搜索是否可以避免。 –