NodeJS 调用Vercel无服务器函数时条带webhook返回308错误

bihw5rsg  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(87)

我用Stripe设置了一个webhook,它在被触发时调用一个无服务器函数。
该函数用于在调用时更新数据库中的条目,表明用户已经注册了高级帐户。
当我在本地运行这个的时候,webhook工作得很完美,它触发了API,更新了用户,处理了支付。
然而,当它在现场运行时,我不断地得到一个308错误说:
网站首页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--没有日志。
有人有什么建议吗?

2lpgd968

2lpgd9681#

308错误所示,看起来您的服务器正在接收webhook,但试图将其重定向到另一个URL。甚至有可能是同一个URL,但通过HTTPS。
条带无法跟随重定向,因此这是服务器端的错误配置。您必须给予服务器希望接收webhook的确切URL。

相关问题