问题描述
我有一个与关联帐户相关联的 Stripe Checkout 会话。连接的帐户需要从我的平台收取 10% 的费用。它目前运行良好,但是现在我添加了客户在结帐窗口中使用优惠券的功能,申请费是从应用折扣之前的总金额计算的。
例如,如果我收取 32 欧元,则申请费为 3.20 欧元。如果折扣将费用降至 10 欧元,则费用应该为 1 欧元。但它仍然收费 3.20 欧元。
我有一个计算申请费金额的函数,问题是这是在创建结帐会话时完成的 - 这发生在客户输入折扣之前。
我想不出解决这个问题的方法,因为会话总是在应用折扣之前创建。任何帮助/建议表示赞赏!
const calculateApplicationFeeAmount = (total) => total * site.stripeFee;
const session = await stripe.checkout.sessions.create(
{
payment_method_types: ["card"],line_items: [
{
name: price.name,amount: price.amount,currency: site.currency,quantity: 1,},],payment_intent_data: {
application_fee_amount: calculateApplicationFeeAmount(price.amount),description: price.name,mode: "payment",allow_promotion_codes: true,success_url: `${config.baseUrl.url}/unlock/session/{CHECKOUT_SESSION_ID}`,cancel_url: `${config.baseUrl.url}/unlock/${deviceid}`,Metadata: {
deviceid: deviceid,{
stripeAccount: site.stripeAccount,}
);
return session;
解决方法
这里最好的解决方案可能是:
-
在创建结帐会话时使用 payment_intent_data.capture_method:manual
-
收到 checkout.session.completed 事件后,更新 PaymentIntent 上的 application_fee_amount
-
捕获 PaymentIntent
限制是并非所有付款方式都支持手动付款。
或者,您也可以稍后退还申请费:https://stripe.com/docs/api/fee_refunds/create