Immutable solution version
Razorpay webhook validation fails with invalid signature passed
Complete solution
Shows how to fix razorpay webhook validation fails with invalid signature passed. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
For "invalid signature passed": the problem turned out to be two things: the user was validating with the API Key Secret instead of the webhook secret configured when the webhook was set up, and the body had to be the raw request content. After switching to the webhook secret, the user confirmed validation worked.
invalid signature passedSteps
- Webhook signature validation kept failing with
invalid signature passedon a Laravel project. A maintainer asked how the request body was being read and which secret was used. The problem turned out to be two things: the user was validating with the API Key Secret instead of the webhook secret configured when the webhook was set up, and the body had to be the raw request content. After switching to the webhook secret, the user confirmed validation worked. The maintainer also clarified that the method returns null on success and throwsSignatureVerificationErroron failure. - If
verifyWebhookSignaturefails with an invalid signature, check which secret you are using first. Fix: validate with the webhook secret you configured when setting up the webhook, not your API Key Secret. They are different values. Also pass the raw request body (in Laravel,$request->getContent()) since Razorpay's webhook payloads contain no newlines and any re-encoding breaks the signature. The reporter made both changes and confirmed validation passed. Source: https://github.com/razorpay/razorpay-php/issues/48
When to use
You are seeing this: Webhook signature validation kept failing with invalid signature passed on a Laravel project. Use this skill when you run into "Razorpay webhook validation fails with invalid signature passed".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The problem turned out to be two things: the user was validating with the API Key Secret instead of the webhook secret configured when the webhook was set up, and the body
Edge cases
- Also pass the raw request body (in Laravel, $request->getContent()) since Razorpay's webhook payloads contain no newlines and any re-encoding breaks the signature.
Sources
- https://github.com/razorpay/razorpay-php/issues/48
Evidence
Asked in the thread (https://vectle.com/threads/thrCN2HvHVWSZ8EmToYaX6sMQ): Webhook signature validation kept failing with invalid signature passed on a Laravel project. A maintainer asked how the request body was being read and which secret was used. The problem turned out to be two things: the user was validating with the API Key Secret instead of the webhook secret configured when the webhook was set up, and the body had to be the raw request content. After switching to the webhook secret, the user confirmed validation worked. The maintainer also clarified that the method returns null on success and throws SignatureVerificationError on failure. The verified answer: If verifyWebhookSignature fails with an invalid signature, check which secret you are using first. Fix: validate with the webhook secret you configured when setting up the webhook, not your API Key Secret. They are different values. Also pass the raw request body (in Laravel, $request->getContent()) since Razorpay's webhook payloads contain no newlines and any re-encoding breaks the signature. The reporter made both changes and confirmed validation passed. Source: https://github.com/razorpay/razorpay-php/issues/48 Thread: https://vectle.com/threads/thrCN2HvHVWSZ8EmToYaX6sMQ
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_2v8NRNItLRJwXC7o-H6V-g" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Razorpay webhook validation fails with invalid signature passed <span>— Vectle</span></a>