我正在尝试将 Stripe(订阅)结帐集成到我的 Next.js 应用程序(14 w/应用程序路由器)中。
TL;DR
:
我认为这可能是 Next.js 的问题,因为当我对应用程序执行 curl
命令时 /api/webhooks/stripe
我得到一个 401
就像我的 Stripe 开发仪表板日志中显示的那样。似乎表明 Next 服务器需要对此 api 路由进行身份验证。我没有 middleware.ts
或类似的东西,所以我不知道是什么原因造成的。
一切都在本地运行。我登录,通过我重定向到的 Stripe 表单/页面完成(测试)付款,然后我被重定向回我的应用程序,然后我看到在我的数据库中我的用户记录已更新(带有
stripe_customer_id
例如)。
然后我设置了一个 Webhook 并将其指向 vercel 上的暂存部署
https://subdomain.domain.xyz/api/webhooks/stripe
。我能够完成 Stripe 付款,并且从 Stripe 表单/页面重定向回我的申请页面。但是数据库中的用户记录不会使用任何条带信息进行更新,并且我在条带 Webhook 日志中看到错误:
HTTP status code
401 (Unauthorized)
<!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Authentication Required</title>...
我的 Next.js 应用程序上没有任何
middleware.ts
或类似的东西。
我的
STRIPE_WEBHOOK_SECRET
已正确设置为 Webhook 的 Stripe Dev Dashboard 中显示的值。
我在 vercel 部署日志中没有看到
console.log
位于我的 src/app/api/webhooks/stripe/route.ts
中(但当我在本地执行此操作时,我确实看到了这些日志)。在我看来,在处理程序有机会处理 POST 请求之前,对我设置的 webhook url 的请求就被拒绝了。
我正在使用服务器操作,在制作本教程时这些操作还处于实验阶段,但我使用的是 Next 14+,因此应该完全支持它们。
有人认识到这个错误或者知道我如何解决这个问题吗?
我已经看到了一些类似的问题,所以我将在我的案例中添加:
我正在推送到暂存分支并在 MyProject > 设置 > 部署保护中:
Vercel 身份验证已启用,我需要禁用它。
我希望保持其启用状态,并将 Stripe 列入白名单。如果有人知道如何做到这一点,请发表评论。谢谢。