Stripe API问题:无法通过Webhook或API获取定价表购买的产品信息
解决Stripe Checkout Session无法获取line_items及产品信息的问题
核心问题分析
你遇到的问题主要来自两个可能的原因:
- Stripe PHP SDK版本过低,不支持
line_items字段的展开与获取 - 错误的
expand参数写法,或是未使用正确的API方法获取订单项
分步解决方案
1. 升级Stripe PHP SDK到最新版本
旧版本的Stripe PHP SDK(比如v6.x及更早)没有适配Checkout Session的line_items字段,即使传入正确的expand参数也无法返回数据。执行以下命令升级:
composer update stripe/stripe-php
2. 使用正确的方式获取Checkout Session的line_items
正确的expand参数写法仅需指定line_items,你之前的第一个写法是正确的,但需要配合新版SDK使用:
\Stripe\Stripe::setApiKey('stripe_api_secret_key'); // 正确的获取方式 $session = \Stripe\Checkout\Session::retrieve( 'cs_checkout_session_object_id', ['expand' => ['line_items']] ); // 遍历line_items获取产品信息 foreach ($session->line_items->data as $item) { $product = $item->price->product; // 获取关联的Product对象 $productName = $product->name; $productId = $product->id; // 其他产品相关字段 }
3. 备选方案:直接调用line_items列表接口
如果仍无法通过retrieve方法展开,可直接调用会话的订单项列表接口:
$lineItems = \Stripe\Checkout\Session::allLineItems( 'cs_checkout_session_object_id', ['limit' => 10] // 根据实际需求调整数量 ); foreach ($lineItems->data as $item) { // 处理产品信息 }
4. Webhook事件中的产品信息获取
Webhook默认推送的checkout.session.completed事件payload不会包含line_items,需要在接收事件后,通过上述API方法主动查询该会话的line_items来获取产品信息。
额外提示
- 你尝试的
data.line_items和line_items.data都是错误的expand路径,Stripe API的expand参数只需指定顶级关联字段名即可 - 确保你的API密钥拥有足够权限(使用Secret Key,而非Publishable Key)
内容的提问来源于stack exchange,提问作者jsherk
相关产品推荐
相关产品推荐

