API调用异常:单控制器正常,另一控制器返回Invalid login details错误
收到的错误信息明确为授权失败:
array ( 'requestError' => array ( 'serviceException' => array ( 'messageId' => 'UNAUTHORIZED', 'text' => 'Invalid login details', ), ), )
按以下方向排查:
核对授权凭证一致性
检查两个控制器中传递给API的密钥、Token或账号密码是否完全一致。比如一个从配置文件正确读取config('api.key'),另一个误写为config('api.wrong_key');或者硬编码的凭证在不同控制器中不一样。可以临时打印凭证内容(注意脱敏),对比正常调用和错误调用的差异。检查请求头与参数完整性
确认报错的控制器是否包含了API要求的所有授权相关请求头(比如Authorization: Bearer xxx),以及头信息格式是否正确(比如Bearer拼写错误、缺少空格)。同时核对请求参数,是否有必填的授权字段被遗漏或填错。排查会话与上下文访问
如果授权信息存在会话中,检查报错的控制器是否正确启动了会话,或者会话变量名是否拼写错误。若使用依赖注入获取授权实例,确认该实例在报错控制器中是否被正确初始化,没有出现依赖缺失的情况。验证环境与配置加载
确认两个控制器是否运行在同一环境(开发/测试/生产),不同环境的API凭证可能不通用。另外检查配置文件加载逻辑,是否报错的控制器加载了错误的配置文件(比如加载了config.dev.php而不是config.prod.php)。模拟请求调试
用curl或Postman复制报错控制器的请求参数和凭证,直接发送请求看是否复现错误。如果复现,说明是凭证或参数问题;如果正常,说明是控制器代码中的逻辑错误。同时开启请求日志,记录完整的请求内容,对比正常请求和错误请求的差异。
示例对比:
正常控制器的正确请求:
$token = config('external_api.access_token'); $response = Http::withHeaders([ 'Authorization' => "Bearer {$token}" ])->get('https://api.example.com/resource');
报错控制器的常见错误:
// 错误:读取了错误的配置项 $token = config('external_api.wrong_token'); // 错误:遗漏Authorization头 $response = Http::get('https://api.example.com/resource');
内容的提问来源于stack exchange,提问作者Abbas

