Я уверен, что это глупый вопрос новичка, но я впервые работаю с SOAP, поэтому, думаю, я соответствую требованиям. У меня чертовски много времени, пытаясь загрузить локальный файл WSDL из моего класса PHP. Я не понимаю, где он ищет файл или как я могу ссылаться на него локально. Я мог бы указать абсолютный путь, используя полный URL-адрес веб-сайта, но это кажется излишним, и это будет работать ТОЛЬКО на этом сайте. Я бы предпочел ссылаться на файл, используя относительный путь.
Я использую PHP с магазином Magento. Класс, который обрабатывает связь с сервером SOAP, — Namespace_Module_Model_Carrier_Fedex_Addressvalidation
, расположенный по адресу app/code/local/Namespace/Module/Model/Carrier/Fedex/Addressvalidation.php
. Экземпляр этого класса создается с помощью Mage::getModel('shippingrates/carrier_fedex_addressvalidation')
из класса Namespace_Module_Model_Carrier_Fedex
. Расположение WSDL определяется в верхней части класса проверки адреса:
protected $_wsdl = 'AddressValidationService_v2.wsdl';
В конструкторе модели я инициализирую SoapClient:
$this->_client = new SoapClient($this->_wsdl);
$this->_client->__setLocation($this->getServiceLocation());//returns a remote URL for their test server
Файл находится в том же каталоге, что и файл Addressvalidation.php, но я также попытался найти его в том же каталоге, что и скрипт Fedex.php, а также по адресу app/code/local/, но ничего не работает. Я пытался установить для переменной WSDL значение ./AddressValidationService_v2.wsdl, а также различные другие параметры, но всегда получаю такое исключение:
Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from './AddressValidationService_v2.wsdl' : failed to load external entity
Если кто-то может помочь мне понять область действия и то, где SoapClient ищет файлы, я думаю, что у меня будет лучшее понимание того, куда их поместить и как на них ссылаться.