Я интегрировал Stripe-Webhook в свое экспресс-приложение и развернул его в Vercel. Я тестировал локальную версию с помощью Stripe-Cli, и все работает нормально. Но после развертывания в Верселе появляется эта ошибка:
Не найдено сигнатур, соответствующих ожидаемой подписи для полезных данных. Вы передаете необработанное тело запроса, полученное от Stripe? Если запрос веб-перехватчика пересылается сторонним инструментом, убедитесь, что сохраняется точный текст запроса, включая формат JSON и новый стиль строки. Узнайте больше о подписании веб-перехватчиков и изучите примеры интеграции веб-перехватчиков для различных платформ на странице https://github.com/stripe/stripe-node#webhook-signing
Я использовал следующий код для промежуточного программного обеспечения Stripe Webhook.
//app.js
app.use((req, res, next) => {
if (req.path === '/api/stripe/webhook') {
next();
} else {
express.json()(req, res, next);
}
});
//stripe.route.js
const express = require('express');
const stripeController = require('../../../controllers/users/stripe.controller');
const router = express.Router();
router.post('/webhook', express.raw({ type: 'application/json' }), stripeController.stripeWebhook);
module.exports = router;
//stripe.controller.js
const stripeWebhook = async (req, res) => {
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(req.body, sig, envVars.stripe.endpointSecret);
} catch (err) {
console.info(err.message)
res.status(400).send(`Webhook Error: ${err.message}`);
return;
}
...
}
Повторюсь, я тестировал с помощью Stripe-Cli свой локальный компьютер, и он работает правильно. Кажется, проблема в Верселе. Заранее спасибо.
🤔 А знаете ли вы, что...
С ExpressJS можно легко интегрировать с другими библиотеками и фреймворками.
Я решил эту проблему с помощью Stripe. Проблема была не в Верселе. Конечная точка веб-перехватчика Stripe предоставляет два секретных ключа.
Один из них представлен в примере кода при настройке новой конечной точки:
Другой - вы можете найти в подробностях:
(1) работает при локальной разработке и (2) работает при развертывании в Верселе.