一、基础配置
首先,您需要从 StockTV 获取 API Key,并设置基础请求函数。所有 API 请求都必须包含 key 参数。
<?php
// StockTV API 配置
define('STOCKTV_API_KEY', 'YOUR_API_KEY_HERE'); // 请替换为实际Key
define('STOCKTV_BASE_URL', 'https://api.stocktv.top');
/**
* 通用 API 请求函数
* @param string $endpoint API 路径
* @param array $params 查询参数
* @return array
*/
function stocktvApiRequest($endpoint, $params = []) {
$params['key'] = STOCKTV_API_KEY; // 必需参数
$url = STOCKTV_BASE_URL . $endpoint . '?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议启用
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
return ['error' => 'CURL Error: ' . curl_error($ch)];
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$decoded = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return ['error' => 'JSON Decode Error'];
}
return $decoded;
}
?>
二、印度尼西亚股票核心接口
关键信息:根据文档描述,StockTV 支持印度尼西亚的股票行情数据。在文档的“使用说明”部分提到支持“印度、马来西亚、印度尼西亚、美国、日本、韩国...”等国家。在接口返回的示例中,明确显示了 countryId: 48 对应的国家是“Indonesia”。因此,对接印度尼西亚股票时,核心参数 countryId 应为 48。
以下是针对印度尼西亚市场的主要接口:
1. 市场列表接口
功能:获取印度尼西亚交易所的股票列表,包含实时行情、基本面和技术指标数据。
接口:GET /stock/stocks
<?php
function getIndonesiaStockList($page = 1, $pageSize = 50) {
$endpoint = '/stock/stocks';
$params = [
'countryId' => 48, // 印度尼西亚
'page' => $page,
'pageSize' => $pageSize,
];
return stocktvApiRequest($endpoint, $params);
}
// 使用示例
$result = getIndonesiaStockList(1, 5);
if (isset($result['code']) && $result['code'] == 200) {
echo "印度尼西亚股票列表 (第1页):\n";
foreach ($result['data']['records'] as $stock) {
echo " {$stock['name']} ({$stock['symbol']}): 最新价 {$stock['last']},涨跌 {$stock['chgPct']}%\n";
}
} else {
echo "请求失败: " . ($result['message'] ?? '未知错误');
}
?>
返回数据结构:与马来西亚接口类似,包含 id (PID), name, symbol, last, chgPct, volume, open (是否开市) 等关键字段。
2. 查询股票接口
功能:通过PID、名称或代码精确查询印度尼西亚股票。由于接口返回全球匹配结果,需根据 flag 或 countryId 自行筛选。
接口:GET /stock/queryStocks
<?php
function queryIndonesiaStock($pid = null, $symbol = null, $name = null) {
$endpoint = '/stock/queryStocks';
$params = [];
if ($pid) $params['id'] = $pid;
if ($symbol) $params['symbol'] = $symbol;
if ($name) $params['name'] = $name;
$result = stocktvApiRequest($endpoint, $params);
// 筛选印度尼西亚股票 (假设flag为'ID',或countryId为48)
if (isset($result['code']) && $result['code'] == 200 && is_array($result['data'])) {
$result['data'] = array_filter($result['data'], function($stock) {
return ($stock['countryId'] ?? 0) == 48; // 或检查 $stock['flag'] == 'ID'
});
}
return $result;
}
?>
3. 获取K线数据接口
功能:获取指定印度尼西亚股票的历史K线数据,用于图表和技术分析。这是分析历史走势的核心接口。
接口:GET /stock/kline
<?php
function getIndonesiaStockKline($pid, $interval = 'P1D') {
$endpoint = '/stock/kline';
$params = [
'pid' => $pid, // 从市场列表接口获取的股票PID
'interval' => $interval,
];
return stocktvApiRequest($endpoint, $params);
}
// 使用示例:获取某印尼股票的日K线
$klineData = getIndonesiaStockKline(12345, 'P1D'); // 12345为示例PID
if (isset($klineData['code']) && $klineData['code'] == 200) {
$klines = $klineData['data'];
if (!empty($klines)) {
$latest = end($klines);
$time = date('Y-m-d', $latest['time'] / 1000);
echo "最新日K线 ({$time}): 开{$latest['open']}, 高{$latest['high']}, 低{$latest['low']}, 收{$latest['close']}, 成交量{$latest['volume']}\n";
}
}
?>
interval 参数说明(同其他市场):
PT5M,PT15M,PT1H,PT5H:分钟/小时线P1D,P1W,P1M:日线、周线、月线
4. 获取市场指数接口
功能:获取印度尼西亚市场的主要指数行情,如雅加达综合指数。
接口:GET /stock/indices
<?php
function getIndonesiaIndices() {
$endpoint = '/stock/indices';
$params = ['countryId' => 48];
return stocktvApiRequest($endpoint, $params);
}
?>
5. 获取IPO新股日历接口
功能:获取印度尼西亚市场的新股发行和上市信息。
接口:GET /stock/getIpo
<?php
function getIndonesiaIpo($type = null) {
$endpoint = '/stock/getIpo';
$params = ['countryId' => 48];
if (in_array($type, [1, 2])) {
$params['type'] = $type; // 1=未上市, 2=已上市
}
return stocktvApiRequest($endpoint, $params);
}
?>
6. 获取涨跌排行榜接口
功能:获取印度尼西亚市场的实时涨幅榜、跌幅榜等。
接口:GET /stock/updownList
<?php
function getIndonesiaStockRank($type = 1) {
$endpoint = '/stock/updownList';
$params = [
'countryId' => 48,
'type' => $type, // 1涨幅榜 2跌幅榜 3涨停榜 4跌停榜
];
return stocktvApiRequest($endpoint, $params);
}
?>
三、实时数据推送 (WebSocket)
对于实时行情,文档推荐使用WebSocket接口,这是获取低延迟数据的最佳方式。
连接地址:wss://ws-api.stocktv.top/connect?key=YOUR_API_KEY
工作原理:
- 使用上述地址建立WebSocket长连接。
- 连接成功后,发送订阅消息(具体JSON格式需参考客服提供的详细协议),指定要订阅的印度尼西亚股票的
pid。 - 服务器将持续推送订阅股票的实时行情。
- 需定期发送心跳消息以保持连接。
返回数据示例(来自文档):
{
"pid": "992844",
"last_numeric": "0.68",
"pc": "0.000",
"pcp": "0.00",
"volume": "3672800",
"type": 1
}
PHP实现建议:PHP实现WebSocket客户端通常需借助ratchet/pawl等库。由于实现较为复杂且依赖具体业务逻辑,此处不提供完整代码,但核心流程如上。文档中提供了前端和Java的Demo可供参考。
四、完整对接流程与注意事项
- 获取API Key:这是所有请求的前提。
- 确定国家ID:对接印度尼西亚,
countryId固定为 48。 - 数据需求与接口匹配:
- 获取股票列表/监控:使用
/stock/stocks(设countryId=48)。 - 查询单只股票:使用
/stock/queryStocks,并筛选结果。 - 获取历史K线:使用
/stock/kline,需先获得股票的pid。 - 获取实时推送:必须使用WebSocket。
- 获取市场指数/IPO/排行榜:使用相应接口,并设
countryId=48。
- 获取股票列表/监控:使用
- 核心参数:
countryId:48。pid:股票的唯一标识,用于K线、WebSocket订阅等操作。
- 错误处理:务必检查API返回的
code字段,200表示成功。 - 性能建议:避免高频HTTP轮询。对多只股票进行实时监控时,应使用WebSocket接口。
通过上述接口,您可以全面对接印度尼西亚股票的实时行情、历史数据、市场指数等信息。请根据您的具体业务场景组合使用。如有关于特定接口参数或返回字段的进一步问题,可随时提出。