Ill попробовать то, что вы предложили доложите, а затем заменить клиент JSon.
РЕДАКТИРОВАТЬ:
Didnt работа с замененным клиента RPC или с истинным утверждением
RPCclient им с помощью:
/ **
* Объект этого класса являются общими клиентами jsonRPC 1.0
* http://json-rpc.org/wiki/specification
*
* @author Серджио
* /
класс jsonRPCClient {
/ **
* Debug состояние
*
* @var булево
* /
частные $ отлаживать;
/ **
* URL-адрес сервера
*
* @var строка
* /
частный $ URL;
/ **
* Запрос идентификатор
*
* @var целое
* /
частный $ ID;
/ **
* Если это правда, уведомления выполняются вместо запросов
*
* @var булево
* /
частное $ уведомление = ложь;
/ **
* Принимает параметры соединения
*
* @param строка $ URL
* @param булева $ отлаживать
* /
общественная функция __construct ($ URL, $ user_pwd, $ отлаживать = ложь) {
// URL сервера
$ this->URL = $ URL;
// пользовательский пароль
$ this->user_pwd = $ user_pwd;
// прокси
пусто ($ прокси)? $ this->прокси = '': $ this->прокси = $ прокси;
// состояние отладки
пусто ($ отлаживать)? $ this->отлаживать = ложь: $ this->отлаживать = истина;
// Идентификатор сообщения
$ this->ID = 1;
}
/ **
* Устанавливает состояние уведомления объекта. В этом состоянии, уведомления выполняются, вместо запросов.
*
* @param булева $ уведомление
* /
общественная функция setRPCNotification ($ уведомлений) {
пусто ($ уведомление)?
$ this->уведомление = ложь
:
$ this->уведомление = True;
}
/ **
* Выполняет запрос jsonRCP и получает результаты в виде массива
*
* @param строка $ метод
* @param массив $ PARAMS
* @return массив
* /
общественная функция __call (метод $, $ PARAMS) {
// проверить
если (! is_scalar ($ метод)) {
проливают новый Exception ( «имя метода не имеет значения скалярной»);
}
// проверить
если (is_array ($ PARAMS)) {
нет // нет ключей
$ PARAMS = array_values ($ PARAMS);
} Еще {
проливают новый Exception ( «Params должны быть предоставлены в виде массива»);
}
// устанавливает уведомление или запрос задачи
если ($ this->уведомление) {
$ CurrentId = NULL;
} Еще {
$ CurrentId = $ this->Я бы;
}
// готовит запрос
$ Запрос = массив (
«Метод» => $ Метод,
'PARAMS' => $ PARAMS,
«Идентификатор» => $ currentId
);
$ Запрос = json_encode ($ запроса);
$ this->отлаживать && $ this->отладки. = '***** ***** Request'."\ п". $ Запрос."\ п". "***** Конец запроса *****."\ П \ п";
// выполняет POST HTTP
$ Ч = curl_init ();
curl_setopt_array ($ ч, массив (
CURLOPT_URL => $ this->URL,
CURLOPT_USERPWD => $ this->user_pwd,
CURLOPT_POST => правда,
CURLOPT_POSTFIELDS => $ Запрос,
CURLOPT_HTTPHEADER => Массив ( 'Content-Type: применение / JSON'),
CURLOPT_RETURNTRANSFER => правда,
));
$ Ответ = curl_exec ($ ч);
$ HTTP_CODE = curl_getinfo ($ ч, CURLINFO_HTTP_CODE);
если ($ HTTP_CODE < 200 || $ HTTP_CODE >= 300)
{
проливают новый Exception ( «Не удается подключиться к». $ this->URL);
}
$ this->отлаживать && $ this->отладки. = '***** ответ сервера *****."\ п". $ Ответ. ***** Конец ответа сервера *****."\ п";
$ Ответ = json_decode ($ ответ, правда);
// отладочный вывод
если ($ this->отладки) {
эхо nl2br ($ отлаживать);
}
// окончательные проверки и возврат
если (! $ this->уведомление) {
// проверить
если ($ ответ [ 'ID']! = $ currentId) {
// проливают новый Exception ( 'Неверный идентификатор ответа (идентификатор запроса:' $ currentId 'идентификатор ответа:' .print_r ($ ответ, правда) ')'...);
}
если (! is_null ($ ответ [ 'ошибка'])) {
// проливают новый Exception ( 'Request ошибку:' $ ответ [ 'ошибки'] [ 'сообщение'].);
}
возвращение $ ответ [ 'результат'];
} Еще {
возвращает истину;
}
}
}
?>