I am looking up exmples or tutorial of XML-RPC and JSON-RPC in PHP XML-RPC / JSON-RPC client and server
Can someone tell me that?
Thank you? Sorry My english is not good.
I am looking up exmples or tutorial of XML-RPC and JSON-RPC in PHP XML-RPC / JSON-RPC client and server
Can someone tell me that?
Thank you? Sorry My english is not good.
For JSON-RPC you can use this one: jsonrpcphp
See example: [Server]
<?php
require_once 'example.php';
$myExample = new example();
// performs some basic operation
echo '<b>Attempt to perform basic operations</b><br />'."\n";
try {
echo 'Your name is <i>'.$myExample->giveMeSomeData('name').'</i><br />'."\n";
$myExample->changeYourState('I am using this function from the local environement');
echo 'Your status request has been accepted<br />'."\n";
} catch (Exception $e) {
echo nl2br($e->getMessage()).'<br />'."\n";
}
// performs some strategic operation, locally allowed
echo '<br /><b>Attempt to store strategic data</b><br />'."\n";
try {
$myExample->writeSomething('Strategic string!');
echo 'Strategic data succefully stored';
} catch (Exception $e) {
echo nl2br($e->getMessage());
}
?>
[client]
<?php
require_once 'jsonRPCClient.php';
$myExample = new jsonRPCClient('http://jsonrpcphp.org/server.php');
// performs some basic operation
echo '<b>Attempt to perform basic operations</b><br />'."\n";
try {
echo 'Your name is <i>'.$myExample->giveMeSomeData('name').'</i><br />'."\n";
$myExample->changeYourState('I am using this function from the network');
echo 'Your status request has been accepted<br />'."\n";
} catch (Exception $e) {
echo nl2br($e->getMessage()).'<br />'."\n";
}
// performs some strategic operation, locally allowed
echo '<br /><b>Attempt to store strategic data</b><br />'."\n";
try {
$myExample->writeSomething('Strategic string!');
echo 'Strategic data succefully stored';
} catch (Exception $e) {
echo nl2br($e->getMessage());
}
?>
I think that best way to implement a json-rpc service is using Zend component Zend_Json_Server.
So i suggest you to use Zend_Json component to implement a json-rpc service in php. Zend framework allows use of its component "out of the box". So you could do a structure like following:
Project
|
------libs/Zend
|
-----Json/
|
-----Server/
|
-----Loader.php
And implement something like this:
<?php
// path to dir with Zend root
set_include_path(__DIR__ . "/libs");
// path to Zend loader
require_once __DIR__ . "/libs/Zend/Loader.php";
Zend_Loader::loadClass('Zend_Json_Server');
$server = new Zend_Json_Server();
$server->setClass('Service');
/**
* Service Implementation
*/
class Service
{
public function __construct()
{
// init some service attributes ...
}
/**
* example of api method exposed by service
* return "hello world" message
* @param $domain
* @return object (json)
*/
public function helloworld()
{
$aOut = array('msg' => 'hello world');
return json_encode($aOut);
}
// ... other methods of the service
}
try {
$output = $server->handle();
echo $output;
} catch (Exception $e) {
echo ($e->getMessage());
//header('HTTP/1.1 400 BAD REQUEST');
exit();
}
About the client you can send a json message like this in a post request:
{
"jsonrpc": "2.0",
"method": "helloworld",
"params": {},
"id": 1
}
In this post Send json post using php you can see some examples of json request via curl or via Http Zend module.
I use vdata for RPC protocol: http://vdata.dekuan.org/
1, PHP and JavaScript are both okay.
2, Cross-origin resource sharing(CORS) call is still okay.
PHP : Call service at client
use dekuan\vdata\CConst; use dekuan\vdata\CRequest; $cRequest = CRequest::GetInstance(); $arrResp = []; $nCall = $cRequest->Post ( [ 'url' => 'http://api-account.dekuan.org/login', 'data' => [ 'u_name' => 'username', 'u_pwd' => 'password', 'u_keep' => 1 ], 'version' => '1.0', // required version of service 'timeout' => 30, // timeout in seconds 'cookie' => [], // array or string are both okay. ], $arrResp ); if ( CConst::ERROR_SUCCESS == $nCall && $cRequest->IsValidVData( $arrResp ) ) { // arrResp // 'errorid' : error id // 'errordesc' : error desc // 'vdata' : virtual data // 'version' : in-service version of service // 'json' : original json array print_r( $arrResp ); }
PHP : Respond client at server
use dekuan\vdata\CResponse; $cResponse = CResponse::GetInstance(); $cResponse->SetServiceName( 'vdata protocol service' ); $cResponse->SetServiceUrl( 'http://vdata.dekuan.org/vdata' ); $cResponse->Send ( 0, // error id "error desc", // error description [ "info" => "..." ], // customized info '1.0' // in-service version of service );