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

无法为Stripe Payment Intent添加metadata问题排查求助

问题排查:Stripe Checkout Session无法添加payment_intent metadata

我开发的应用中,课程付款至应用管理的关联Stripe账户功能运行正常。现需通过course_id筛选付款,计划将course_id存入Payment Intent的metadata,以便获取关联账户的所有付款后本地筛选。编写了创建Checkout Session并附加course_id的代码(参照Stripe官方文档),但metadata未成功添加。以下是代码及返回的Checkout Session数据:

代码实现

private async createCheckout(
    p: IResponseData<Participant>,
    input: supportParticipantInput,
    courseId: string
  ) {
    //create checkout
    return await this.stripe.checkout.sessions.create({
      success_url: input.redirect,
      cancel_url: input.redirect,
      mode: 'payment',
      payment_method_types: simpleConfig.payment_method_types,
      customer_email: input?.supporterEmail,
      payment_intent_data: {
        metadata: {
        course_id: courseId,
        },
        description: 'testdescription',
        transfer_data: {
          destination: p.attributes.stripeAccountId,
        },
      },
      line_items: [
        {
          price_data: {
            currency: 'eur',
            product_data: {
              name: 'support Participant2',
            },
            unit_amount: input.amount,
          },
          quantity: 1,
        },
      ],
    });
  }

返回的Checkout Session数据

{
  "id": "cs_test_a1FXQhJ9ap2rn5Yb5itXvj6JHUq6L6p78jq4q0fzd3N30UkZa6NYohg4Mz",
  "object": "checkout.session",
  "after_expiration": null,
  "allow_promotion_codes": null,
  "amount_subtotal": 15000,
  "amount_total": 15000,
  "automatic_tax": {
    "enabled": false,
    "status": null
  },
  "billing_address_collection": null,
  "cancel_url": "http://localhost:3000/",
  "client_reference_id": "2",
  "client_secret": null,
  "consent": null,
  "consent_collection": null,
  "created": 1700067702,
  "currency": "eur",
  "currency_conversion": null,
  "custom_fields": [],
  "custom_text": {
    "shipping_address": null,
    "submit": null,
    "terms_of_service_acceptance": null
  },
  "customer": null,
  "customer_creation": "if_required",
  "customer_details": null,
  "customer_email": null,
  "expires_at": 1700154101,
  "invoice": null,
  "invoice_creation": {
    "enabled": false,
    "invoice_data": {
      "account_tax_ids": null,
      "custom_fields": null,
      "description": null,
      "footer": null,
      "metadata": {},
      "rendering_options": null
    }
  },
  "livemode": false,
  "locale": null,
  "metadata": {
    "test": "1"
  },
  "mode": "payment",
  "payment_intent": null,
  "payment_link": null,
  "payment_method_collection": "always",
  "payment_method_configuration_details": null,
  "payment_method_options": {},
  "payment_method_types": [
    "card",
    "sofort",
    "klarna"
  ],
  "payment_status": "unpaid",
  "phone_number_collection": {
    "enabled": false
  },
  "recovered_from": null,
  "setup_intent": null,
  "shipping_address_collection": null,
  "shipping_cost": null,
  "shipping_details": null,
  "shipping_options": [],
  "status": "open",
  "submit_type": null,
  "subscription": null,
  "success_url": "http://localhost:3000/",
  "total_details": {
    "amount_discount": 0,
    "amount_shipping": 0,
    "amount_tax": 0
  },
  "ui_mode": "hosted",
  "url": "https://checkout.stripe.com/c/pay/cs_test_a1FXQhJ9ap2rn5Yb5itXvj6JHUq6L6p78jq4q0fzd3N30UkZa6NYohg4Mz#fidkdWxOYHwnPyd1blpxYHZxWjA0SWh9fHNNcHRzVl1jbm1Qc3NjfFRoPGd1bG53N1x8fERwSGZQYWZqTF1HbDZCMTVSRz1IX3VfPG1waHVyUT1EcXxdSn9vc21BYVBMc2NhT3ZjaWBRYTJGNTVTTVZ0bj1RaicpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"
}

排查要点

  • Payment Intent未创建:返回的Checkout Session中payment_intent字段为null,说明当前会话尚未完成付款,Stripe还未生成对应的Payment Intent。只有用户完成付款流程后,Payment Intent才会被创建,此时你设置的payment_intent_data.metadata才会出现在Payment Intent对象中,而非Checkout Session本身的metadata里。
  • 验证参数有效性:确认传入createCheckout的courseId参数不为空或undefined,可在调用前打印参数值进行校验。
  • 查看最终Payment Intent:待用户完成付款后,通过Stripe控制台找到对应的Payment Intent,或调用API(stripe.paymentIntents.retrieve(paymentIntentId))获取详情,即可查看course_id是否已添加到metadata中。
  • 临时测试验证:若需快速验证参数是否正确,可同时在Checkout Session本身的metadata中添加course_id字段,这样在返回的会话数据中就能直接看到该值,确认参数传递无误:
    return await this.stripe.checkout.sessions.create({
      // 其他原有字段不变
      metadata: {
        course_id: courseId,
        test: "1"
      },
      payment_intent_data: {
        metadata: {
          course_id: courseId,
        },
        // 其他原有字段不变
      },
    });
    

内容的提问来源于stack exchange,提问作者Jesko Usinger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:14:52