使用Stripe Checkout订阅服务时元数据无法附加的问题排查
Stripe Checkout订阅模式元数据不显示的问题排查
你的问题核心在于元数据挂载的对象不同:
- 单次收费模式中,
payment_intent_data.metadata是附加到PaymentIntent对象上的,你查看对应PaymentIntent时能正常看到元数据; - 订阅模式下,你当前代码里的
subscription_data.metadata是附加到最终生成的Subscription订阅对象上的,而非Checkout Session本身。如果直接查看Checkout Session的metadata字段,自然看不到这部分内容。
解决方法
1. 查看正确的关联对象
调用Stripe API获取该Checkout Session对应的subscription字段值(Session对象会返回关联的订阅ID),再查询这个Subscription对象,就能看到你设置的message元数据。
2. 给Checkout Session本身添加元数据
如果需要元数据同时出现在Checkout Session上,可以在Session的根层级直接添加metadata字段,与subscription_data同级:
Session::create([ 'customer' => $user->stripeCustomerId, 'payment_method_types' => ['card'], 'line_items' => [[ 'price' => 'price_0MACBYAGG6RS7KP5c1fNa6v9', 'quantity' => $amount, ]], 'subscription_data' => [ 'metadata' => [ 'message' => $message, ], ], // 新增Session级别的元数据 'metadata' => [ 'message' => $message, ], 'mode' => 'subscription', 'success_url' => UrlHelper::url('?session_id={CHECKOUT_SESSION_ID}'), 'cancel_url' => UrlHelper::url('?cancel=true'), ]);
这样无论是查看Checkout Session还是对应的Subscription对象,都能看到你设置的元数据内容。
内容的提问来源于stack exchange,提问作者Steven Grant
相关产品推荐
相关产品推荐

