Stripe Webhook с Express на Vercel

Я интегрировал 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 можно легко интегрировать с другими библиотеками и фреймворками.


1
87
1

Ответ:

Решено

Я решил эту проблему с помощью Stripe. Проблема была не в Верселе. Конечная точка веб-перехватчика Stripe предоставляет два секретных ключа.

  1. Один из них представлен в примере кода при настройке новой конечной точки:

  2. Другой - вы можете найти в подробностях:

(1) работает при локальной разработке и (2) работает при развертывании в Верселе.