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