在Blazor多租户预约平台中集成Stripe并设置手续费的技术问询
问题解答
1. {{CONNECTED_ACCOUNT_ID}} 是什么?
不是你的平台Stripe账户ID,它是服务提供者的Stripe Connect关联账户ID。
你的场景中,每笔支付扣除平台手续费后,剩余部分需要转给服务提供者,因此TransferData.Destination必须填写服务提供者在你的平台下创建的Connect账户ID。你的平台账户会通过ApplicationFeeAmount字段收取约定比例的手续费,剩余资金会自动转入这个关联账户。
2. StripeConfiguration.ApiKey 是客户端API密钥吗?
不是,这里填写的是你的平台Stripe账户的Secret Key(秘钥),格式为sk_xxx开头。
客户端API密钥以pk_xxx开头,仅用于前端(比如加载Stripe.js),而创建Checkout Session的逻辑必须放在后端执行,绝对不能把Secret Key暴露到前端页面,否则会引发安全风险。
场景适配提示
- 针对一次性预约,代码里的
Mode = "payment"配置正确; - 针对定期预约(每月自动扣款),需要将
Mode修改为"subscription",同时调整LineItems使用订阅型Price,并配置SubscriptionData来设置自动扣款周期。
参考代码示例
StripeConfiguration.ApiKey = "sk_test_ESDdbUTrLo4e9SC7uoQqlhd2"; var options = new Stripe.Checkout.SessionCreateOptions { LineItems = new List<Stripe.Checkout.SessionLineItemOptions> { new Stripe.Checkout.SessionLineItemOptions { PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions { Currency = "usd", ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions { Name = "T-shirt", }, UnitAmount = 1000, }, Quantity = 1, }, }, PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions { ApplicationFeeAmount = 123, TransferData = new Stripe.Checkout.SessionPaymentIntentDataTransferDataOptions { Destination = "{{CONNECTED_ACCOUNT_ID}}", }, }, Mode = "payment", SuccessUrl = "https://example.com/success", }; var service = new Stripe.Checkout.SessionService(); service.Create(options);
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

