有沒有一種方法可以從WSDL文件生成PHP Soap客戶端?如何生成一個PHP soap客戶端代碼?
我的意思是這樣wsdl.exe
或.NET svcutil.exe
,是一類生成的代碼可以是服務的客戶,而不是像這樣:
$WSDL = new SOAP_WSDL($wsdl_url);
$client = $WSDL->getProxy();
我的問題是,我想PHP客戶端能夠使用服務工作,即使該服務不公開其WSDL。
有沒有一種方法可以從WSDL文件生成PHP Soap客戶端?如何生成一個PHP soap客戶端代碼?
我的意思是這樣wsdl.exe
或.NET svcutil.exe
,是一類生成的代碼可以是服務的客戶,而不是像這樣:
$WSDL = new SOAP_WSDL($wsdl_url);
$client = $WSDL->getProxy();
我的問題是,我想PHP客戶端能夠使用服務工作,即使該服務不公開其WSDL。
您可以使用方法[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';
只是爲了幫助別人誰遇到這篇文章,認爲「如何我該幹什麼用這個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
有這個應用程序,這就是所謂的wsdl2phpgenerator:
http://code.google.com/p/wsdl2phpgenerator/
來看,這對一個WSDL文件,它將根據WSDL服務生成類。
wsdl2phpgenerator會給你一個很好的開端 – jjwdesign
要獲得最新版本去wsdl2phpgenerator的新家, github,https://github.com/walle/wsdl2phpgenerator 在https://github.com/reload/wsdl2phpgenerator還有一個值得注意的分支,它試圖集成pull請求,我沒有真正的時間來驗證和合並 –
我用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中開發。
我發現發電機真的
https://github.com/wsdl2phpgenerator/wsdl2phpgenerator
說明(從GitHub)有用:從最新發布
的Web託管工作過的WSDL
如
php wsdl2phpgenerator-2.3.0.phar -i http://someurl/input.wsdl -o tmp/my/directory/wsdl
我試圖使用在這裏列出的everething。
找到了另一個的choise:https://github.com/mikaelcom/WsdlToPhp
加號的特點比較與以前:
無依賴。 既用於發電機又用於創建客戶端。在
類爲和出參數。
使用示例爲創建客戶端。 當然不是那麼重要。但是一些非常有用的
較少的代碼(在對比與SOAP_WSDL)次
劣勢:
感謝您的詳細反饋,您能否向我發送有關您的評論的更多詳細信息「答案和任何複雜的子類型都被包含到包含技術信息的另一個對象」中,請發送電子郵件至[email protected]com,真的很感謝,Thks –
實際上,這是不正確的。在.NET中,您可以獲得與服務時完全相同的對象。但在我的情況下,當我從.NET服務獲取PHP的響應時,我有「額外」包裝。它們實際上以WSDL的形式出現,但.NET以某種方式「知道」某些類只是爲了技術需要並將其刪除。 –
謝謝,如果你有一些例子,它會很好,否則我會搜索是否可以避免。 –
關於示例代碼的兩點需要注意:您需要在PEAR類中添加require_once(「SOAP/WSDL」)。這個方法不是$ WSDL-> getProxyCode();但$ WSDL-> generateProxyCode(); – Pisu