Laravel Cashier集成Stripe订阅报错:指定价格不存在的排查与解决
Laravel Cashier + Stripe 订阅报错“No such price”的排查与解决
问题场景
使用Laravel Cashier对接Stripe实现订阅功能时,已在Stripe控制台创建产品和对应价格,但调用订阅接口时始终返回错误:
No such price: 'price_1Qkgr4Az8wYmHt8vp5njDBoF'
涉及代码如下:
Route::get('/subscribe', function (Request $request) { return $request->user() ->newSubscription('prod_Rdyo9nUDWFaX3h', 'price_1Qkgr4Az8wYmHt8vp5njDBoF') ->checkout([ 'success_url' => route('subscribe-success'), 'cancel_url' => route('subscribe-cancel'), ])->create($request->paymentMethodId); })->name('subscribe');
核心问题与修复
1. newSubscription 参数传递错误
newSubscription 方法的第一个参数是订阅的内部别名(用于区分用户的不同订阅,比如main、premium),而非产品ID。你错误地将产品ID传入第一个参数,导致Cashier无法正确识别目标价格。
修正后的代码:
Route::get('/subscribe', function (Request $request) { return $request->user() ->newSubscription('main', 'price_1Qkgr4Az8wYmHt8vp5njDBoF') // 第一个参数改为订阅别名 ->checkout([ 'success_url' => route('subscribe-success'), 'cancel_url' => route('subscribe-cancel'), ])->create($request->paymentMethodId); })->name('subscribe');
其他排查方向
如果修正参数后仍报错,检查以下几点:
- 环境密钥不匹配:确认
.env文件中的STRIPE_KEY和STRIPE_SECRET对应的环境(测试/生产),与你创建价格的Stripe控制台环境一致。测试环境的价格无法通过生产密钥访问,反之亦然。 - 价格状态异常:登录Stripe控制台找到目标价格,确认其状态为活跃(Active),归档(Archived)状态的价格无法被API调用。
- 价格ID复制错误:直接从Stripe控制台价格详情页复制ID,避免手动输入或复制时带入空格、换行符等无效字符。
内容的提问来源于stack exchange,提问作者Andrew Koper
相关产品推荐
相关产品推荐

