Next.js+MongoDB集成Stripe结账API报URL无效错误排查求助
检查URL拼接完整性
确认拼接后的success_url和cancel_url是完整的合法URL,比如是否漏加了路径后缀。比如代码如果是${origin}/success,要确保最终生成的是http://localhost:3000/success而非仅http://localhost:3000或路径拼写错误。建议在创建会话前直接打印完整的URL字符串,直观验证格式。清理origin中的隐藏字符
即使控制台打印origin是http://localhost:3000,也可能存在不可见的空白字符(如空格、换行符)。可以对origin做trim处理:const origin = req.headers.origin?.trim(),再进行拼接,避免隐藏字符破坏URL结构。验证Stripe SDK版本的URL校验规则
不同版本的Stripe SDK对URL格式的校验严格程度有差异,部分版本要求URL必须完全符合RFC规范,比如不能有未转义的特殊字符。如果拼接的路径包含中文、空格等特殊字符,需要用encodeURI()处理路径部分,例如${origin}${encodeURI('/订单完成')}。排除重复协议或域名的情况
检查是否存在环境变量配置的URL前缀与origin重复拼接的问题,比如环境变量已定义NEXT_PUBLIC_BASE_URL=http://localhost:3000,再和origin拼接会生成http://localhost:3000http://localhost:3000/success这类无效URL。硬编码URL做对比测试
临时将origin替换为硬编码的http://localhost:3000,如果此时不再报错,说明问题出在origin的获取或处理环节;如果依然报错,需排查Stripe会话的其他参数配置(比如line_items是否合法),但根据报错信息,优先级仍聚焦在URL上。
内容的提问来源于stack exchange,提问作者Rip Rip

