步驟 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:強烈建議生產環境加入重連機制和錯誤日志。