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

如何在Stripe Checkout的相同价格ID line_items中添加额外字段?

解决方案:为Stripe Checkout行项目添加自定义附加信息

Stripe Checkout的line_items数组本身不支持直接添加自定义字段(比如你代码里的additional_field),直接传入会被API忽略。不过有几种可行的替代方案来实现类似需求:

方案1:将行项目附加信息存入Session的Metadata

把每个行项目的额外信息结构化后存入Checkout Session的全局metadata字段,支付完成后通过Webhook或Session详情获取解析。示例代码:

$stripe = new \Stripe\StripeClient('...');

// 定义行项目
$lineItems = [
    [
        'price' => 'price_...',
        'quantity' => 1,
    ],
    [
        'price' => 'price_...',
        'quantity' => 2,
    ]
];

// 构建行项目对应的附加信息,用索引关联
$lineItemDetails = [
    '0' => ['additional_field' => 'value_for_item_1'],
    '1' => ['additional_field' => 'value_for_item_2']
];

$stripe->checkout->sessions->create([
    'success_url' => 'https://example.com/success',
    'line_items' => $lineItems,
    'mode' => 'payment',
    'metadata' => [
        'line_item_extra' => json_encode($lineItemDetails)
    ]
]);

后续通过checkout.session.completed等Webhook事件获取Session数据后,解析metadata.line_item_extra即可对应到每个行项目的附加信息。

方案2:为不同附加信息创建独立Price对象

基于同一个产品创建多个Price,每个Price携带专属的metadata,这样相同基础价格的行项目可以通过不同Price区分附加信息。示例代码:

$stripe = new \Stripe\StripeClient('...');

// 创建带自定义metadata的Price(复用同一个产品)
$priceWithExtra1 = $stripe->prices->create([
    'product' => 'prod_...',
    'unit_amount' => 1000, // 和目标价格一致的金额
    'currency' => 'usd',
    'metadata' => [
        'additional_field' => 'specific_value_1'
    ]
]);

$priceWithExtra2 = $stripe->prices->create([
    'product' => 'prod_...',
    'unit_amount' => 1000,
    'currency' => 'usd',
    'metadata' => [
        'additional_field' => 'specific_value_2'
    ]
]);

// 在Checkout中使用不同Price
$stripe->checkout->sessions->create([
    'success_url' => 'https://example.com/success',
    'line_items' => [
        [
            'price' => $priceWithExtra1->id,
            'quantity' => 1,
        ],
        [
            'price' => $priceWithExtra2->id,
            'quantity' => 1,
        ]
    ],
    'mode' => 'payment',
]);

这种方式的优势是附加信息直接和行项目的Price绑定,后续查看支付记录或Webhook数据时无需额外解析全局metadata,但需要注意管理Price对象,避免冗余创建。

方案3:关联自建订单系统存储附加信息

如果有自建订单系统,可先将行项目的附加信息存入自身数据库,再把订单ID存入Checkout Session的metadata。支付完成后通过订单ID从数据库中提取对应信息。示例代码:

$stripe = new \Stripe\StripeClient('...');

// 假设已在自建系统中创建订单,ID为order_789,包含所有行项目附加信息
$orderId = 'order_789';

$stripe->checkout->sessions->create([
    'success_url' => "https://example.com/success?order_id={$orderId}",
    'line_items' => [
        [
            'price' => 'price_...',
            'quantity' => 1,
        ]
    ],
    'mode' => 'payment',
    'metadata' => [
        'order_id' => $orderId
    ]
]);

这种方式最灵活,不受Stripe API字段限制,适合已有成熟订单系统的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:31:03