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

Node.js中如何为Stripe关联账户客户创建账单门户会话?

为Stripe关联账户的客户创建账单门户会话的正确方式

错误原因分析

  1. 第一种传参方式报错:
    stripe.billingPortal.sessions.create的参数签名和Stripe大部分API方法不同,它的第二个参数是API访问令牌(字符串),而非包含stripeAccount的配置对象,所以传入{ stripeAccount: connected.AccountId }会被识别为无效参数。

  2. 第二种用on_behalf_of报错:
    cus_xxx是关联账户下的客户资源,主账户的API密钥无法直接访问关联账户内的客户,仅通过on_behalf_of无法切换到关联账户的资源上下文,因此提示找不到客户。

正确解决方案

方案一:传入关联账户的API秘钥作为第二个参数

直接将关联账户的标准秘钥或受限秘钥作为第二个参数传入,以此切换到关联账户的操作上下文:

// connected.AccountSecret 是关联账户的API秘钥
const session = await stripe.billingPortal.sessions.create({
    customer: customer.CustomerId,
    return_url: getRedirectUrl(req),
}, connected.AccountSecret);

方案二:初始化关联账户专属的Stripe实例

创建一个指定stripeAccount的Stripe实例,后续所有操作默认使用该关联账户的上下文:

const connectedStripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
    apiVersion: '2024-06-20', // 替换为你当前使用的Stripe API版本
    stripeAccount: connected.AccountId,
});

const session = await connectedStripe.billingPortal.sessions.create({
    customer: customer.CustomerId,
    return_url: getRedirectUrl(req),
});

方案三:使用Stripe子实例(SDK v10+支持)

通过child方法快速创建关联账户的子实例,无需重复初始化核心配置:

const connectedStripe = stripe.child({ stripeAccount: connected.AccountId });

const session = await connectedStripe.billingPortal.sessions.create({
    customer: customer.CustomerId,
    return_url: getRedirectUrl(req),
});

注意事项

  • 确保customer.CustomerId确实是目标关联账户下的客户ID,主账户无法直接操作关联账户的客户资源。
  • 关联账户的秘钥可在Stripe后台的关联账户设置中获取,使用受限秘钥时需确保拥有创建账单门户会话的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:41:15