如何将Stripe使用的price_id替换为数据库中已存储的price_id
实现步骤
- 首先对查询得到的
$price_id做有效性校验,避免数据库中不存在对应slug的price_id时,向Stripe传递无效参数触发报错 - 直接替换Stripe会话创建代码中
line_items下price字段的硬编码值为$price_id变量即可
完整示例代码
// 从数据库查询price_id $price_id = DB::table('products')->where('slug', $this->slug)->value('price_id'); // 校验price_id有效性 if (empty($price_id)) { // 这里可以根据你的业务逻辑做异常处理,比如抛出错误、跳转回商品页等 abort(404, '对应商品的支付配置不存在'); } // 创建Stripe Checkout会话 $session = \Stripe\Checkout\Session::create([ 'success_url' => 'https://example.com/success', 'cancel_url' => 'https://example.com/cancel', 'payment_method_types' => ['card'], 'line_items' => [ [ 'price' => $price_id, // 已替换为数据库查询的变量 'quantity' => 1, ], ], 'mode' => 'payment', // 其他你需要的配置参数 ]);
注意事项
- 请确保你的数据库中存储的price_id是对应Stripe后台有效、未删除的价格ID,否则Stripe会返回无效价格的报错
- 如果你的业务支持多货币、多规格商品,查询条件可以额外增加对应维度的过滤,确保拿到的是当前场景对应的price_id
内容的提问来源于stack exchange,提问作者Swimo Omix
相关产品推荐
相关产品推荐

