晚上好,
我有一个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
}
...
任何帮助将不胜感激,因为我的想法可能是什么问题。
1条答案
按热度按时间hyrbngr71#
在阅读了无数个小时关于不同潜在原因的文章后,发现这是我的Vercel项目环境变量值中的一个流氓空格和换行符。
希望这将保存别人的痛苦在未来。
祝你好运