我在 PHP XML-RPC / JSON-RPC 客户端和服务器中查找 XML-RPC 和 JSON-RPC 的示例或教程
有人可以告诉我吗?
谢谢?对不起,我的英语不好。
我在 PHP XML-RPC / JSON-RPC 客户端和服务器中查找 XML-RPC 和 JSON-RPC 的示例或教程
有人可以告诉我吗?
谢谢?对不起,我的英语不好。
我认为实现 json-rpc 服务的最佳方式是使用 Zend 组件 Zend_Json_Server。
所以我建议你使用 Zend_Json 组件在 php 中实现一个 json-rpc 服务。Zend 框架允许“开箱即用”地使用其组件。因此,您可以执行如下结构:
Project
|
------libs/Zend
|
-----Json/
|
-----Server/
|
-----Loader.php
并实现这样的事情:
<?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();
}
关于客户端,您可以在 post 请求中发送这样的 json 消息:
{
"jsonrpc": "2.0",
"method": "helloworld",
"params": {},
"id": 1
}
在这篇使用 php 发送 json 帖子的帖子中,您可以看到一些通过 curl 或通过 Http Zend 模块的 json 请求示例。
对于 JSON-RPC,你可以使用这个:jsonrpcphp
参见示例:[服务器]
<?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());
}
?>
[客户]
<?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());
}
?>
来源: http: //jsonrpcphp.org/ ?page=example&lang=en
我将 vdata 用于 RPC 协议:http: //vdata.dekuan.org/
1、PHP和JavaScript都可以。
2、跨域资源共享(CORS)调用还是可以的。
PHP:在客户端调用服务
使用德宽\vdata\CConst; 使用德宽\vdata\CRequest; $cRequest = CRequest::GetInstance(); $arrResp = []; $nCall = $cRequest->发布 ( [ 'url' => 'http://api-account.dekuan.org/login', '数据' => [ 'u_name' => '用户名', 'u_pwd' => '密码', 'u_keep' => 1 ], 'version' => '1.0', // 所需的服务版本 'timeout' => 30, // 超时秒数 'cookie' => [], // 数组或字符串都可以。 ], $arrResp ); if ( CConst::ERROR_SUCCESS == $nCall && $cRequest->IsValidVData($arrResp)) { // arrResp // 'errorid' : 错误 ID // 'errordesc' : 错误描述 // 'vdata' : 虚拟数据 // 'version' : 服务的服务版本 // 'json' : 原始 json 数组 print_r($arrResp); }
PHP:在服务器上响应客户端
使用 dekuan\vdata\CResponse; $cResponse = CResponse::GetInstance(); $cResponse->SetServiceName('vdata 协议服务'); $cResponse->SetServiceUrl('http://vdata.dekuan.org/vdata'); $cResponse->发送 ( 0, // 错误 ID "error desc", // 错误描述 [ "info" => "..." ], // 自定义信息 '1.0' // 服务中的服务版本 );