Amadeus Node SDK报AuthenticationError 401无效访问令牌问题
问题原因及解决方案
你遇到的报错核心是keymanagement.service.InvalidAPICallAsNoApiProductMatchFound,不是真的access token无效,是当前账号/应用没有对应接口的调用权限,或者SDK运行逻辑异常,常见原因和解决方法如下:
- 首先检查应用的API权限配置
登录Amadeus开发者后台进入你的应用详情页,找到产品开通列表,确认你已经添加了Hotel Offers Search v2这个API产品,测试环境的权限申请是即时生效的,不需要等待审核。很多新手创建应用后忘记手动开通对应接口权限,就会出现这类看似token无效的报错。 - 确认环境和凭据匹配
你当前请求的是测试环境端点test.api.amadeus.com,确认你使用的CLIENT_ID和CLIENT_SECRET是测试环境的凭据,不要混用生产环境的凭据调用测试环境接口,反之也不允许。 - 调整SDK初始化逻辑
Next.js的模块顶层初始化逻辑会在热重载时重复执行,容易导致SDK内部缓存的token异常,你可以把Amadeus实例的初始化移到请求处理函数内部,同时显式指定运行环境,修改后的参考代码如下:import Amadeus from 'amadeus'; const { CLIENT_ID, CLIENT_SECRET } = process.env; const handler = async (req, res) => { const amadeus = new Amadeus({ clientId: CLIENT_ID, clientSecret: CLIENT_SECRET, hostname: 'test' // 测试环境填test,生产环境填production }); let offersData = {}; try { offersData = await amadeus.shopping.hotelOffers.get({ cityCode: 'LON', }); } catch (e) { console.error('error:', e); return res.status(500).json({ error: e.description }); } res.status(200).json(offersData.data || offersData); }; export default handler; - 升级SDK版本
旧版本的amadeus-nodeSDK在Node.js 16+环境下存在token生成逻辑的已知bug,会生成无效token,你可以升级SDK到最新版本后重试。 - 手动校验权限
你可以用之前curl请求拿到的有效token,直接调用对应酒店查询接口,如果同样返回401,就可以确定是API权限未开通的问题;如果请求成功,则是SDK运行异常导致的问题。
内容的提问来源于stack exchange,提问作者joisadler
相关产品推荐
相关产品推荐

