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

使用PHP+CCXT对接Lbank时遭遇PermissionDenied权限错误求助

问题描述

使用PHP结合CCXT开发Lbank交易机器人时,公共API(获取订单簿、计算市场价)调用正常,但调用需权限验证的API时出现异常:

  • fetch_balance()返回空数组
  • create_order()抛出ccxt\PermissionDenied: Invalid authorization错误

代码步骤回顾

  1. 依赖引入与初始化
require 'vendor/autoload.php';
use ccxt\lbank;
  1. 交易所实例与API配置
date_default_timezone_set('UTC');
$id = 'lbank';
$exchange_class = "\\ccxt\\$id";
$exchange = new $exchange_class(array(
    'apiKey' => '3462cef5-7db0-4cb6-bb93-74dc084d9fe9',
    'secret' => 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ+uWjcvKa1K4NtemmT7LmgoW1s2DYr+d/JIk3UU2dFUT/xPY9fNR6aiJ8SNd/d5WPN7z7TIO+TuOwmeo0GpjzGyRG1a1dmbmxxqR3H5o4a/gd2dJo/Dqf8WX/eLzDVjLGC3pXyWe8jeIRzYYvtbgkiQNu5xTRfYZ4I0roTp/EvfAgMBAAECgYEAnsjQewmSBvlriZiULRA9QGPJHHUumGWcvrd+sjFOu8J8WyhS31gJBOFAbEpE3jizxEL88wcdz/M5j8JJE1VZxnYonO2ev9wS3Ls7UHkRVFx2gzxWxhuDrtvbiSHetDJ08N7sRbW3H5PmzDufTNLCgB4hgAr0vluzM83fXq3HK9ECQQD2sXkc+LM6UfwvIdxm0gztisfD2ZQzMoXcGlqgjYfXsbDGUHPkzZ3NWOBa36CiTFdQBF2COX0Ew+A3pTl9a4w5AkEApbSHSW8PEw0/lgDKHsRNgaUQkOAlFrUhPplsE9ICsWLkgNGXoJnZpQhkVDSaYWi/NNKkPk1lXIxYGQhBYgXI1wJAIFh6ydquHVp8l214KZ8nBMpqkPppXSElvgtSkLSd+CEbTZVk7L4tD6y0lhW2STF7TUmVPSrugn5wWrt2Q0SjuQJBAJJiC41krdVvw7dY1TUexzV7Q0ooqLsJoeeyExbjVHut2BywixlWMD2pTzBQE/1vUlJwrqVXK+75EC5064WThJsCQCaDTNXNfcMRRQZFePVm0wTEU4ajG++UyRI/I47uzl+8RV2cuNyRoj7xa7LTnBYc8sOPcYTgF/9zBhkwZEBRtUk=',
));
  1. 公共API调用正常
$markets=$exchange->loadMarkets();
$symbol = 'BTC/USDT';
$orderbook = $exchange->fetch_order_book ($symbol);
$bid = count ($orderbook['bids']) ? $orderbook['bids'][0][0] : null;
$ask = count ($orderbook['asks']) ? $orderbook['asks'][0][0] : null;
$marketprice = ($bid + $ask)/2;
print($marketprice); // 输出99336.605
  1. 权限API异常输出
99336.605 Array ( ) test
Fatal error: Uncaught ccxt\PermissionDenied: Invalid authorization in /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/lbank.php:2995 Stack trace: #0 /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/Exchange.php(1610): ccxt\lbank->handle_errors() #1 /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/Exchange.php(5168): ccxt\Exchange->fetch() #2 /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/Exchange.php(5188): ccxt\Exchange->fetch2() #3 /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/abstract/lbank.php(317): ccxt\Exchange->request() #4 /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/lbank.php(1500): ccxt\abstract\lbank->spotPrivatePostSupplementCreateOrder() #5 /home/robatixi/domains/robatix.ir/public_html/samplecallapi.php(63): ccxt\lbank->create_order() #6 {main} thrown in /home/robatixi/domains/robatix.ir/public_html/vendor/ccxt/ccxt/php/lbank.php on line 2995
解决方案

1. 验证API密钥与Secret正确性

  • 登录Lbank后台,检查API密钥是否完整复制,无多余空格、换行符。
  • 确认Secret为原始字符串,不要做任何编码或转义,Lbank签名验证需要未修改的Secret。
  • 检查API密钥状态:是否启用、是否被冻结,若异常则重新生成密钥。

2. 确认API权限配置

  • 在Lbank API管理页面,确保该密钥开启了读取余额和下单交易权限(部分交易所默认仅开启只读权限)。
  • 测试时可先开启只读权限验证fetch_balance(),正常后再添加交易权限。

3. 简化CCXT实例初始化代码

代码中重复创建多个Lbank实例可能导致配置混乱,简化为:

require 'vendor/autoload.php';
date_default_timezone_set('UTC');

$exchange = new \ccxt\lbank([
    'apiKey' => '你的API密钥',
    'secret' => '你的Secret',
]);

确保配置参数传递给最终使用的实例。

4. 检查时区与时间同步

  • Lbank API签名依赖UTC时间,确保date_default_timezone_set('UTC')在实例化前执行,且服务器时间与UTC时间误差不超过5分钟(否则签名失效)。
  • 可添加代码验证当前UTC时间:
echo gmdate('Y-m-d H:i:s'); // 输出UTC时间,对比Lbank服务器时间

5. 开启CCXT调试模式排查请求

开启调试模式查看请求细节,定位签名或参数问题:

$exchange->verbose = true; // 开启调试
$balance = $exchange->fetch_balance();
print_r($balance);

对比Lbank官方API文档,检查请求头、签名参数是否符合要求。

6. 更新CCXT版本

  • 旧版本CCXT可能存在Lbank API适配问题,执行命令更新到最新版:
composer update ccxt/ccxt
  • 若更新后问题依旧,可查看CCXT仓库确认是否有针对Lbank的已知修复。

内容的提问来源于stack exchange,提问作者Eng.Ali karimifard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:04:53