Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Проблема з SOAP

Автор: Alexintro
Дата сообщения: 06.07.2007 20:37
Всем привет!
Начал писать SOAP-клиент. Но PHP выдает ошибку:

Fatal error: Class 'SoapClient' not found in /path/s.php on line 6

В етой строке следующий код:

$client = new SoapClient("http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl");
Автор: Brodyaga
Дата сообщения: 06.07.2007 21:26
не подключен файл, в котором обьявлен класс SoapClient. Простейшее сообщение об ошибке, учите английский.
Автор: Alexintro
Дата сообщения: 06.07.2007 21:35
Английский я знаю, понял что невозможно создать екземпляр класса.
Мне интересно где етот файл качнуть. и может есть еще какие-то нюанси.
З.Ы. В php.ini раскоментировал строку с расширением soap.
Автор: Cheery
Дата сообщения: 06.07.2007 21:50
Alexintro

Цитата:
невозможно создать екземпляр класса.

во первых не "невозможно", а его просто нет. описания этого класса
ну и мало снять коммент.. надо и перезапустить апач
только у меня тогда выдает, что
Цитата:
Warning: SoapClient::SoapClient(http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl) [function.SoapClient-SoapClient]: failed to open stream: No connection could be made because the target machine actively refused it

в русском языке нет предлога "з"
Автор: Alexintro
Дата сообщения: 07.07.2007 13:39
надо скачать любую реализацию soap для PHP. я воспользовался nusoap.
сейчас новый вопрос. есть код
$client = new SoapClient ("www.anyserver.com/document?wsdl");

насколько я понимаю $client может использовать методы сервиса, которые определены на сервере (например $client->GetCursOnDateXML($date); )
При етом выдает ошибку:
Fatal error: Call to undefined method soapclient::GetCursOnDateXML()
Автор: diezel
Дата сообщения: 07.07.2007 14:25

Цитата:
насколько я понимаю $client может использовать методы сервиса, которые определены на сервере (например $client->GetCursOnDateXML($date);

Не так, в нюсоап вызов делается так:

Код:
$params = array( 'date' => $date);
$client->call('GetCursOnDateXML', $params, '', '', false, true);
Автор: Alexintro
Дата сообщения: 07.07.2007 18:47
Посмотрите пожалуйста на код. Вроде все правильно. К сожалению, в Сети очень мало информации на ету тему. Если можете исправте что не так, дальше сам разберусь.

<?php
require_once('nusoap.php');
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl");
$params["On_date"] = $currentDate;                        
print ($client->call('GetCursOnDateXML', array ('On_date'=>'1183593600', '', '', false, true) ));
?>

Помогите пожайлуста.
Автор: diezel
Дата сообщения: 07.07.2007 21:54
Alexintro
Скобку не там поставил.

Код: <?php
require_once('nusoap.php');
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl");
$params["On_date"] = $currentDate;
print ($client->call('GetCursOnDateXML', array ('On_date'=>'1183593600'), '', '', false, true ));
?>
Автор: Alexintro
Дата сообщения: 09.07.2007 17:28
Спасибо. Все работает. Еще один вопрос.
В заголовке soap-запроса ($client->request) указано что charset=ISO-8859-1.
В заголовке ответа ($client->response) charset=utf-8.

При просмотре XML ответа все символы отображаются правильно. Но если вызвать метод и результат присвоить переменной:

$result = $client->call('MethodName', array(), '', '', false, true);

то при выводе елементов масива вместо кириличных символов - "????????".
Пробовал конвертировать соответсвенные елементы масива в различные кодировки - не помогло.
Автор: diezel
Дата сообщения: 09.07.2007 18:09
В коде серверной части есть один баг, связанный с кодировками. Сервер сам пытается использовать кодировку входящего запроса, чтобы решить, какую кодировку использовать в ответе. Но в некоторых версиях PHP кодировка определяется некорректно, и ответное сообщение кодируется в UTF-8. Значит, либо править код самому, либо качать патч с кодировками с SourceForge. Я давно не работал с SOAP не-латиницей, поэтому точный линк дать не могу.

Страницы: 1

Предыдущая тема: Table или же Div - что лучше?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.