2015-08-26 2 views
0

Я могу отправить следующий XML-файл в веб-сервис, и я получаю идентификатор ответа, которого я ожидаю.PHP SOAP-клиент и пространства имен

<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope"> 
    <Body> 
    <logon xmlns="http://tempuri.org/"> 
     <username>USRNAME</username> 
     <password>b5059e852207a</password> 
     </logon> 
    </Body> 
</Envelope> 

Я сейчас пытаюсь преобразовать это, чтобы использовать PHP SOAP-клиент. Я делаю следующий вызов

$soapclient = new SoapClient('http://*********.co.uk/ws-b/WebservicesPTP.asmx?wsdl'); 

и я могу получить список функций:

$functions = $soapclient->__getFunctions(); 

, но когда я пытаюсь использовать метод входа в систему:

$params = array('username' => 'USRNAME', 'password' => 'b5059e852207a'); 
$response = $soapclient->logon($params); 

я не получаю любое возвращение вообще.

Я подозреваю, что это что-то с пространством имен, но у меня есть два на конверте и один на входе в систему. Нужно ли мне это, и если да, то как добавить их в SOAP-клиент?

EDIT: Я получаю следующее сообщение об ошибке PHP:

PHP Fatal error: Uncaught SoapFault exception: [soap:Server] rt.exception.RTException: Object reference not set to an instance of an object 
+0

Трудно сказать, что не так, потому что мы ничего не знаем о WSDL. Вы можете отслеживать тело запроса, используя: ['__getLastRequest()'] (http://php.net/manual/en/soapclient.getlastrequest.php). Вспомните о наборе 'trace => true' в конструкторе SoapClient. –

+0

Я только что пробовал это, но я даже не прошел мимо входа в систему. Если я ставлю простое тестовое сообщение после вызова, я не получу этот вывод. – bigfatfrog

+0

Я получаю следующую ошибку PHP: - PHP Fatal error: Uncaught SoapFault exception: [soap: Server] rt.exception.RTException: ссылка на объект не установлена ​​в экземпляр объекта – bigfatfrog

ответ

0

Спасибо Петр Olaszewski. Наконец, эта работа. Проблема заключалась не в именах, а просто в параметре входа в систему отсутствующего параметра «session». Разочаровало это вызвало просто провал вызова, поэтому я не мог использовать метод _getLastRequest.

Смежные вопросы