步骤 1:准备工作
-
确保已安装 PHP 和 Composer
-
安装 WebSocket 客户端库:
composer require textalk/websocket
步骤 2:编写代码订阅行情
以下是最简可运行的 PHP 示例,订阅 EUR/USD 的 1分钟K线数据:
<?php
require '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:强烈建议生产环境加入重连机制和错误日志。