2009-11-01 23 views
6

Czy istnieje sposób na wygenerowanie klienta PHP Soap z pliku WSDL?Jak wygenerować kod klienta mydła PHP?

mam na myśli coś takiego wsdl.exe lub svcutil.exe w .NET, który generuje kod dla klasy, która może być klientem z usługą, a nie coś takiego:

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

Mój problem jest, że chcę klienta PHP aby móc pracować z usługą, nawet jeśli ta usługa nie ujawnia swojego WSDL.

Odpowiedz

8

Można użyć metody [generateProxyCode] dołączonej do opakowania SOAP_WSDL (http://pear.php.net/reference/SOAP-0.9.4/SOAP/SOAP_WSDL.html#methodgenerateProxyCode) metodę zamiast i zapisać go do pliku:

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

require 'wsdl_proxy.php'; 
+4

dwie uwagi na temat przykładowego kodu: należy podać klasę PEAR z require_once ("SOAP/WSDL.php "), a metoda nie jest $ WSDL-> getProxyCode(); ale $ WSDL-> generateProxyCode(); – Pisu

3

Wystarczy, aby pomóc każdemu, kto jest po drugiej stronie tego postu i myśli „jak do diabła, czy pracuję w tym SOAP_WSDL? (Jak ja)

otworzyć wiersz poleceń i dostać się do katalogu php (zainstalowałem XAMPP Lite w tym przykładzie)

Raz w katalogu php wpadłem skryptu pear.bat. Po tym udało mi się wpisać następujące pośrednictwem linii cmd

gruszka -V (zapewnia od wersji instalacji)

lista gruszka

Po wpisaniu powyższego i nie trzeba zobaczyć SOAP aby wykonać następujące czynności z linii cmd:

  • gruszka zainstalować Net_DIME-1.0.1

  • gruszka zainstalować Mail_Mime-1.5.2

  • gruszka zainstalować Mail-1.2.0b1

  • gruszka zainstalować mydła 0.12.0

Teraz po zainstalowaniu tych pakietów i zrobić kolejny "lista gruszka" powinieneś zobaczyć SOAP liście.

Jeśli tak, możesz dołączyć odniesienie do plików php, które są wyciągnięte z katalogu gruszek w SOAP.

Jednym z przykładów tej drodze może być C: \ xampplite \ php \ PEAR \ SOAP

7

Jest aplikacja do tego, że to nazywa wsdl2phpgenerator:

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

uruchomić go przeciwko WSDL plik i wygeneruje klasy na podstawie usług WSDL.

+0

wsdl2phpgenerator da Ci świetny head start – jjwdesign

+1

Aby uzyskać najnowszą wersję przejdź do nowego domu wsdl2phpgenerator, na github, https://github.com/walle/wsdl2phpgenerator Jest także znaczący widelec na https://github.com/reload/wsdl2phpgenerator, który próbuje zintegrować żądania ściągania, których tak naprawdę nie miałem czasu na weryfikację i –

0

Użyłem wsdl2php, prostego narzędzia PEAR; wydaje się, że projekt jest martwy, ale nadal można pobrać najnowszą wersję tutaj: http://sourceforge.net/projects/wsdl2php/

wymagać maszynę rozwojową z PHP 5 i gruszka, i trzeba go zainstalować z tego polecenia PEAR:

sudo pear install wsdl2php-0.2.1-pear.tgz 

Po tym, można wygenerować plików PHP zajęcia z tym poleceniem:

wsdl2php <WSDL_URL> 

generuje główne klasy, która rozciąga SoapClient i wiele innych klasyfikowany które stanowią wnioski, odpowiedzi i skomplikowanych obiektów, więc jest bardzo przydatny gdy rozwijanie w IDE z "intellisense" jak NetBeans.

0

Próbowałem użyć everething które zostały tutaj wymienione.

Okazało się, że inny wybór: https://github.com/mikaelcom/WsdlToPhp

plusów w comparition z ostatnich:

  • żadnych zależności. Zarówno dla generatora, jak i dla klienta utworzonego.

  • klasy w w i spośród parametrów.

  • Przykłady użycia dla utworzonego klienta. Kurs nie jest tak ważny. Ale czasami bardzo użyteczne

  • Mniej kodu (In porównania z SOAP_WSDL)

minusy:

  • odpowiedź i skomplikowanych podtyp są zawinięte do innego obiektu, który zawiera informacje techniczne.
+0

Dzięki za szczegółową informację zwrotną, możesz przesłać mi więcej szczegółów na temat Twojej uwagi "Odpowiedź i każdy złożony podtyp są zawijane do innego obiektu, który zawiera informacje techniczne." na adres [email protected], byłoby to bardzo doceniane, Thks –

+0

Właściwie to nie jest poprawne.W programie .NET można uzyskać obiekty dokładnie takie same, jakie są w serwisie, ale w moim przypadku, gdy otrzymuję odpowiedź w PHP z usługi .NET, Mam "dodatkowe" opakowania. W rzeczywistości są obecne w WSDL, ale .NET w jakiś sposób "wie", że niektóre klasy są tylko dla potrzeb technicznych i usuwają je w wyniku. –

+0

Dzięki, gdybyś miał kilka przykładów, byłoby wspaniale, inaczej przeszukuję, jeśli można tego uniknąć. –

Powiązane problemy