Сигурен съм, че това е тъп въпрос за начинаещи, но това е първият път, когато работя със 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 търси файловете, мисля, че ще разбера по-добре къде да ги поставя и как да ги препращам.