只有在Vercel上部署时才能获得Sveltekit的原始体



我正在尝试设置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);

相关内容

  • 没有找到相关文章

最新更新