Magento, SoapClient и локальный WSDL - PullRequest
1 голос
/ 11 января 2012

Вероятно, это вопрос новичка, но я не могу понять это. Я работаю с веб-сервисом из магазина Magento (то есть код в магазине Magento обращается к удаленному веб-сервису). Так бывает в этом случае у меня есть локальный файл WSDL, на который мне нужно сослаться. Я сделал это, прежде чем использовать удаленный URL-адрес для файла WSDL, и это прекрасно работает. Тем не менее, с локальным файлом, я не могу понять, как ссылаться на него. У меня это работает, поместив файл в подкаталог wsdl корня сайта, и затем я могу ссылаться на него, используя http://mysite/wsdl/thefile.wsdl. Однако я предпочел бы использовать относительный путь для ссылки это (в основном из-за того, что я планирую развернуть один и тот же код на разных сайтах и ​​хочу использовать один и тот же код для всех).

Полагаю, мой вопрос сводится к следующему: когда вы создаете экземпляр экземпляра SoapClient PHP, например, $client = new SoapClient("thefile.wsdl"), где он ищет thefile.wsdl ? Я думал, что он будет локальным для PHP-файла, который создает экземпляр SoapClient, но он не работал, когда я помещал файл в ту же папку. Я попробовал каталог / includes , а также app / code / local .

Я уверен, что это не легкое дело для опытных программистов, но иногда основы намекают на меня ...

Ответы [ 4 ]

3 голосов
/ 12 января 2012

Тайна разгадана! Это, вероятно, очевидно для большинства, но я должен был изучить это, так что, возможно, кому-то еще это пригодится.

Я не осознавал, что из-за дизайна Magento «корнем» всех страниц является /index.php. КАЖДАЯ страница загружается с этого, так что, конечно, это корень. Когда вы пытаетесь создать экземпляр SoapClient, он просматривает каталог файла сценария main root , а не текущий файл модуля / класса. Я мог бы поместить файлы WSDL в корень веб-сервера и успешно загрузить их (наверное, раньше я этого не пробовал ...).

Что я сделал сейчас, так это переместил их в каталог / media, и я вызвал их, получив каталог мультимедиа, используя getBaseDir('media'), указав путь к моему подкаталогу и VIOLA!

2 голосов
/ 11 января 2012

Я не парень SOAP, но ваш вопрос не имеет смысла. Soap - это протокол для выполнения удаленных вызовов методов по HTTP. Файл WSDL - это файл, который клиент запрашивает у удаленного сервера, чтобы узнать, какие методы доступны и как они могут и должны вызываться. «Локальный файл WSDL» не имеет смысла.

0 голосов
/ 12 августа 2012

Вам необходимо использовать встроенные функции Magento, которые генерируют локальный путь к файлу.Хранение WSDL в каталоге мультимедиа может быть нецелесообразным, поскольку это общедоступно (это может быть причиной того, что WSDL не размещается удаленно @AlanStorm).

Я бы порекомендовал вам сохранить файл в каталоге etc вашего пользовательского модуля.Пример кода:

$vWsdlPath = Mage::getModuleDir('etc', 'YourModule_NameHere').'/wsdl/SomeFile.wsdl';
$soap = new Zend_Soap_Client($vWsdlPath, $aOptions);
0 голосов
/ 11 января 2012

Если ваш вопрос касается magento, то вам следует создать модуль.Создайте wsdl.xml (посмотрите файлы модуля wsdl.xml и api.xml в каталоге).

Подробнее о magento soap api здесь

ОБНОВЛЕНИЕ 1

Хорошо, если служба находится на другом хосте, то вам следуетбыть в состоянии потреблять так же, как и при использовании службы magento.

Оформить ссылку о Zend's FM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...