PHP code example of jx3dev / jx3dev-php
1. Go to this page and download the library: Download jx3dev/jx3dev-php library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jx3dev / jx3dev-php example snippets
use Jx3Dev\Jx3Dev;
$client = Jx3Dev::make('jx3dev::3f9a1c7e…');
$status = $client->getTokenStatus();
echo $status->tokenLevel(), ' / 剩余 ', $status->callsQuota(), ' 次', PHP_EOL;
$client = Jx3Dev::make('jx3dev::3f9a1c7e…');
$client = Jx3Dev::make('jx3dev::3f9a1c7e…', options: [
'timeout' => 30.0, // 单次请求超时,默认 10 秒
'locale' => 'en', // 只影响 msg,默认不发送由服务端定
'auto_reconnect' => true, // WebSocket 断线重连,默认关闭
]);
// 不携带令牌
$anonymous = Jx3Dev::make('');
$client = Jx3Dev::make($token, 'https://your-test-host');
$client = Jx3Dev::make(getenv('JX3DEV_TOKEN') ?: '');
// 接口名用文档里的下划线原名
$response = $client->call('get_token_status');
$response->ok(); // code === 0
$response->code(); // 错误码
$response->msg(); // 服务端提示语
$response->data(); // 业务数据数组,无返回体时为 null
$response->get('token_level'); // 取 data 里的字段,支持 'a.b.c' 点号路径
$response->extra(); // request_id / request_ts 等
// 带参数
$client->call('some_endpoint', ['name' => '张三', 'page' => 2]);
// 已封装的接口返回结构化对象
$status = $client->getTokenStatus();
$client->call('get_token_status'); // 默认 /api/
$client->http('/other/api/')->call('some_op'); // 文档里另有前缀的接口
use Jx3Dev\Exception\{ApiException, RateLimitException, TransportException, TimeoutException};
try {
$status = $client->getTokenStatus();
} catch (RateLimitException $e) {
// 限流。SDK 不替你等待,退避多久由你决定
sleep($e->retryAfter());
} catch (ApiException $e) {
// SDK 不内置码表——具体码的含义对照官方接口文档,别指望常量
echo $e->errorCode(), ' ', $e->getMessage(), PHP_EOL;
print_r($e->extra());
} catch (TimeoutException $e) {
// 请求超时,或 WebSocket 上没等到对应 echo 的应答
} catch (TransportException $e) {
// 连不上、TLS 失败、应答不是合法 JSON —— 压根没拿到业务应答
}
$response = $client->http()->tryCall('get_token_status');
if (!$response->ok()) {
echo $response->code(), ' ', $response->msg(), PHP_EOL;
}
$ws = $client->ws();
$ws->connect();
// 保活:服务端判定的是「客户端发出的数据」,超过 600 秒没发过东西就会被关闭。
// ping_interval 到点会自动发,也可以手动发
$ws->ping();
$ws->close();
use Jx3Dev\Protocol\{EventFrame, EventCode};
// 订阅指定事件号
$sub = $ws->on(2999, function (EventFrame $event) {
echo $event->event(), ' ', json_encode($event->data()), PHP_EOL;
});
// 订阅全部事件
$ws->onAny(fn(EventFrame $e) => error_log('event ' . $e->event()));
// 状态快照,每 30 秒一帧。可以当「连接还活着」的探针,但不能替代保活
$ws->on(EventCode::STATUS, function (EventFrame $e) {
echo '已连接 ', $e->get('connect_secs'), ' 秒', PHP_EOL;
});
// 被服务端断开
$ws->on(EventCode::KICKED, function (EventFrame $e) {
error_log('被断开:' . $e->kickReason());
});
$sub->cancel(); // 取消订阅
// 连接生命周期
$ws->onOpen(fn() => error_log('connected'));
$ws->onClose(fn($e) => error_log('closed: ' . $e->closeCode()));
$ws->onError(fn($t) => error_log((string) $t)); // 不注册则回调里的异常原样抛出
// 持续收帧。不传参数就一直跑,传秒数则到点返回
$ws->run();
$response = $ws->call('get_token_status');
$status = $ws->getTokenStatus();
// 指定 scope。它是第三个参数,只改它就用命名参数,别去凑空数组
$response = $ws->call('some_action', scope: 'other_scope');
$echo = $ws->send('some_action', ['page' => 2], 'other_scope');
// 连发多帧再统一取回
$a = $ws->send('endpoint_a');
$b = $ws->send('endpoint_b', ['page' => 2]);
$ws->await($a);
$ws->await($b);
// 协程 A:后台收事件
go(function () use ($ws) {
$ws->on(2999, fn($e) => handle($e));
$ws->run();
});
// 协程 B:同时调接口,不会和读协程抢 socket
go(function () use ($ws) {
$status = $ws->getTokenStatus();
});
$client = new Jx3Dev($config, loop: new InlineLoop());
$client->ws()->loop(); // 确认当前用的是哪个
$client = Jx3Dev::make($token, $base, [
'auto_reconnect' => true, // 默认关闭
'reconnect_on_kick' => false, // 另设参数,默认关闭
'backoff_base' => 1.0,
'backoff_max' => 60.0,
'backoff_factor' => 2.0,
'backoff_jitter' => 0.2, // ±20% 抖动,避免所有客户端同时打回服务端
]);
use Jx3Dev\{Jx3Dev, Config};
$client = new Jx3Dev(
new Config(token: $token, baseUri: $base),
httpTransport: new MyGuzzleTransport(), // Jx3Dev\Contract\HttpTransport
wsTransport: new MySwooleWsTransport(), // Jx3Dev\Contract\WebSocketTransport
);
$status = $client->getTokenStatus(); // 已封装,返回类型化对象
$data = $client->someOp($params)->data(); // 驼峰方法 → call('some_op')
$data = $client->call('some_op', $params)->data(); // 或直接 call() 传下划线原名
bash
composer bash
php verify.php