创建Stripe订阅结账会话时,无优惠券ID情况下$coupon_id变量应赋值为空字符串还是'none'?
关于Stripe结账会话无优惠券时的参数处理
嘿,这个问题我之前踩过坑,刚好能给你明确的解答!
首先划重点:既不要把$coupon_id设为'none',也不要设为空字符串''——这两种操作都会触发Stripe API报错,因为Stripe会尝试查找ID为'none'或''的优惠券,而这类ID显然不存在,API会返回invalid_request_error提示找不到对应优惠券。
正确的处理方式有两种,首推第一种:
方式一:仅在有有效优惠券时添加discounts参数
这是最贴合Stripe API规范的做法,当没有优惠券时,直接不传递discounts字段即可:
// 先初始化基础的会话参数 $session_params = [ 'payment_method_types' => ['card'], 'line_items' => [[ 'price' => $plan_id, 'quantity' => 1, ]], 'mode' => 'subscription', 'success_url' => 'https://example.com/success', 'cancel_url' => 'https://example.com/cancel', ]; // 只有当存在有效优惠券ID时,才追加折扣配置 if (!empty($ID)) { $session_params['discounts'] = [[ 'coupon' => $ID, ]]; } // 创建结账会话 $session = \Stripe\Checkout\Session::create($session_params);
方式二:必须保留结构时设为null(不推荐)
如果因为框架或代码结构限制,必须保留discounts数组的结构,那可以把coupon设为null,Stripe API会自动忽略这个无效的折扣配置:
$coupon_id = $ID; } else { $coupon_id = null; // 这里设为null而非'none'或空字符串 } $session = \Stripe\Checkout\Session::create([ 'payment_method_types' => ['card'], 'line_items' => [[ 'price' => $plan_id, 'quantity' => 1, ]], 'mode' => 'subscription', 'discounts' => [[ 'coupon' => $coupon_id, ]], 'success_url' => 'https://example.com/success', 'cancel_url' => 'https://example.com/cancel', ]);
不过还是更推荐第一种方式,它逻辑更清晰,也完全符合Stripe的API设计初衷,能避免不必要的参数传递风险。
内容的提问来源于stack exchange,提问作者Mira chalak
相关产品推荐
相关产品推荐

