Laravel中Stripe Session ID字符过长报错,如何解决?
Stripe结账会话ID无效错误排查与解决
问题现象
在Laravel项目中尝试获取Stripe结账会话详情时,触发如下错误:
Invalid string: cs_test_a1...lhMULLaM",; must be at most 66 characters
错误原因
生成结账会话的代码里,success_url的拼接存在语法错误:
原代码中success_url末尾多了",这些转义后的引号和逗号,导致Stripe跳转时,把多余字符一并带入session_id参数。最终传递的会话ID变成cs_test_xxx",,长度超过Stripe允许的66字符上限,调用retrieve方法时触发校验错误。
修复步骤
修正success_url的拼接
移除多余的转义字符和逗号,正确写法如下:'success_url' => $YOUR_DOMAIN . '/success?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => $YOUR_DOMAIN . '/cancel', ]);简化Stripe API初始化
代码中同时使用了StripeClient实例和静态setApiKey,二者选其一即可,避免冗余:// 方式一:使用StripeClient实例 $stripe = new \Stripe\StripeClient(env('STRIPE_API_KEY')); $checkout_session = $stripe->checkout->sessions->retrieve($session_id); // 方式二:使用静态API模式 \Stripe\Stripe::setApiKey(env('STRIPE_API_KEY')); $checkout_session = \Stripe\Checkout\Session::retrieve($session_id);使用Laravel框架规范的跳转方式
替换原生header跳转,改用Laravel的redirect()辅助函数:return redirect()->away($checkout_session->url);
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

