Есть ли способ генерировать PHP Soap Client из WSDL-файла?
Я имею в виду что-то вроде wsdl.exe
или svcutil.exe
в .net, которое генерирует код для класса, который может быть клиентом службы, а не что-то вроде:
$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';
Для этого есть приложение, оно называется wsdl2phpgenerator:
http://code.google.com/p/wsdl2phpgenerator/
Запустите его против WSDL-файла, и он будет генерировать классы на основе WSDL-сервисов.
Я нашел генератора очень полезным
https://github.com/wsdl2phpgenerator/wsdl2phpgenerator
Инструкции (из github):
Работа для веб-хостинга wsdl тоже
например
php wsdl2phpgenerator-2.3.0.phar -i http://someurl/input.wsdl -o tmp/my/directory/wsdl
Просто чтобы помочь кому-то еще, кто попадает на этот пост, и думает: «Как, черт возьми, я работаю с этой SOAP_WSDL?» (как и я)
Откройте командную строку и перейдите в свой php-каталог (я установил XAMPP Lite в этом примере)
Однажды в директории php я запустил скрипт pear.bat. После этого я смог ввести следующее через строку cmd
pear -V (предоставляет версию вашей установки)
список груши
Если вы наберете выше и не видите SOAP, вам нужно сделать следующее из строки cmd:
груша установить Net_DIME-1.0.1
груша установить Mail_Mime-1.5.2
груша установить Mail-1.2.0b1
груша установить SOAP-0.12.0
Теперь, после установки этих пакетов и создания другого «списка груши», вы должны увидеть список SOAP.
Если это так, вы можете включить ссылку на файлы php, выгруженные внутри каталога груши в SOAP.
Одним из примеров этого пути может быть C: \ xampplite \ php \ PEAR \ SOAP
Я использовал wsdl2php , простой инструмент PEAR; кажется, что проект мертв, но вы можете скачать последнюю версию здесь: http://sourceforge.net/projects/wsdl2php/
Для этого требуется машина разработки с PHP 5 и PEAR, и вам нужно установить ее с помощью этой команды PEAR:
sudo pear install wsdl2php-0.2.1-pear.tgz
После этого вы можете сгенерировать файл классов PHP с помощью этой команды:
wsdl2php <WSDL_URL>
Он генерирует основной класс, который расширяет SoapClient и многие другие классы, которые представляют запросы, ответы и сложные объекты, поэтому он очень полезен при разработке в среде IDE с помощью «intellisense», например NetBeans.
Я пытался использовать все, что было перечислено здесь.
Нашел другой вариант: https://github.com/mikaelcom/WsdlToPhp
Плюсы в сравнении с предыдущими:
Никаких зависимостей. Как для генератора, так и для созданного клиента.
Классы для параметров ввода и вывода .
Примеры использования для созданного клиента . Это не так важно. Но несколько раз очень полезно
Меньше кода (по сравнению с SOAP_WSDL)
Недостатки: