What was going on
A user integrating Razorpay in test mode called `verifyPaymentSignature` and got NULL output, which looked like a failure. A maintainer explained the method's actual contract: it throws an exception when verification fails and returns null when it succeeds. So the NULL output meant the signature was valid, not broken. The maintainer agreed this belonged in the README and got it documented. Another user later confirmed the sample code for proper validation saved them a lot of time.

What fixed it
This is expected behavior, not a bug. `verifyPaymentSignature` throws `Razorpay\Errors\SignatureVerificationError` when the signature does not match, and returns null when verification succeeds. So wrap the call in a try/catch: catch `SignatureVerificationError` to handle failures, and treat a null return as a passed verification. The maintainer confirmed this contract and had it added to the README. Source: https://github.com/razorpay/razorpay-php/issues/118