Ошибка чередования чередующихся полос: не найдено ни одной подписи, соответствующей ожидаемой подписи для полезной нагрузки - PullRequest
0 голосов
/ 29 июня 2019

Я использую код, предоставленный Stripe, для тестирования webhook.Секрет Stripe и секрет конечной точки были проверены трижды.

Версия Stripe: 6.19 Body-Parser: 1.19

Когда я тестирую webhook на панели мониторинга Stripe, я получаю результат: (Test error webhook error: 400) Не найдено подписей, соответствующих ожидаемой подписи для полезной нагрузки.Вы передаете необработанное тело запроса, полученное от Stripe?

Любая помощь будет оценена.

var bodyParser - require('body-parser);


// Using Express
const app = require('express')();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
const stripe = require('stripe')('sk_test_VPw...');

// Find your endpoint's secret in your Dashboard's webhook settings
const endpointSecret = 'whsec_...';


// Use body-parser to retrieve the raw body as a buffer
const bodyParser = require('body-parser');

// Match the raw body to content type application/json
app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => {
  const sig = request.headers['stripe-signature'];

  let event;

  try {
    event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret); //NOT WORKING!
  } catch (err) {
    return response.status(400).send(`Webhook Error: ${err.message}`);
  }

  // Handle the checkout.session.completed event
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;

    // Fulfill the purchase...
    handleCheckoutSession(session);
  }

  // Return a response to acknowledge receipt of the event
  response.json({received: true});
});

1 Ответ

0 голосов
/ 01 июля 2019

Обычно это происходит из-за того, что вы что-то анализируете или изменяете необработанную строку запроса перед проверкой подписи (таким образом, подпись вычисляется по измененной строке, а не по той, которую отправила полоса).В этом случае похоже, что промежуточное ПО JSON bodyParser делает следующее: app.use(bodyParser.json());

В Stripe есть пример использования промежуточного ПО rawP bodyParser на конечной точке webhook, чтобы ваш код получил необработанную строку, которая требуется: https://github.com/stripe/stripe-node/blob/master/examples/webhook-signing/express.js

...