PHP集成Binance Spot API问题:找不到端点及Timestamp作用咨询
PHP集成Binance现货API问题解决
一、现货钱包接口的正确端点
你之前用的api/v1/balances是旧版废弃端点,Binance当前用于查询现货账户资产的有效接口是:GET /api/v3/account
这个接口会返回所有现货资产的余额、可用金额、冻结金额等完整信息,满足你管理现货钱包的需求。
二、Timestamp(时间戳)的作用
- 防重放攻击:Binance服务器会验证请求时间戳与自身当前时间的差值(默认允许5秒误差),超出范围直接拒绝请求,避免攻击者重复提交旧的合法请求。
- 保证请求时效性:确保请求是在有效窗口内发起的,避免因网络延迟导致过期请求被错误处理。
三、你的测试代码修正
代码主要问题是端点错误,还有冗余的curl设置,修正后代码如下:
$secret = "mySecretKey"; $key = "myApiKey"; // 生成毫秒级时间戳(Binance要求毫秒格式) $timestamp = time() * 1000; $queryString = "timestamp={$timestamp}"; // 生成HMAC-SHA256签名 $signature = hash_hmac('SHA256', $queryString, $secret); // 正确的现货账户接口URL $url = "https://api.binance.com/api/v3/account?{$queryString}&signature={$signature}"; $ch = curl_init($url); // 设置API Key请求头 curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-MBX-APIKEY: {$key}"]); // 要求返回结果而非直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 本地测试可临时关闭SSL验证,生产环境建议开启并配置CA证书 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); // 解析并打印结果 $resultData = json_decode($result, true); echo '<pre>'; var_dump($resultData); echo '</pre>';
额外注意点
- 确认你的API Key已在Binance后台开启现货账户权限,否则会返回权限错误。
- 如果遇到时间戳验证失败,可调用
GET /api/v3/time接口获取Binance服务器的精准时间,替换本地生成的时间戳,避免本地时间与服务器不同步。 - 生产环境务必开启
CURLOPT_SSL_VERIFYPEER为true,并配置正确的CA证书路径,保障请求安全。
内容的提问来源于stack exchange,提问作者LLoLoX
相关产品推荐
相关产品推荐

