Trustpilot认证报Unknown grant_type 调用API获取access token失败
问题修复方案
核心错误原因
你代码中的axios配置使用了不被支持的content字段传递请求参数,这不是axios的合法请求体配置项,导致你提交的grant_type等表单参数根本没有被正确发送到服务端,接口自然无法识别grant_type取值。
另外你代码中的secrect属于拼写错误,正确拼写为secret,如果环境变量对应的取值名正确,这个拼写错误也会导致Base64编码的认证头失效,触发认证类错误。
修正后的代码
trustPilot.getAuthToken = async () => { let apiKey = process.env.TRUSTPILOT_API // 修正拼写错误:secrect改为secret let secret = process.env.TRUSTPILOT_SECRET let baseEncoded = Buffer.from(`${apiKey}:${secret}`).toString('base64') console.log(baseEncoded, 'base') let authToken = null try { authToken = await axios({ method: 'POST', url: `https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken`, headers: { Authorization: 'Basic ' + baseEncoded, 'Content-Type': 'application/x-www-form-urlencoded' }, // 核心修正:content替换为axios标准的data字段 data: `grant_type=password&username=${process.env.TRUSTPILOT_EMAIL}&password=${process.env.TRUSTPILOT_PASSWORD}`, }) console.log(authToken, 'auth') } catch (error) { console.log(error.response, 'err') throw { code: '404' } } return authToken }
额外优化建议
- 如果你的账号密码包含&、=、空格这类特殊字符,建议使用
URLSearchParams构造请求体,避免手动拼接字符串出现转义错误:const params = new URLSearchParams() params.append('grant_type', 'password') params.append('username', process.env.TRUSTPILOT_EMAIL) params.append('password', process.env.TRUSTPILOT_PASSWORD) // 把axios配置中的data替换为params即可 - 确认你的API密钥、账号密码对应正确,该账号拥有对应商业单位的API调用权限。
内容的提问来源于stack exchange,提问作者Reem Obeid
相关产品推荐
相关产品推荐

