我正在构建一个具有登录表单和条带订阅功能的 Web 应用程序。
\n为了接收 JSON 数据,我正在使用express.jsonas
app.use(express.json());\n\nRun Code Online (Sandbox Code Playgroud)\n当我使用上面的中间件来接收时stripe webhook secret服务器无法接收。
所以我必须添加express.raw
我的中间件如下所示:
\napp.use(express.raw({ type: "application/json" }));\napp.use(express.json());\n\nRun Code Online (Sandbox Code Playgroud)\n但现在我无法接收表单 JSON 数据。
\n这是我的条纹逻辑:
\nexport const postStripeWebhook = async (req: ExtendedRequest, res: Response) => {\n let data;\n let eventType;\n let event = req.body;\n const webhookSecret = "web hook secret provided by stripe";\n if (webhookSecret) {\n let signature = req.headers["stripe-signature"];\n\n try {\n event = stripe.webhooks.constructEvent(req.body, signature , webhookSecret);\n } catch (err) {\n console.log(`\xe2\x9a\xa0\xef\xb8\x8f Webhook signature verification failed.`); //This part is throwing the error\n return res.sendStatus(400);\n }\n \n data = event.data;\n eventType = event.type;\n } else {\n \n \n data = req.body.data;\n eventType = req.body.type;\n }\n let subscription;\n\n switch (eventType) {\n \n // Here webhook events are managed\n\n }\n\n res.sendStatus(200);\n};\nRun Code Online (Sandbox Code Playgroud)\n这是index.js代码:
\n\napp.use(express.raw({ type: "application/json" }));\napp.use(express.json());\napp.use(express.static("public"));\napp.use(express.urlencoded({ extended: true }));\napp.use(cors());\n\napp.post("/webhooks", postStripeWebhook);\n\nRun Code Online (Sandbox Code Playgroud)\n更新了代码-------------------------
\n索引.js:
\napp.use(express.json());\napp.use(express.static("public"));\napp.use(express.urlencoded({ extended: true }));\napp.use(cors());\n\napp.post("/webhooks", postStripeWebhook);\n\nRun Code Online (Sandbox Code Playgroud)\n中间件代码:
\nexport const postStripeWebhook = async (req: ExtendedRequest, res: Response) => {\n let data;\n let eventType;\n let event = req.body;\n const webhookSecret = "web hook secret provided by stripe";\n if (webhookSecret) {\n let signature = req.headers["stripe-signature"];\n\n try {\n event = stripe.webhooks.constructEvent(JSON.stringify(req.body), signature , webhookSecret); //updated this line\n } catch (err) {\n console.log(`\xe2\x9a\xa0\xef\xb8\x8f Webhook signature verification failed.`); //This part is throwing the error\n return res.sendStatus(400);\n }\n \n data = event.data;\n eventType = event.type;\n } else {\n \n \n data = req.body.data;\n eventType = req.body.type;\n }\n let subscription;\n\n switch (eventType) {\n \n // Here webhook events are managed\n\n }\n\n res.sendStatus(200);\n};\n\nRun Code Online (Sandbox Code Playgroud)\n我更新了代码,但问题仍然存在。
\n请指导我如何修改我的中间件以接收两种类型的数据。
\n我的应用程序中的所有其他路线都需要express.json,并且只/webhooks需要路线express.raw,因此我绕过了/wbhooks使用路线express.json
我是这样做的:
索引.js
app.use((req, res, next) => {
if (req.originalUrl === "/webhooks") {
next();
} else {
express.json()(req, res, next);
}
});
app.use(express.static("public"));
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.post("/webhooks", express.raw({ type: "application/json" }), postStripeWebhook);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |