diff --git a/razorpay/utility/utility.py b/razorpay/utility/utility.py index 1272372d..fab9e643 100644 --- a/razorpay/utility/utility.py +++ b/razorpay/utility/utility.py @@ -23,7 +23,10 @@ def verify_payment_signature(self, parameters): def verify_payment_link_signature(self, parameters): - if 'razorpay_payment_id' in parameters.keys() and 'payment_link_reference_id' in parameters.keys() and 'payment_link_status' in parameters.keys(): + required_keys = ('razorpay_payment_id', 'payment_link_id', + 'payment_link_reference_id', 'payment_link_status', + 'razorpay_signature') + if all(key in parameters for key in required_keys): payment_id = str(parameters['razorpay_payment_id']) payment_link_id = str(parameters['payment_link_id']) payment_link_reference_id = str(parameters['payment_link_reference_id']) diff --git a/tests/test_client_utility.py b/tests/test_client_utility.py index 2d424658..9d9e9e1a 100644 --- a/tests/test_client_utility.py +++ b/tests/test_client_utility.py @@ -50,6 +50,21 @@ def test_verify_payment_link_signature(self): self.client.utility.verify_payment_link_signature(parameters), True) + @responses.activate + def test_verify_payment_link_signature_missing_key(self): + # A payload missing a required key (here payment_link_id) must return + # False, not raise KeyError. + parameters = {} + parameters['razorpay_payment_id'] = 'pay_IH3d0ara9bSsjQ' + parameters['payment_link_reference_id'] = 'TSsd1989' + parameters['payment_link_status'] = 'paid' + parameters['razorpay_signature'] = 'deadbeef' + parameters['secret'] = 'EnLs21M47BllR3X8PSFtjtbd' + + self.assertEqual( + self.client.utility.verify_payment_link_signature(parameters), + False) + @responses.activate def test_verify_payment_signature_with_exception(self): parameters = {}