You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vercel部署Next.js应用时Stripe API兼容性问题排查

解决Vercel部署Next.js应用中Stripe API的OpenSSL解码错误

在Vercel部署的Next.js应用中调用Stripe Checkout Session API时出现以下错误:

Error: 2 UNKNOWN: Getting metadata from plugin failed with error: error:1E08010C:DECODER routines::unsupported

已尝试禁用gRPC并强制使用REST客户端,但问题未解决,以下是针对性解决方案:

1. 切换到稳定版Stripe API版本

你当前使用的2025-04-30.basil是Stripe的Beta版本,生产环境下Beta版本可能存在未公开的兼容性问题。将Stripe初始化的apiVersion改为正式稳定版本,比如:

const stripe = new Stripe(stripeSecretKey || '', {
  apiVersion: '2024-06-20', // 替换为最新稳定版
  httpClient: Stripe.createFetchHttpClient(),
});

2. 解决Node.js 20+的OpenSSL兼容性问题

Node.js 20默认使用OpenSSL 3.0,部分旧版依赖或加密逻辑会出现解码错误。在Vercel中添加环境变量:

  • 环境变量名:NODE_OPTIONS
  • 值:--openssl-legacy-provider

或者在Next.js的API路由文件顶部添加Runtime配置,确保使用Node.js环境并传递该参数:

export const config = {
  runtime: 'nodejs',
  env: {
    NODE_OPTIONS: '--openssl-legacy-provider',
  },
};

3. 锁定Stripe SDK版本到兼容Node 20的稳定版

部分Stripe SDK版本与Node.js 20的OpenSSL 3.0存在冲突,在package.json中指定兼容的SDK版本,比如:

{
  "dependencies": {
    "stripe": "^14.25.0" // 选择经过验证的稳定版本
  }
}

运行npm install或yarn install重新安装依赖后部署。

4. 隔离Firebase Admin与Stripe的依赖加载

你同时使用了Firebase Admin,可能两者的HTTP客户端或加密依赖存在冲突。尝试将Firebase Admin的导入改为动态导入,放在Stripe初始化之后:

// 替换原有的import语句
const { firestore } = await import("../../firebase/admin");

确保Firebase的初始化不会干扰Stripe的加密配置。

5. 明确指定Vercel Node.js Runtime版本

在Vercel项目设置中,将Runtime版本明确设置为Node.js 18.x或Node.js 20.x,避免自动切换到Edge Runtime或其他不兼容环境。也可以在vercel.json中配置:

{
  "functions": {
    "pages/api/**/*.ts": {
      "runtime": "@vercel/node@3.2.1" // 指定兼容的Node runtime版本
    }
  }
}

内容的提问来源于stack exchange,提问作者Katsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:37:33