eBay API授权出现invalid_grant和invalid_client错误如何解决
两类错误的根本原因
1. Authorization: Basic 场景下的 invalid_grant 错误
客户端身份已校验通过,但授权码本身无效,常见触发原因:
- 授权码
authCode已被使用,eBay授权码为一次性有效,只要发起过兑换token的请求就会立即失效 - 授权码已过期,eBay授权码有效期仅5分钟,超时自动作废
- 生成授权码时使用的Client ID与当前兑换token时填写的
$clientID不一致,比如跨环境混用(生产环境授权码拿到沙箱兑换)、跨应用混用授权码 - 兑换时提交的
redirect_uri与请求授权码时填写的重定向地址不匹配,注意eBay要求此处填写开发者后台配置的重定向地址名称,而非完整URL,大小写、符号必须完全一致 - 授权码在传输、复制过程中被截断、混入空格,或者
+/=等特殊字符被URL转义,直接使用会校验失败
2. Authorization: Bearer 场景下的 invalid_client 错误
属于请求方式不符合规范:授权码模式兑换token的接口要求必须使用Basic认证传递客户端凭证,不支持Bearer认证方式,用Bearer传递客户端信息平台无法识别身份,自然返回客户端认证失败。
排查修复步骤
因为你的client credentials授权模式可正常运行,说明客户端ID、密钥本身有效,也排除了环境、网络层面的问题,可按以下顺序排查:
- 每次测试都重新走用户授权流程获取新的授权码,拿到后5分钟内发起兑换请求,不要复用历史授权码
- 校验参数一致性:
- 确认当前
$clientID、$clientSecret与请求授权码时使用的客户端信息属于同一个eBay应用,且环境完全一致 - 确认
$redirectUrlName的值与eBay开发者后台当前应用配置的重定向地址名称完全匹配
- 确认当前
- 处理授权码转义问题:拿到授权码后先做URL解码再赋值,避免特殊字符被转义导致失效,可在赋值前增加一行
$authCode = urldecode($authCode); - 兑换token时保持当前代码的Basic认证配置即可,不要尝试用Bearer认证请求该接口
- 仍报错的话可开启curl请求日志排查细节,增加配置
curl_setopt($curl, CURLOPT_VERBOSE, true);打印请求头、请求体内容,确认参数没有被错误转义
内容的提问来源于stack exchange,提问作者tanjiya
相关产品推荐
相关产品推荐

