stripe-node v21 升级:金额字段由 string 改为 Stripe.Decimal,最低 Node 18
迁移文档:stripe-node wiki: Migration guide for v21
API 变更记录:docs.stripe.com/changelog/dahlia
v21 使用 API 版本 2026-03-25.dahlia。Stripe 的版本模型是:大版本以 flora 命名(Acacia、Basil、Clover、Dahlia),包含不向后兼容的改动;每月的版本只包含向后兼容的改动,并沿用上一个大版本的名字。当前版本为 2026-08-26.dahlia。
Node 最低版本提升到 18
低于 18 的 Node.js 不再支持,包要求 Node >= 18。这是最后一个支持 Node 18 的大版本,需要在 2026 年 9 月前迁移到至少 Node 20,理想情况下是 22+。
Decimal 字段改用 Stripe.Decimal,不再用 string
v21 为所有 decimal_string 字段引入了原生 decimal 类型支持。Stripe API 中所有 format: decimal 的字段(例如 unit_amount_decimal、quantity_decimal、fx_rate)在请求参数和响应对象里都从 string 改为 Stripe.Decimal,V1 和 V2 资源均适用。
Stripe.Decimal 是一个内置(vendored)的任意精度 decimal 类型,底层由 BigInt 支撑,没有任何外部依赖。
以下字段在响应对象和请求参数中都发生 string → Stripe.Decimal 的变化:
Price.unit_amount_decimalPrice.tiers[].unit_amount_decimalPrice.currency_options[].tiers[].flat_amount_decimal/unit_amount_decimalInvoiceItem.quantity_decimalInvoiceItem.pricing.unit_amount_decimalInvoiceLineItem.*CreditNoteLineItem.unit_amount_decimalCheckout.Session.currency_conversion.fx_rateIssuing.Authorization的 fleet 字段(reported_gross_amount_decimal、fuel.quantity_decimal、fuel.unit_cost_decimal等)
仅出现在请求侧的 decimal 字段同样会变,例如 Subscription、SubscriptionItem、SubscriptionSchedule、Quote、PaymentLink、Invoice line 创建参数中的 price_data.unit_amount_decimal。
BigInt 与 tsconfig
Decimal 内部使用 BigInt。如果代码里直接用 BigInt 字面量(比如把 100n 传给 Decimal.from()),tsconfig.json 的 target 需要设为 ES2020 或更高。如果只用字符串构造(Decimal.from('9.99')),则不需要改 tsconfig.json。
V2 Amount 类型合并
V2 资源此前会为每一个金额属性生成一个独立的 Amount 类(例如 OutboundPayment.Amount、AnnualRevenue.Amount)。这些重复类型现在被合并为单一的共享 Amount 类型。字段本身(value 和 currency)没有变化,只是类型名和 import 路径变了。
2026-03-25.dahlia 的破坏性变更
Elements 与 Stripe.js 相关改动:
- 移除 Stripe.js 中已废弃的方法,用命名更清晰的等价方法替代
- 重命名 Checkout 的初始化方法
options.layout.radios不再支持布尔值- 移除 Stripe.js 中已废弃的 Payment Intents、Setup Intents 和 Sources 方法
错误码重命名(2026-06-24.preview)
/v1/payouts 接口的错误码 storer_capability_missing 和 storer_capability_not_active 被替换为 financial_account_capability_not_enabled 和 financial_account_capability_restricted。如果集成代码按名字处理旧错误码,需要同步更新错误处理逻辑;使用更早 API 版本的集成仍会收到旧的错误码。
后续 SDK 版本的连带变化
stripe-python v15.6.0 / stripe-node v22.6.0 将固定的 API 版本改为 2026-08-26.dahlia,同时 PaymentIntent.allowed_payment_method_types 和 SetupIntent.allowed_payment_method_types 变为必填。
升级步骤
- 在 Workbench 中查看当前使用的 API 版本
- 如果使用 SDK,升级到与该 API 版本对应的 SDK 版本
- 如果不使用 SDK,加上请求头
Stripe-Version: 2026-06-24.preview - 升级 webhook 端点使用的 API 版本
- 测试集成
- 测试 Connect 集成
- 在 Workbench 中执行升级(升级后 72 小时内可以回滚版本)