Stripe Node - 在结账时使用折扣券后计算申请费

问题描述

我有一个与关联帐户相关联的 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;

解决方法

这里最好的解决方案可能是:

  1. 在创建结帐会话时使用 payment_intent_data.capture_method:manual

  2. 收到 checkout.session.completed 事件后,更新 PaymentIntent 上的 application_fee_amount

  3. 捕获 PaymentIntent

限制是并非所有付款方式都支持手动付款。

或者,您也可以稍后退还申请费:https://stripe.com/docs/api/fee_refunds/create