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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:37