You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When deployed to Netlify (I would assume any Lambda-based implementation will have the same issue) Stripe webhook events fail and report:
No signatures found matching the expected signature for payload
I solved this by updating the handleStripeWebhooks function to check the NODE_ENV value and if it's set to production to use event.rawBody rather than event.body. The local dev server will fail if it's passed the rawBody.
Here is my revised function that solves the issue:
export const handleStripeWebhooks = (event, context, webhooksObj) => {
let stripeEvent
let body = process.env.NODE_ENV === 'production' ? event.rawBody : event.body
try {
const sig = event.headers['stripe-signature']
stripeEvent = stripe.webhooks.constructEvent(
body,
sig,
process.env.STRIPE_WEBHOOK_KEY
)
let results = null
if (typeof webhooksObj[stripeEvent.type] !== 'undefined') {
results = webhooksObj[stripeEvent.type](event, context)
}
return results
} catch (error) {
console.log(error)
throw error
}
}
The text was updated successfully, but these errors were encountered:
That looks ok to me. We had a similar situation with the success and cancel urls in the checkout service. We solved it with an env var at first, but since they're GraphQL resolvers, we ended up with a bit more sophisticated solution that takes deploy previews into account:
In the webhook's case, the event's coming from Stripe. Maybe there's something that Stripe gives us, in the event or the context, that we could use to resolve dev vs prod in a similar way?
When deployed to Netlify (I would assume any Lambda-based implementation will have the same issue) Stripe webhook events fail and report:
I solved this by updating the
handleStripeWebhooks
function to check theNODE_ENV
value and if it's set toproduction
to useevent.rawBody
rather thanevent.body
. The local dev server will fail if it's passed the rawBody.Here is my revised function that solves the issue:
The text was updated successfully, but these errors were encountered: