From 6c4f1baf955e1333a3fcd245dd2d03a15c3b6ea1 Mon Sep 17 00:00:00 2001 From: ankitdas13 Date: Tue, 3 Mar 2026 15:24:36 +0530 Subject: [PATCH 1/3] add cancel token --- documents/token.md | 21 +++++++++++++++++++++ razorpay/resources/token.py | 13 +++++++++++++ tests/test_client_token.py | 14 ++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/documents/token.md b/documents/token.md index 349a6d87..bf2c885c 100644 --- a/documents/token.md +++ b/documents/token.md @@ -398,6 +398,27 @@ client.token.processPaymentOnAlternatePAorPG({"id":"spt_4lsdksD31GaZ09"}) } ``` ------------------------------------------------------------------------------------------------------- + +### Cancel Token + +```py +client.token.cancel(customerId, tokenId) +``` + +**Parameters:** + +| Name | Type | Description | +|---------------|-------------|--------------------------------------| +| customerId* | string | The id of the customer to be fetched | +| tokenId* | string | The id of the token to be fetched | + +**Response:** +```json +{ + "status": "cancellation_initiated" +} +``` +------------------------------------------------------------------------------------------------------- **PN: * indicates mandatory fields**

diff --git a/razorpay/resources/token.py b/razorpay/resources/token.py index 61bf9eab..83e94426 100644 --- a/razorpay/resources/token.py +++ b/razorpay/resources/token.py @@ -87,3 +87,16 @@ def processPaymentOnAlternatePAorPG(self, data={}, **kwargs): """ url = '{}{}/{}'.format(URL.V1, URL.TOKEN, "service_provider_tokens/token_transactional_data") return self.post_url(url, data, **kwargs) + + def cancel(self, customer_id, token_id, data={}, **kwargs): + """ + Cancel Given Token + + Args: + customer_id : Customer Id for which token have to be cancelled + token_id : Id for which Token object has to be cancelled + Returns: + Dict for cancel token + """ + url = "{}/{}/tokens/{}/cancel".format(self.base_url, customer_id, token_id) + return self.put_url(url, data, **kwargs) diff --git a/tests/test_client_token.py b/tests/test_client_token.py index 6780278a..aa5499c1 100644 --- a/tests/test_client_token.py +++ b/tests/test_client_token.py @@ -103,3 +103,17 @@ def test_token_processPaymentOnAlternatePAorPG(self): self.assertEqual( self.client.token.processPaymentOnAlternatePAorPG(init), result) + + @responses.activate + def test_canel_token(self): + url = '{}/{}/tokens/{}/cancel'.format(self.base_url, + self.customer_id, + self.token_id) + responses.add(responses.PUT, + url, + status=200, + body=json.dumps({'status': 'cancellation_initiated'}), + match_querystring=True) + self.assertEqual( + self.client.token.cancel(self.customer_id, self.token_id), + {'status': 'cancellation_initiated'}) From 5850c827aee436a1cc24a7a4c66367feeb80bb82 Mon Sep 17 00:00:00 2001 From: ankitdas13 Date: Mon, 9 Mar 2026 11:22:20 +0530 Subject: [PATCH 2/3] resolved as per comment --- razorpay/resources/token.py | 2 +- tests/test_client_token.py | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/razorpay/resources/token.py b/razorpay/resources/token.py index 83e94426..a52ed9df 100644 --- a/razorpay/resources/token.py +++ b/razorpay/resources/token.py @@ -98,5 +98,5 @@ def cancel(self, customer_id, token_id, data={}, **kwargs): Returns: Dict for cancel token """ - url = "{}/{}/tokens/{}/cancel".format(self.base_url, customer_id, token_id) + url = f"{self.base_url}/{customer_id}/tokens/{token_id}/cancel" return self.put_url(url, data, **kwargs) diff --git a/tests/test_client_token.py b/tests/test_client_token.py index aa5499c1..7215a238 100644 --- a/tests/test_client_token.py +++ b/tests/test_client_token.py @@ -106,9 +106,7 @@ def test_token_processPaymentOnAlternatePAorPG(self): @responses.activate def test_canel_token(self): - url = '{}/{}/tokens/{}/cancel'.format(self.base_url, - self.customer_id, - self.token_id) + url = f"{self.base_url}/{self.customer_id}/tokens/{self.token_id}/cancel" responses.add(responses.PUT, url, status=200, From 3b76a2123f2532c450d9594aef518333fce69de4 Mon Sep 17 00:00:00 2001 From: ankitdas13 Date: Mon, 9 Mar 2026 16:29:13 +0530 Subject: [PATCH 3/3] fix workflow --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de5afd47..bd271365 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: python -m twine check dist/* - name: 'Upload Artifact' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: dist path: dist/ @@ -61,7 +61,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Download all workflow run artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: dist path: dist