title: Stripe webhook error: No signatures found matching the expected signature for payload
body: <p>I am using the code provide by Stripe to test a webhook. The Stripe secret and the endpoint secret have been triple checked.</p>
  
  <p>Stripe version: 6.19
  Body-Parser: 1.19</p>
  
  <p>When I test webhook on the Stripe dashboard I get the result: (Test webhook error: 400) No signatures found matching the expected signature for payload. Are you passing the raw request body you received from Stripe? </p>
  
  <p>Any help would be appreciated.</p>
  
  <pre><code>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) =&gt; {
    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});
  });
  </code></pre>