云函数调用Plaid createAssetReport报UNAUTHENTICATED错误排查
修复方案
按优先级依次排查以下问题:
- 首先修正Plaid SDK的鉴权配置方式:不要手动在baseOptions里注入
PLAID-CLIENT-ID和PLAID-SECRET请求头,新版Plaid Node.js SDK要求通过apiKey配置项传入鉴权参数,手动传头在部分接口调用时会出现头被覆盖丢失的情况,直接导致鉴权失败。 - 检查获取access_token时的link token配置:调用
/link/token/create生成Link令牌时,必须将assets加入products参数数组。Plaid的access_token和初始申请的产品权限强绑定,未申请assets权限的token无法调用资产报告接口。 - 确认Plaid环境的产品开通状态:Sandbox环境默认开放Assets接口,Development、Production环境需要在Plaid后台手动提交Assets产品的开通申请,未开通时接口调用会被拦截。
- 核对日志查询范围:确认你在Plaid后台查询日志时选择的环境和云函数实际运行的环境一致(比如云函数配的是Production环境就不要查Development的日志),同时在云函数的错误捕获逻辑中打印完整的错误响应体(重点看
err.response.data字段),不要只打印错误对象的字符串摘要,方便定位具体错误来源。 - 优化Plaid客户端初始化逻辑:将Plaid客户端的初始化代码移到云函数逻辑外复用实例,避免每次冷启动重复初始化带来的异常。
修正后的代码如下:
const plaidConfig = new Configuration({ basePath: PlaidEnvironments[functions.config().app.env], apiKey: { clientId: functions.config().plaid.client_id, secret: functions.config().plaid.secret, } }); const plaidClient = new PlaidApi(plaidConfig); exports.createAssetReport = functions.https.onCall(async (data, context) => { const { accessToken, daysRequested } = data; // 可按需打开options配置 // const options = { // client_report_id: '123', // webhook: "https://www.example.com" // }; try { const response = await plaidClient.assetReportCreate({ access_tokens: [accessToken], days_requested: daysRequested, // options }); return response.data.asset_report_token; } catch (err) { // 打印完整错误信息方便排查 console.error('Create asset report failed:', err.response?.data || err.message); throw new functions.https.HttpsError( "internal", "Unable to create asset report" ); } });
注:如果以上步骤排查完仍有问题,可以先在本地用相同的鉴权参数、access_token直接调用Plaid接口测试,排除云函数网络层的拦截问题。
内容的提问来源于stack exchange,提问作者Nat Serrano
相关产品推荐
相关产品推荐

