Compare commits
51 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a3f0ba00b4 | ||
![]() |
6bb15490de | ||
![]() |
7e30cfa915 | ||
![]() |
2341f068d3 | ||
![]() |
5930e7b9fc | ||
![]() |
ac3f7bb737 | ||
![]() |
9cbfd4850e | ||
![]() |
f2ac2f4b38 | ||
![]() |
ee2cdf45a3 | ||
![]() |
4daf42ffd4 | ||
![]() |
c9fa7757bd | ||
![]() |
d959852a56 | ||
![]() |
60bc5943ff | ||
![]() |
d12d0486b9 | ||
![]() |
deb3dadbe4 | ||
![]() |
438147dbd8 | ||
![]() |
47edd9968b | ||
![]() |
52fac5a469 | ||
![]() |
fde7194d8e | ||
![]() |
0d701a1167 | ||
![]() |
70c14f7f33 | ||
![]() |
12684966a6 | ||
![]() |
c43325880b | ||
![]() |
198318d9d0 | ||
![]() |
81b327c30d | ||
![]() |
481aa2b9a7 | ||
![]() |
ca37e45801 | ||
![]() |
4ccbf42052 | ||
![]() |
19ac4fe488 | ||
![]() |
ebcfb60ea5 | ||
![]() |
b3f5ec87b1 | ||
![]() |
375e339439 | ||
![]() |
36651673d9 | ||
![]() |
ea6a900d1e | ||
![]() |
3710712ebb | ||
![]() |
2f9f47b96a | ||
![]() |
8ba0e9a430 | ||
![]() |
306b6717ed | ||
![]() |
d7164ebb8e | ||
![]() |
82034913bd | ||
![]() |
853b20b6d4 | ||
![]() |
7a4b3b9be4 | ||
![]() |
5a670b51d3 | ||
![]() |
d5d06d3b84 | ||
![]() |
e9ba9fae73 | ||
![]() |
c27fac903f | ||
![]() |
710313a1b3 | ||
![]() |
301271771e | ||
![]() |
54c80c06f3 | ||
![]() |
777afdd1e0 | ||
![]() |
4e2a2a66be |
|
@ -12,6 +12,8 @@
|
|||
|
||||
执行
|
||||
```bash
|
||||
composer config repositories.php-rpc-doc vcs git@git.int.haowumc.com:composer/php-rpc-doc.git
|
||||
composer require itxq/api-doc-php
|
||||
composer config repositories.php-json-rpc vcs git@git.int.haowumc.com:composer/php-json-rpc.git
|
||||
composer require paidian/json-rpc:dev-master
|
||||
```
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
"illuminate/support": "^5.5",
|
||||
"illuminate/http": "^5.5",
|
||||
"monolog/monolog": "^1.24",
|
||||
"itxq/api-doc-php": "^1.1",
|
||||
"influxdb/influxdb-php": "^1.14"
|
||||
"influxdb/influxdb-php": "^1.14",
|
||||
"itxq/api-doc-php": "^1.1"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
@ -16,9 +16,5 @@
|
|||
}
|
||||
},
|
||||
"require-dev": {
|
||||
},
|
||||
"api-doc-php": {
|
||||
"type": "vcs",
|
||||
"url": "git@git.int.haowumc.com:composer/php-rpc-doc.git"
|
||||
}
|
||||
}
|
||||
|
|
994
composer.lock
generated
994
composer.lock
generated
File diff suppressed because it is too large
Load Diff
|
@ -45,5 +45,9 @@ return [
|
|||
'local' => true,
|
||||
'base_uri' => env('RPC_PAYMENT_URI','http://payapi.dev.haowumc.com'),
|
||||
],
|
||||
'wx-server' => [
|
||||
'local' => true,
|
||||
'base_uri' => env('RPC_WX_SERVER_URI', 'http://sapi.in.haowumc.com'),
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
@ -7,6 +7,7 @@ use JsonRpc\Exception\RpcServerException;
|
|||
use JsonRpc\Server\JsonRpcBase;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Logger;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class Client extends JsonRpc
|
||||
{
|
||||
|
@ -27,6 +28,11 @@ class Client extends JsonRpc
|
|||
*/
|
||||
protected $http;
|
||||
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
protected $logger;
|
||||
|
||||
/**
|
||||
* which server rpc call choose
|
||||
* @var array
|
||||
|
@ -39,6 +45,11 @@ class Client extends JsonRpc
|
|||
$this->id = 1;
|
||||
}
|
||||
|
||||
public function setLogger($logger)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param $k
|
||||
|
@ -49,7 +60,7 @@ class Client extends JsonRpc
|
|||
$this->server_config = $this->config['client'][$k];
|
||||
|
||||
$default = [
|
||||
'timeout' => 3,
|
||||
'timeout' => 60,
|
||||
'allow_redirects' => false,
|
||||
];
|
||||
|
||||
|
@ -60,10 +71,11 @@ class Client extends JsonRpc
|
|||
/**
|
||||
* @param $name
|
||||
* @param $arguments
|
||||
* @param $options []
|
||||
* @throws RpcServerException
|
||||
* @return array
|
||||
*/
|
||||
public function call($name, $arguments)
|
||||
public function call($name, $arguments, $options = [])
|
||||
{
|
||||
$payload = [
|
||||
'jsonrpc' => '2.0',
|
||||
|
@ -71,7 +83,7 @@ class Client extends JsonRpc
|
|||
'params' => $arguments,
|
||||
'id' => $this->id(),
|
||||
];
|
||||
return $this->post($payload);
|
||||
return $this->post($payload, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,21 +102,25 @@ class Client extends JsonRpc
|
|||
* @throws RpcServerException
|
||||
* @return array
|
||||
*/
|
||||
protected function post($payload)
|
||||
protected function post($payload, $options = [])
|
||||
{
|
||||
$uri = 'rpc/json-rpc-v2.json?app=' . $this->config['app'];
|
||||
|
||||
$requestId = isset($_SERVER['HTTP_X_REQUEST_ID']) ? $_SERVER['HTTP_X_REQUEST_ID'] : 'nginx-config-err';
|
||||
|
||||
try {
|
||||
$headers = [
|
||||
'X-Client-App' => $this->config['app'],
|
||||
'X-Request-Id' => $requestId,
|
||||
];
|
||||
app('rpc.logger')->info("client_request", array_merge($this->server_config, $payload));
|
||||
$resp = $this->http->request('POST', 'rpc/json-rpc-v2.json', [
|
||||
$this->logger && $this->logger->info("client_request", array_merge($this->server_config, $payload));
|
||||
$resp = $this->http->request('POST', $uri, array_merge([
|
||||
'headers' => $headers,
|
||||
'json' => $payload,
|
||||
]);
|
||||
], $options));
|
||||
} catch (ServerException $e) {
|
||||
$ex = new RpcServerException(self::ErrorMsg[JsonRpc::Rpc_Error_Internal_Error], JsonRpc::Rpc_Error_Internal_Error);
|
||||
if (env("APP_DEBUG") == true) {
|
||||
$resp = $e->getResponse();
|
||||
if (function_exists('env') && env("APP_DEBUG") == true) {
|
||||
$ex->setResponse($e->getResponse());
|
||||
}
|
||||
throw $ex;
|
||||
|
@ -112,7 +128,7 @@ class Client extends JsonRpc
|
|||
|
||||
try {
|
||||
$body = \GuzzleHttp\json_decode($resp->getBody(), true);
|
||||
app('rpc.logger')->info("client_response", $body);
|
||||
$this->logger && $this->logger->info("client_response", $body);
|
||||
if (empty($body)) {
|
||||
throw new RpcServerException('http response empty', JsonRpc::Rpc_Error_System_Error);
|
||||
}
|
||||
|
@ -125,9 +141,9 @@ class Client extends JsonRpc
|
|||
return $body['result'];
|
||||
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
app('rpc.logger')->error('client_decode_error', array_merge($this->server_config, $payload));
|
||||
$this->logger && $this->logger->error('client_decode_error', array_merge($this->server_config, $payload));
|
||||
$ex = new RpcServerException($e->getMessage(), JsonRpc::Rpc_Error_Parse_Error);
|
||||
if (env("APP_DEBUG") == true) {
|
||||
if (function_exists('env') && env("APP_DEBUG") == true) {
|
||||
$ex->setResponse($resp);
|
||||
}
|
||||
throw $ex;
|
||||
|
|
|
@ -40,7 +40,7 @@ class Security
|
|||
*/
|
||||
private function isClientIPPermitted($ip)
|
||||
{
|
||||
if (!app()->environment('production', 'staging')) {
|
||||
if (app()->environment('develop', 'local')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ use Closure;
|
|||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use InfluxDB\Database;
|
||||
use InfluxDB\Exception;
|
||||
use InfluxDB\Point;
|
||||
|
||||
/**
|
||||
|
@ -39,20 +40,24 @@ class TunnelMiddleware
|
|||
{
|
||||
//过滤tool返回结果
|
||||
if ($response instanceof JsonResponse) {
|
||||
if (app()->environment('dev', 'production')) {
|
||||
if (app()->environment('develop', 'production') && env('RPC_MONITOR_SWITCH') == 1) {
|
||||
$content = $response->getOriginalContent();
|
||||
$status = isset($content['error']) ? $content['error']['code'] : 200;
|
||||
$client = new \InfluxDB\Client("10.0.1.67");
|
||||
$client = new \InfluxDB\Client("influxdb-svc", 8086, '', '', false, false, 1, 1);
|
||||
$database = $client->selectDB('rpc_monitor');
|
||||
$points = array(
|
||||
new Point(
|
||||
'monitor',
|
||||
null,
|
||||
1,
|
||||
['app' => env('APP_NAME'), 'status' => $status, 'env' => app()->environment()],
|
||||
['content' => $request->getContent()]
|
||||
['status_value' => $status == 200 ? $status : -$status]
|
||||
)
|
||||
);
|
||||
$database->writePoints($points, Database::PRECISION_SECONDS);
|
||||
try {
|
||||
$database->writePoints($points, Database::PRECISION_SECONDS);
|
||||
} catch (Exception $exception) {
|
||||
app('log')->error('influxdb-write-wrong', ['code' => $exception->getCode(),'message' => $exception->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,10 @@ use Monolog\Logger;
|
|||
class BaseServiceProvider extends ServiceProvider
|
||||
{
|
||||
|
||||
public function boot(){
|
||||
protected $logger;
|
||||
|
||||
public function boot()
|
||||
{
|
||||
Request::setTrustedProxies([
|
||||
//pod network
|
||||
'172.20.0.0/16',
|
||||
|
@ -29,26 +32,26 @@ class BaseServiceProvider extends ServiceProvider
|
|||
protected function setupConfig()
|
||||
{
|
||||
$source = realpath(__DIR__ . '/../../config/rpc.php');
|
||||
|
||||
if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
|
||||
$this->publishes([$source => config_path('rpc.php')], 'rpc');
|
||||
} elseif ($this->app instanceof LumenApplication) {
|
||||
$this->app->configure('rpc');
|
||||
}
|
||||
|
||||
$this->app->configure('rpc');
|
||||
// if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
|
||||
// $this->publishes([$source => config_path('rpc.php')], 'rpc');
|
||||
// } elseif ($this->app instanceof LumenApplication) {
|
||||
// $this->app->configure('rpc');
|
||||
// }
|
||||
// var_dump($this->app instanceof LumenApplication); // false
|
||||
// exit();
|
||||
$this->mergeConfigFrom($source, 'rpc');
|
||||
|
||||
}
|
||||
|
||||
public function register()
|
||||
{
|
||||
$this->setupConfig();
|
||||
$this->app->singleton("rpc.logger", function () {
|
||||
$config = config('rpc');
|
||||
$stream = new StreamHandler($config['log_path']);
|
||||
$stream->setFormatter(new $config['log_formatter']());
|
||||
$logger = new Logger('RPC.LOGGER');
|
||||
return $logger->pushHandler($stream);
|
||||
});
|
||||
$this->logger = new Logger('RPC.LOGGER');
|
||||
$config = config('rpc');
|
||||
$stream = new StreamHandler($config['log_path']);
|
||||
$stream->setFormatter(new $config['log_formatter']());
|
||||
$this->logger->pushHandler($stream);
|
||||
}
|
||||
|
||||
}
|
|
@ -16,18 +16,19 @@ class ClientServiceProvider extends BaseServiceProvider
|
|||
public function register()
|
||||
{
|
||||
parent::register();
|
||||
$this->app->configure('rpc');
|
||||
$config = config('rpc');
|
||||
if (!is_array($config)) {
|
||||
throw new RpcServerException("Application's Rpc Client Config Undefind", 500);
|
||||
}
|
||||
$this->app->singleton('rpc', function () use ($config) {
|
||||
return new Client($config);
|
||||
$client = new Client($config);
|
||||
$client->setLogger($this->logger);
|
||||
return $client;
|
||||
});
|
||||
|
||||
foreach ($config['client'] as $k => $item) {
|
||||
$this->app->singleton('rpc.' . $k, function () use ($k) {
|
||||
return app('rpc')->endpoint($k);
|
||||
$this->app->singleton('rpc.' . $k, function () use ($k, $config) {
|
||||
return (new Client($config))->endpoint($k);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ class LumenServerServiceProvider extends BaseServiceProvider
|
|||
public function boot()
|
||||
{
|
||||
parent::boot();
|
||||
// $this->app->middleware(TunnelMiddleware::class);
|
||||
$this->app->middleware(TunnelMiddleware::class);
|
||||
$this->app->routeMiddleware(['rpc.security' => Security::class]);
|
||||
$this->app->router->group([
|
||||
'prefix' => 'rpc',
|
||||
|
@ -40,6 +40,7 @@ class LumenServerServiceProvider extends BaseServiceProvider
|
|||
}
|
||||
$callback = function () use ($config) {
|
||||
$server = new JsonRpcServer($config);
|
||||
$server->setLogger($this->logger);
|
||||
return $server->handler();
|
||||
};
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace JsonRpc\Server;
|
|||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use JsonRpc\JsonRpc;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class JsonRpcServer extends JsonRpc
|
||||
{
|
||||
|
@ -13,13 +14,19 @@ class JsonRpcServer extends JsonRpc
|
|||
* @var Request
|
||||
*/
|
||||
public $request;
|
||||
|
||||
/**
|
||||
* @var config 配置
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
protected $logger;
|
||||
|
||||
/**
|
||||
* @var array 配置
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @var rpc.server.map rpc方法
|
||||
* @var array rpc.server.map rpc方法
|
||||
*/
|
||||
protected $map;
|
||||
|
||||
|
@ -30,18 +37,22 @@ class JsonRpcServer extends JsonRpc
|
|||
$this->map = $config['map'];
|
||||
}
|
||||
|
||||
public function setLogger($logger){
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
public function handler()
|
||||
{
|
||||
// if ($this->request->getContentType() != 'json') {
|
||||
// return $this->error(self::Rpc_Error_Invalid_Request);
|
||||
// }
|
||||
if ($this->request->getContentType() != 'json') {
|
||||
return $this->error(self::Rpc_Error_Invalid_Request);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
if ($this->request->method() == Request::METHOD_GET) {
|
||||
$method = $this->request->input('method');
|
||||
$id = $this->request->input('id');
|
||||
$params = \GuzzleHttp\json_decode($this->request->input('params'),true);
|
||||
$params = \GuzzleHttp\json_decode($this->request->input('params'), true);
|
||||
} else {
|
||||
list($method, $params, $id) = $this->parseJson($this->request->getContent());
|
||||
}
|
||||
|
@ -56,9 +67,9 @@ class JsonRpcServer extends JsonRpc
|
|||
return $this->error(self::Rpc_Error_Invalid_Params);
|
||||
}
|
||||
$this->request->attributes->add(['tunnel_method' => $method, 'tunnel_params' => $params]);
|
||||
app('rpc.logger')->info('server', [$id, $class,$method, $params]);
|
||||
$this->logger && $this->logger->info('server', [$id, $class, $method, $params]);
|
||||
$ret = call_user_func_array([(new $class($id, $this->request)), $function], $params);
|
||||
app('rpc.logger')->info('server_result', [$id, $ret]);
|
||||
$this->logger && $this->logger->info('server_result', [$id, $ret]);
|
||||
|
||||
return JsonResponse::create($ret);
|
||||
|
||||
|
@ -67,6 +78,11 @@ class JsonRpcServer extends JsonRpc
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理json rpc post body
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
protected function parseJson($data)
|
||||
{
|
||||
$data = \GuzzleHttp\json_decode($data, true);
|
||||
|
@ -76,36 +92,23 @@ class JsonRpcServer extends JsonRpc
|
|||
return [$method, $params, $id];
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据method解析出对应的class
|
||||
* @param $method
|
||||
* @return array|mixed
|
||||
*/
|
||||
protected function parseMethodWithMap($method)
|
||||
{
|
||||
return isset($this->map[$method]) ? $this->map[$method] : ['', ''];
|
||||
}
|
||||
|
||||
/**
|
||||
* thisis
|
||||
* @param string $method 参数名称
|
||||
* @return array 返回结果
|
||||
* 检查调用方式是否足够
|
||||
* @param $class
|
||||
* @param $method
|
||||
* @param $parameters
|
||||
* @return bool
|
||||
*/
|
||||
// protected function parseMethod($method)
|
||||
// {
|
||||
// $method = explode('.', $method);
|
||||
//
|
||||
// if (count($method) < 2) {
|
||||
// return ['', ''];
|
||||
// }
|
||||
//
|
||||
// $function = array_pop($method);
|
||||
// $class = 'Rpc' . ucwords(array_pop($method));
|
||||
//
|
||||
// foreach ($method as $one) {
|
||||
// $class = ucwords($one) . '\\' . $class;
|
||||
// }
|
||||
//
|
||||
// $class = "App\Rpc\\$class";
|
||||
// return [$class, $function];
|
||||
// }
|
||||
|
||||
|
||||
protected function isEnoughParameter($class, $method, $parameters)
|
||||
{
|
||||
$r = new \ReflectionMethod($class, $method);
|
||||
|
|
|
@ -4,6 +4,7 @@ namespace JsonRpc\Server;
|
|||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\Factory;
|
||||
use itxq\apidoc\BootstrapApiDoc;
|
||||
use JsonRpc\Exception\RpcServerException;
|
||||
use Monolog\Logger;
|
||||
|
||||
|
@ -50,10 +51,24 @@ class JsonRpcTool
|
|||
);
|
||||
}
|
||||
}
|
||||
$methods = [];
|
||||
foreach ($this->config['map'] as $key => $item) {
|
||||
if (!in_array($item[0], $methods)) {
|
||||
$methods[] = $item[0];
|
||||
}
|
||||
}
|
||||
$config = [
|
||||
'class' => $methods,
|
||||
'filter_method' => [],
|
||||
];
|
||||
|
||||
$api = new BootstrapApiDoc($config);
|
||||
$data = $api->getApiDocTmp();
|
||||
$methods = $this->getMethods();
|
||||
$view->share('method', $method);
|
||||
$view->share('data',json_encode($data));
|
||||
$view->share('endpoint', $this->getEndpoint());
|
||||
$view->share('methods', $methods);
|
||||
$view->share('method', $method);
|
||||
$view->share('params', json_encode($params, JSON_PRETTY_PRINT));
|
||||
|
||||
foreach ($methods as $name => $class) {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
<nav class="col-md-3 d-none d-md-block bg-light sidebar">
|
||||
<div class="sidebar-sticky">
|
||||
<ul class="nav flex-column">
|
||||
<ul id="nav-content" class="nav flex-column">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/rpc/doc.html">
|
||||
<span data-feather="home"></span>
|
||||
|
@ -55,7 +55,6 @@
|
|||
{{--</div>--}}
|
||||
</div>
|
||||
<div class="form-row">
|
||||
|
||||
<div class="form-group col-md-12">
|
||||
<label for="inputAddress">Method</label>
|
||||
<select class="form-control" id="method" name="method">
|
||||
|
@ -64,16 +63,52 @@
|
|||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="table-item col-md-12">
|
||||
<p class="table-title">
|
||||
<span class="btn btn-xs btn-info">请求参数</span>
|
||||
</p>
|
||||
<table id="paramRequird" class="table">
|
||||
<tr>
|
||||
<td>参数</td>
|
||||
<td>类型</td>
|
||||
<td>描述</td>
|
||||
<td>默认值</td>
|
||||
<td>是否必须</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-item col-md-12">
|
||||
<p class="table-title">
|
||||
<span class="btn btn-xs btn-info">返回参数</span>
|
||||
</p>
|
||||
<table id="returnRequird" class="table">
|
||||
<tr>
|
||||
<td>参数</td>
|
||||
<td>类型</td>
|
||||
<td>描述</td>
|
||||
<td>默认值</td>
|
||||
<td>是否必须</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-item col-md-12">
|
||||
<p class="table-title">
|
||||
<span class="btn btn-xs btn-info">状态码说明</span>
|
||||
</p>
|
||||
<table id="codeRequird" class="table">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
|
||||
<div class="form-group col-md-12">
|
||||
<label for="inputAddress">Params(json 数组)</label>
|
||||
<div id="editor" style="height: 300px">{{$params}}</div>
|
||||
<input type="hidden" name="params" id="params" value="{{$params}}">
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Request</button>
|
||||
<button id="submit-btn" type="submit" class="btn btn-primary">Request</button>
|
||||
</form>
|
||||
<div class="row col-md-12">
|
||||
@if( !empty($error) )
|
||||
|
@ -107,13 +142,106 @@
|
|||
<script src="https://cdn.bootcss.com/highlight.js/9.13.1/highlight.min.js"></script>
|
||||
<script src="https://cdn.bootcss.com/highlight.js/9.13.1/languages/json.min.js"></script>
|
||||
<script src="https://cdn.bootcss.com/ace/1.4.2/ace.js"></script>
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
var editor = ace.edit("editor");
|
||||
var params = <?php echo $params; ?>;
|
||||
var data = <?php echo $data; ?>;
|
||||
var error_empty = <?php echo isset($error) ? 0 : 1; ?>;
|
||||
console.log(params)
|
||||
editor.setTheme("ace/theme/monokai");
|
||||
editor.session.setMode("ace/mode/json");
|
||||
editor.on('change', function (e) {
|
||||
$('#params').val(editor.getValue())
|
||||
})
|
||||
$(document).ready(function(){
|
||||
intTable();
|
||||
var valKey =$("#method option:first-child").text();
|
||||
var data = <?php echo $data; ?>;
|
||||
var methodArray = data[valKey];
|
||||
changeTable(methodArray);
|
||||
if (error_empty > 0) {
|
||||
var storage = window.localStorage;
|
||||
var valKey = $("#method").find("option:selected").text();
|
||||
var d = JSON.stringify(params);
|
||||
storage.setItem(valKey, d);
|
||||
}
|
||||
changeNavShow()
|
||||
});
|
||||
$('#method').on('change', function() {
|
||||
var valKey = $("#method").find("option:selected").text();
|
||||
var methodArray = data[valKey];
|
||||
intTable()
|
||||
changeTable(methodArray)
|
||||
})
|
||||
function intTable() {
|
||||
$("#paramRequird").empty();
|
||||
$("#returnRequird").empty();
|
||||
$("#codeRequird").empty();
|
||||
var html1 = "<tr><td>参数</td><td>类型</td><td>描述</td><td>默认值</td><td>是否必须</td></tr>";
|
||||
var html2 = "<tr><td>参数</td><td>类型</td><td>描述</td>/tr>";
|
||||
var html3 = "<tr><td>状态码</td><td>描述</td></tr>";
|
||||
$(html1).appendTo("#paramRequird");
|
||||
$(html2).appendTo("#returnRequird");
|
||||
$(html3).appendTo("#codeRequird");
|
||||
}
|
||||
|
||||
function changeTable(params) {
|
||||
params.param.map(function (val, index) {
|
||||
var $trTemp = $("<tr></tr>");
|
||||
//往行里面追加 td单元格
|
||||
$trTemp.append("<td>"+ val.param_name +"</td>");
|
||||
$trTemp.append("<td>"+ val.param_type +"</td>");
|
||||
$trTemp.append("<td>"+ val.param_title +"</td>");
|
||||
$trTemp.append("<td>"+ val.param_default +"</td>");
|
||||
$trTemp.append("<td>"+ val.param_require +"</td>");
|
||||
$trTemp.appendTo("#paramRequird");
|
||||
})
|
||||
params.return.map(function (val, index) {
|
||||
var $trTemp = $("<tr></tr>");
|
||||
//往行里面追加 td单元格
|
||||
$trTemp.append("<td>"+ val.return_name +"</td>");
|
||||
$trTemp.append("<td>"+ val.return_type +"</td>");
|
||||
$trTemp.append("<td>"+ val.return_title +"</td>");
|
||||
$trTemp.appendTo("#returnRequird");
|
||||
})
|
||||
params.code.map(function (val, index) {
|
||||
var $trTemp = $("<tr></tr>");
|
||||
//往行里面追加 td单元格
|
||||
$trTemp.append("<td>"+ val.code +"</td>");
|
||||
$trTemp.append("<td>"+ val.content +"</td>");
|
||||
$trTemp.appendTo("#codeRequird");
|
||||
})
|
||||
}
|
||||
function changeLocoal(params) {
|
||||
var storage=window.localStorage;
|
||||
var valKey = $("#method").find("option:selected").text();
|
||||
var data=editor.getValue();
|
||||
var d=JSON.stringify(data).replaceAll("\r|\n|\\s", "");
|
||||
storage.setItem(valKey,d);
|
||||
}
|
||||
|
||||
function changeNavShow(){
|
||||
var storage=window.localStorage;
|
||||
for(var i=0;i<storage.length;i++){
|
||||
var key=storage.key(i);
|
||||
var $trTemp = $('<li class="nav-item"></li>');
|
||||
$trTemp.append('<a class="nav-link">'+ key +'</a>');
|
||||
$trTemp.appendTo("#nav-content");
|
||||
$trTemp.attr('methond',key)
|
||||
}
|
||||
}
|
||||
$('#nav-content').on('click','.nav-item', function(){
|
||||
var activeKey = $(this).attr('methond');
|
||||
var param = localStorage.getItem(activeKey)
|
||||
$('.nav-item').removeClass('bg-info');
|
||||
$(this).addClass('bg-info');
|
||||
$("#method").val(activeKey);
|
||||
var methodArray = data[activeKey];
|
||||
intTable();
|
||||
changeTable(methodArray);
|
||||
$('#params').val(param);
|
||||
editor.setValue(param)
|
||||
})
|
||||
</script>
|
||||
<script>hljs.initHighlightingOnLoad();</script>
|
||||
</body>
|
||||
|
|
25
tests/publish.php
Normal file
25
tests/publish.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
include_once dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$client = new \JsonRpc\Client([
|
||||
'app' => 'abc',
|
||||
'client' => [
|
||||
'default' => [
|
||||
'base_uri' => 'http://localhost:8080',
|
||||
]
|
||||
],
|
||||
]);
|
||||
|
||||
$client->endpoint('default');
|
||||
|
||||
$json = json_encode([
|
||||
'order_id' => '123',
|
||||
'user_id' => '456',
|
||||
]);
|
||||
|
||||
try {
|
||||
$res = $client->call('topic.produce', ['abc', $json]);
|
||||
var_dump($res);
|
||||
} catch (Exception $e) {
|
||||
var_dump($e->getCode(),$e->getMessage());
|
||||
}
|
|
@ -1,8 +1,19 @@
|
|||
<?php
|
||||
include_once dirname(__DIR__).'/vendor/autoload.php';
|
||||
include_once dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$client = new \JsonRpc\Client();
|
||||
$client = new \JsonRpc\Client([
|
||||
'app' => 'abc',
|
||||
'client' => [
|
||||
'default' => [
|
||||
'base_uri' => 'http://localhost:8080',
|
||||
]
|
||||
],
|
||||
]);
|
||||
|
||||
$res = $client->call('math.subtract',['12','23',500]);
|
||||
$client->endpoint('default');
|
||||
|
||||
var_dump($res);
|
||||
try {
|
||||
$res = $client->call('math.subtract', ['12', '23', 500]);
|
||||
} catch (Exception $e) {
|
||||
var_dump($e->getMessage());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user