CodeIgniter3集成InPost API第三方库时出现请求超时500错误
调试CodeIgniter3中InPost API创建运单超时500错误的步骤
1. 调整PHP执行超时设置
默认PHPmax_execution_time为30秒,刚好匹配你的超时时间:
- 临时在控制器开头添加
set_time_limit(60);延长执行时间,测试是否还会超时 - 长期解决方案:修改
php.ini中的max_execution_time和max_input_time参数,设置为60或更合理的值
2. 开启第三方库的请求日志
imper86/php-inpost-api基于Guzzle,可通过中间件记录详细请求日志:
use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; use Monolog\Logger; use Monolog\Handler\StreamHandler; // 初始化日志实例 $logger = new Logger('inpost-api'); $logger->pushHandler(new StreamHandler(APPPATH . 'logs/inpost_api.log', Logger::DEBUG)); // 配置Guzzle handler并添加日志中间件 $stack = HandlerStack::create(); $stack->push(Middleware::log($logger, new \GuzzleHttp\MessageFormatter())); // 初始化API客户端时传入handler $apiClient = new \Imper86\PhpInpostApi\PhpInpostApi( '你的API密钥', '你的API秘钥', ['handler' => $stack] );
之后查看application/logs/inpost_api.log,就能看到请求头、响应内容、API侧错误等细节。
3. 检查CI3日志配置
- 打开
application/config/config.php,将log_threshold设置为4(DEBUG级别),确保捕获所有调试信息 - 确认
log_path目录有写入权限,避免因权限问题导致日志无法生成
4. 手动捕获并记录异常
在运单创建逻辑外层包裹try-catch,强制记录错误信息:
try { // 你的运单创建逻辑 $response = $apiClient->shipments()->create($shipmentData); log_message('debug', 'InPost API响应: ' . print_r($response, true)); } catch (\Exception $e) { log_message('error', 'InPost API错误: ' . $e->getMessage() . ' 堆栈跟踪: ' . $e->getTraceAsString()); // 调试环境可直接输出信息 echo '错误详情: ' . $e->getMessage(); echo '<pre>' . $e->getTraceAsString() . '</pre>'; exit; }
5. 查看服务器级错误日志
如果CI应用日志无信息,直接查看服务器日志:
- Nginx:
/var/log/nginx/error.log - Apache:
/var/log/apache2/error.log
这里通常会记录PHP致命错误、内存溢出等导致500错误的根源。
6. 直接测试API连通性
用Postman或curl手动调用InPost创建运单接口,传入相同参数,验证是否是API本身的问题:
curl -X POST "https://api.inpost.pl/v1/shipments" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的访问令牌" \ -d '{"收件人信息": "...", "包裹信息": "..."}'
内容的提问来源于stack exchange,提问作者user20508390
相关产品推荐
相关产品推荐

