You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Vercel无服务器函数时Stripe Webhook返回308错误求助

问题:Stripe Webhook线上返回308错误,无服务器函数未触发

我已配置Stripe Webhook,触发时会调用一个无服务器函数,用于在用户开通高级账户时更新数据库条目。本地运行时Webhook工作完全正常,可触发API、更新用户信息并处理支付,但线上运行时持续返回308错误,提示:

Redirecting to my-app-url.com

以下是我的函数代码:

import { buffer } from "micro"
import { createClient } from "@supabase/supabase-js";

require("dotenv").config();

const stripe = require("stripe")(process.env.STRIPE_LIVE_KEY)

const endpointSecret = process.env.STRIPE_WEBHOOK_SECRET

const supabaseUrl = process.env.REACT_APP_SUPABASE_URL
const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY

const supabase = createClient(supabaseUrl, supabaseAnonKey)

module.exports = async (req, res) => {

   const signature = req.headers["stripe-signature"]
   const reqBuffer = await buffer(req)

   let event 

   try {
    event = stripe.webhooks.constructEvent(reqBuffer, signature, endpointSecret)
   } catch (err) {
    console.log(err)
    return res.status(400).send(`Webhook error: ${err.message}`)
   }

   if (event.type === "checkout.session.completed") {
    console.log("Checkout completed!")
    const userId = String(event.data.object.client_reference_id)

    console.log(userId)

    const { error } = await supabase.from('profiles').update({ premium: 'true' }).eq('id', userId) 
    
    if (error) {
      console.log(error)
    }
   }

   res.send({ received: true })
}

检查函数日志后发现,该函数似乎未触发,请求也未到达API,恳请各位提供解决建议。


解决建议

  • 检查Webhook URL的HTTP/HTTPS配置:308是永久重定向状态码,大概率是你在Stripe后台配置的Webhook URL用了HTTP,但线上环境强制HTTPS,或者反过来。Stripe要求Webhook接收地址必须是HTTPS(除本地测试的localhost),确保配置的URL以https://开头,且线上服务没有强制将HTTPS请求重定向到主站my-app-url.com。
  • 验证无服务器函数的路由配置:很多无服务器平台(如Vercel、Netlify)的路由配置不当会自动重定向到主域名。比如函数部署在https://my-app-url.com/api/stripe-webhook,但平台路由规则将未匹配请求重定向到主站,就会出现该问题。检查平台的函数路由设置,确保Webhook目标路径正确,未被重定向规则拦截。
  • 确认请求方法是否被允许:Stripe Webhook发送的是POST请求,如果线上服务器或函数平台拦截POST请求,或配置了自动将POST重定向到GET(导致308),也会触发该问题。检查函数的请求方法限制,确保允许POST请求。
  • 检查平台的重定向规则:部分托管平台默认会在带www和不带www的域名间互相重定向,或把根路径外的请求重定向到主站。查看平台的重定向配置文件(如Vercel的vercel.json、Netlify的_redirects),排除Webhook路径被包含在重定向规则中的情况。
  • 验证Stripe Webhook的签名配置:虽然本地运行正常,但线上的STRIPE_WEBHOOK_SECRET环境变量可能配置错误。另外,确保线上使用的是生产环境的Webhook密钥,而非测试环境密钥。

内容的提问来源于stack exchange,提问作者Jon Nicholson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:41:00