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

Coinbase PHP(cURL) API报错:Scopes don't match current API version 求助

解决Coinbase PHP API的「Scopes don't match current API version」错误

这个错误提示看似和权限范围相关,但本质是你的API请求签名验证失败,或是密钥权限与API版本不兼容导致的。我帮你梳理下代码里的几个关键问题,以及对应的修复方案:

1. 时间戳不一致的核心问题

你已经获取了Coinbase服务器的时间$srvr_time,但在请求头的CB-ACCESS-TIMESTAMP里却用了本地的time(),这会导致签名里的时间和请求头的时间不匹配,直接触发API验证失败,进而抛出这个容易混淆的错误。

2. 签名构造不符合V2 API规范

Coinbase V2 API要求签名的格式是:timestamp + HTTP_METHOD + request_path + request_body(GET请求的body为空字符串)。你当前的$Datas只拼接了时间戳、方法和"accounts",但正确的request_path应该是完整的路径(比如/v2/accounts),而不是仅仅"accounts"。

3. 过时的API版本

你使用的CB-VERSION: 2017-08-07版本过于老旧,可能和当前Coinbase API的权限体系不兼容,建议更新到较新的稳定版本,比如2021-08-01。

4. 不安全的SSL设置

关闭CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER会让你的请求面临安全风险,建议移除这两行,让cURL默认验证SSL证书。


修正后的完整代码

<?php
$COINBASE_API_KEY = '你的API密钥';
$COINBASE_API_SECRET = '你的API密钥Secret';
$api_base_url = 'https://api.coinbase.com/v2/';
$request_path = '/v2/accounts'; // 完整的请求路径
$method = 'GET';
$body = ''; // GET请求body为空

// 获取Coinbase服务器时间,确保时间戳一致
$server_time_response = json_decode(file_get_contents($api_base_url . 'time'), true);
$timestamp = $server_time_response["data"]["epoch"];

// 构造签名字符串
$sign_string = $timestamp . $method . $request_path . $body;
// 生成HMAC签名
$hmacSig = base64_encode(hash_hmac("sha256", $sign_string, base64_decode($COINBASE_API_SECRET), true));

$curl = curl_init($api_base_url . 'accounts');
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'CB-ACCESS-KEY: ' . $COINBASE_API_KEY,
    'CB-ACCESS-TIMESTAMP: ' . $timestamp, // 使用服务器时间,和签名里的一致
    'CB-VERSION: 2021-08-01', // 更新为较新的API版本
    'CB-ACCESS-SIGN: ' . $hmacSig
));
// 移除不安全的SSL设置,保持默认验证
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$response = curl_exec($curl);
curl_close($curl);

$output = json_decode($response, true);
print_r($output);
?>

额外检查项

  • 确认你的API密钥已经启用了wallet:accounts:read权限(在Coinbase后台的API密钥设置里查看),如果权限不足也会触发类似的错误。
  • 确保服务器时间和Coinbase服务器时间的误差在30秒内(如果你的服务器时间偏差太大,即使获取了服务器时间,也可能因为网络延迟导致验证失败,可以考虑同步服务器时间)。

内容的提问来源于stack exchange,提问作者Amit-Inex Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:00