You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP调用Coinmarketcap API获取数据失败问题排查

解决 "Trying to get property of non-object" 错误

这个报错的核心原因有两个,咱们一步步拆解清楚:

1. API返回格式是数组而非单个对象

CoinMarketCap的v1 /ticker/{coin}/ 接口返回的是包含单个币种对象的数组,不是直接的独立对象。你现在直接用$parsed_json->{'price_usd'}去访问,相当于在数组上调用对象属性,自然会触发"非对象取属性"的错误。

2. 缺少基础错误处理逻辑

如果curl请求失败(比如网络波动、API服务故障)或者返回了无效JSON,json_decode($data)会返回null,这时候去访问null的属性也会抛出同样的错误。

修复后的完整代码

$url = "https://api.coinmarketcap.com/v1/ticker/vertcoin/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 补充超时和SSL验证配置,提升请求稳定性
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);

// 先处理curl请求层面的错误
if ($curl_error) {
    die("Curl请求失败: " . $curl_error);
}

// 验证JSON解析是否成功
$parsed_json = json_decode($data);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败: " . json_last_error_msg());
}

// 确认返回数组有效后再取数据
if (is_array($parsed_json) && !empty($parsed_json)) {
    // 先取数组第一个元素,再访问price_usd属性
    $coindata = $parsed_json[0]->price_usd;
    echo "Vertcoin当前美元价格: " . $coindata;
} else {
    die("未获取到Vertcoin的有效数据");
}

额外提醒

注意CoinMarketCap的v1 API已经被官方弃用,后续可能会出现服务不稳定甚至停止的情况。如果长期使用,建议迁移到他们的v2或v3 API(v3需要申请API密钥才能调用)。

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:32