如何通过 WebSocket 接口订阅实时外汇行情数据(PHP 示例)

举报
yd_254103451 发表于 2025/07/15 11:06:19 2025/07/15
【摘要】 步骤 1:准备工作确保已安装 PHP 和 Composer,安装 WebSocket 客户端库:composer require textalk/websocket 步骤 2:编写代码订阅行情以下是最简可运行的 PHP 示例,订阅 EUR/USD 的 1分钟K线数据:<?php require 'vendor/autoload.php';use WebSocket\Client; // ...

步骤 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: 货币对,如 EURUSDUSDJPYGBPUSD
code=10004: 表示订阅K线的请求
code=10010: 保活心跳包(每30秒发送一次)

常见问题

可以订阅多个货币对吗?

可以,多个代码用英文逗号分隔,如 "codes" => "EURUSD,USDJPY"

是否支持其他K线周期?

支持,修改 type 的传入值可以获取不同周期的K线(请参考官方文档定义)。

是否需要断线重连逻辑?

强烈建议生产环境加入重连机制和错误日志。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。