Может ли кто-нибудь помочь мне с XML — RPC?
Я использую библиотеку xmlrpc http://gggeek.github.io/phpxmlrpc/ версия 4.0.0
Я не знаю, как вызвать getData и в результате.
Я постоянно возвращаю ошибку 17
Спасибо всем!!
Это мой «серверный» класс.
class xmlrpc_server (
public function run(){
$this->getMethods();
$this->server = new PhpXmlRpc\Server($this->methods);
}public function getMethods(){
$this->methods = array(
"getData" => array(
"function" => "getData",
"signature" => array( array( PhpXmlRpc\Value::$xmlrpcArray, PhpXmlRpc\Value::$xmlrpcInt )),
"docstring" => "Auth server - getData (with AUTH ID).")
);
}function getData($m){
$mydata = array();
$mydata['user_id'] = $m->getParam(0); //sended user ID
return PhpXmlRpc\Response( $myexport, "array" );
}}
Класс клиента
class client(
public function send(){
$this->user_id = 123456;
PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
$this->server_connect = new xmlrpc_client('/index.php', 'myserver.com', 80);
$params = array(new xmlrpcval($this->user_id, 'int'));
$msg = new xmlrpcmsg('getData', $params); //call 'getData'
$response = $this->server_connect->send($msg); //send and get response
print_r($response); //print response
}
)
$client = new client;
$client->send();
И результаты из print_r ()
PhpXmlRpc\Response Object
(
[val] => 0
[valtyp] =>
[errno] => 17
[errstr] => Internal server error: no function matches method
[payload] =>
[hdrs] => Array
(
[date] => Sat, 11 Feb 2017 13:57:40 GMT
[server] => Apache/2.4.10 (Debian)
[vary] => Accept-Charset,Accept-Encoding
[content-encoding] => gzip
[content-length] => 201
[connection] => close
[content-type] => text/xml; charset=UTF-8
)
[_cookies] => Array
(
)
[content_type] => text/xml
[raw_data] => HTTP/1.1 200 OK
Date: Sat, 11 Feb 2017 13:57:40 GMT
Server: Apache/2.4.10 (Debian)
Vary: Accept-Charset,Accept-Encoding
Content-Encoding: gzip
Content-Length: 201
Connection: close
Content-Type: text/xml; charset=UTF-8
Неустранимая ошибка в определении карты отправки: "function" => "getData"
должно быть "function" => array( $this, "getData")
В противном случае сервер xmlrpc будет искать глобальную php-функцию ‘getData’, которая будет выполняться при получении вызова xmlrpc, вместо того, чтобы искать свой собственный метод.
В качестве примечания: в вашем примере вы также должны исправить return PhpXmlRpc\Response( $myexport, "array" );
быть return new PhpXmlRpc\Response( new PhpXmlRpc\Value( $myexport, "array" ) );
Других решений пока нет …