如何通过 WebSocket 接口订阅实时外汇行情数据(PHP 示例)
步骤 1:准备工作
确保已安装 PHP 和 Composer
安装 WebSocket 客户端库:
composer require textalk/websocket
步骤 2:编写代码订阅行情
以下是最简可运行的 PHP 示例,订阅 EUR/USD 的 1分钟K线数据:
<?phprequire 'vendor/autoload.php';
use WebSocket\Client;// API KEY申请:www.infoway.io
$apiKey = 'yourApiKey';
$wsUrl = "wss://data.infoway.io/ws?business=forex&apikey=$apiKey";// 初始化客户端
$client = new Client($wsUrl, ['timeout' => 60]);// 构造订阅请求
$initMessage = ["code" => 10004,"trace" => uniqid(),"data" => ["arr" => [["type" => 1, // 1 分钟K线"codes" => "EURUSD" // 支持多个货币对,例如 EURUSD,USDJPY]]]
];// 发送订阅请求
$client->send(json_encode($initMessage));// 开始接收数据 + 维持连接
$startTime = time();
while (true) {try {// 每30秒发一次ping保活if (time() - $startTime >= 30) {$client->send(json_encode(["code" => 10010, "trace" => uniqid()]));$startTime = time();}// 接收推送数据$message = $client->receive();echo "Received: $message\n";} catch (Exception $e) {echo "Error: " . $e->getMessage() . "\n";break;}
}
说明
字段 | 含义 |
---|---|
business=forex | 订阅外汇业务数据 |
type=1 | 表示订阅 1 分钟 K线 |
codes | 货币对,如 EURUSD、USDJPY、GBPUSD |
code=10004 | 表示订阅请求 |
code=10010 | 保活心跳包(每30秒发送一次) |
常见问题
Q:可以订阅多个货币对吗?
A:可以,多个代码用英文逗号分隔,如 "codes" => "EURUSD,USDJPY"
Q:是否支持其他K线周期?
A:支持,修改 "type"
的传入值可以获取不同周期的K线(请参考官方文档定义)。
Q:是否需要断线重连逻辑?
A:强烈建议生产环境加入重连机制和错误日志。