无法为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
相关产品推荐
相关产品推荐

