拒绝了在vercel上托管的webhook next.js端点的条带化请求

kx1ctssn  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(93)

晚上好,
我有一个next.js项目,它通过API路由从stripe接收事件,请参阅下面的代码。
这在本地使用Stripe CLI接收事件时工作得很好。
然而,当我将应用程序部署到vercel时,当从stripe发送事件时,我得到以下错误:

lambda 400 POST /api/stripe/webhooks ... INFO ❌ Error message: No signatures found matching the expected signature for payload. Are you passing the raw request body you received from Stripe? https://github.com/stripe/stripe-node#webhook-signing END

Webhook代码(在next.js API路由中):

...
// Stripe requires the raw body to construct the event.
export const config = {
  api: {
    bodyParser: false,
  },
}

const cors = Cors({
  allowMethods: ['POST', 'HEAD'],
})

const webhookHandler = async (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method === 'POST') {

    const buf = await buffer(req)
    const sig = req.headers['stripe-signature']!

    let event: Stripe.Event

    try {
      event = stripe.webhooks.constructEvent(buf.toString(), sig, webhookSecret)
    } catch (err) {
      // On error, log and return the error message.
      console.log(`❌ Error message: ${err.message}`)
      res.status(400).send(`Webhook Error: ${err.message}`)
      return
    }
...

任何帮助将不胜感激,因为我的想法可能是什么问题。

hyrbngr7

hyrbngr71#

在阅读了无数个小时关于不同潜在原因的文章后,发现这是我的Vercel项目环境变量值中的一个流氓空格和换行符。
希望这将保存别人的痛苦在未来。
祝你好运

相关问题