Stripe Checkout如何为行项目添加商品规格自定义描述?
实现方案
Stripe Checkout行项目的自定义展示不需要依赖全局会话metadata,有两种可落地的实现方式,优先推荐第一种动态传参方案。
方案1:动态传入行项目配置(推荐,适配你的需求)
你当前代码直接传入预先创建好的固定price ID,这种模式下行项目的展示名称会直接读取Price对应商品的预设名称,无法动态拼接购买数量、单份计量这类随订单变化的信息。
你可以改用price_data字段为每个行项目动态定义价格、商品展示名称,直接把需要展示的计量规格文本拼接进商品名称字段,该字段内容会完整展示在结账页、账单、付款收据的对应条目位置,完全匹配你要的展示效果。
注意:你原有代码存在一处参数结构错误:$lineItems通过array_push组装后本身已经是行项目数组,外层不需要再套[],否则会触发Stripe API参数校验错误。
修改后的核心代码如下:
$lineItems = []; foreach($request->arrayOfObjects as $req) { // 按需拼接你需要展示的完整商品规格文本 $displayText = "Article {$req['productSku']} - {$req['productName']} ({$req['quantity']}x Packages - {$req['squarePerPackage']}m2 each)"; array_push($lineItems, [ 'price_data' => [ 'currency' => 'eur', // 替换为你实际使用的结算货币 'product_data' => [ 'name' => $displayText, // 可选:需要展示商品缩略图可传入图片地址 // 'images' => [$req['productCoverUrl']] ], // 计算该行总金额:单份单价(单位:分)* 购买份数,避免Stripe默认追加数量后缀导致内容重复 'unit_amount' => (int)$req['unitPriceCent'] * (int)$req['quantity'], ], // 数量固定传1,配合上面的总金额计算,不会出现重复的数量展示 'quantity' => 1, ]); } if (Auth::check()) { $charge = $stripeClient->checkout->sessions->create([ 'payment_method_types' => [ 'card', 'sepa_debit', 'giropay', 'sofort', 'alipay' ], 'success_url' => env('APP_URL').'/success', 'cancel_url' => env('APP_URL').'/cancel', 'shipping_address_collection' => [ 'allowed_countries' => ['DE'], ], 'shipping_options' => [ [ 'shipping_rate' => $request->lieferung ? env('SHIPPING_RATE_LIEFERUNG') : env('SHIPPING_RATE_ABHOLUNG') ], ], // 修复原有多套数组的问题,直接传入组装好的$lineItems 'line_items' => $lineItems, 'mode' => 'payment', 'metadata' => [ 'lieferung' => $request->lieferung, 'isCustomer' => true ], 'allow_promotion_codes' => true, 'customer' => Auth::user()->stripe_id ]); }
方案2:预设商品时写入固定规格
如果你售卖的商品规格完全固定,不会随订单变化,也可以直接在Stripe后台创建商品时,把固定规格信息写在商品名称字段,绑定对应价格后不需要修改原有传固定price ID的代码,账单会直接展示带规格的商品名。但该方案不支持动态拼接购买数量这类随订单变化的内容,不适配你当前的需求。
补充说明:Stripe的全局
metadata字段仅用于后端业务逻辑查询,不会展示给前端用户和账单,不要用该字段存储需要给用户查看的展示内容。
内容的提问来源于stack exchange,提问作者harunB10
相关产品推荐
相关产品推荐

