0

我在 PHP XML-RPC / JSON-RPC 客户端和服务器中查找 XML-RPC 和 JSON-RPC 的示例或教程

有人可以告诉我吗?

谢谢?对不起,我的英语不好。

4

3 回答 3

0

我认为实现 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 请求示例。

于 2014-04-15T16:24:28.827 回答
0

对于 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

于 2013-09-19T11:57:44.990 回答
0

我将 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' // 服务中的服务版本
    );

于 2016-10-30T16:27:50.380 回答