我正在尝试设置Sveltekit, Stripe和Vercel。它可以在本地环境中正确工作,也可以在节点服务器(heroku)上部署,但当我将其部署到Vercel时,我得到这个错误消息(400):
{"msg": "Webhook Error: 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"}
请求代码和svelte.config.js
export async function post({ request }) {
let event;
try {
const sig = request.headers.get('stripe-signature');
const rawBody = request.Buffer();
event = stripe.webhooks.constructEvent(rawBody, sig, STRIPE_HOOK_ENDPOINT_SECRET);
} catch (err) {
console.log(err);
return {
status: 400,
// @ts-ignore
body: { msg: `Webhook Error: ${err.message}` }
};
}
import adapter from '@sveltejs/adapter-auto';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(),
}
};
export default config;
使用SvelteKit和Vercel无法找到有关此问题的任何内容。我还尝试了其他解决方案来访问rawBody,但每个人都可以工作,除了Vercel适配器:
- 本地(作品)
- Vercel cli local (works)
- 在Heroku (works)上使用适配器节点部署
- 部署在Vercel(不工作😥)
如果您遇到类似的情况或有建议可以分享,我将非常感谢。
问候,安德里亚
这样做:
const sig = request.headers.get('stripe-signature');
const buffer = Buffer.from(await request.arrayBuffer()); // <----
event = stripe.webhooks.constructEvent(buffer, sig, STRIPE_HOOK_ENDPOINT_SECRET);