Stripe Checkout订阅如何正确引用关联账户下创建的priceID?
Stripe关联账户price引用错误解决方案
你遇到的两个报错是Stripe资源隔离机制导致的:
- 默认调用接口时请求上下文属于平台账户,只能读取平台下的资源,所以找不到存储在关联账户下的price
- 加
stripe_account参数后请求上下文切换到关联账户,此时只能读取关联账户下的资源,你传入的平台侧customerID在关联账户中不存在,因此报找不到customer的错误
方案1:切换请求上下文到关联账户(适合以关联账户为交易主体的场景)
操作步骤:
- 先将平台侧的customer复制到关联账户下,获得关联账户内的customerID
- 创建Checkout Session时传入关联账户下的customerID,同时指定
stripe_account参数 - 注意修正你原代码中
customer=customerId),多出来的右括号,避免语法错误
代码示例:
# 第一步:复制平台customer到关联账户 connected_customer = stripe.Customer.create( source=customerId, # 平台侧原有customerID stripe_account="acct_1234" # 替换为你的关联账户ID ) # 第二步:创建Checkout Session checkout_session = stripe.checkout.Session.create( success_url=domain_url + "/success.html", cancel_url=domain_url + "/canceled.html", payment_method_types=["card"], mode="subscription", line_items=[ { "price": priceId, # 关联账户下的priceID "quantity": 1 } ], customer=connected_customer.id, # 传入关联账户下的customerID stripe_account="acct_1234", # 切换请求上下文到关联账户 subscription_data={ "transfer_data": { "destination": "acct_1234", "amount_percent": 95 } } )
方案2:平台侧直接请求,拼接关联账户前缀到priceID(更简便,无需复制customer)
Stripe支持在priceID前拼接关联账户ID,明确指定资源所属账户,不需要切换请求上下文,可以直接使用平台侧的customerID。
代码示例:
checkout_session = stripe.checkout.Session.create( success_url=domain_url + "/success.html", cancel_url=domain_url + "/canceled.html", payment_method_types=["card"], mode="subscription", line_items=[ { # 关联账户ID和priceID用斜杠拼接,替换为你的实际关联账户ID "price": f"acct_1234/{priceId}", "quantity": 1 } ], customer=customerId, # 直接使用平台侧原有customerID subscription_data={ "transfer_data": { "destination": "acct_1234", "amount_percent": 95 } } )
注意事项
- 两种方案都需要确保平台的API密钥拥有关联账户的操作权限,且关联账户已完成认证可正常接收交易
- 方案2的ID拼接格式不可出错,关联账户ID和priceID之间仅用斜杠分隔,不要添加额外字符
内容的提问来源于stack exchange,提问作者megaman1013
相关产品推荐
相关产品推荐

