def getPaymentStatus(payment_id, payment_request_id): # api = Instamojo(api_key=API_KEY, auth_token=AUTH_TOKEN, endpoint='https://test.instamojo.com/api/1.1/') api = Instamojo(api_key=API_KEY, auth_token=AUTH_TOKEN) response = api.payment_request_payment_status(payment_request_id, payment_id) if (response["success"]): if (response['payment_request']['payment']['status'] == "Credit"): status = True else: status = False return status else: return False
class TestPaymentRequests(BaseTestClass): def setUp(self): self.api_endpoint = 'https://www.instamojo.com/api/1.1/' self.api = Instamojo('API-KEY', 'AUTH-TOKEN', self.api_endpoint) @responses.activate def test_payment_request_create(self): data = payment_requests_payload['payment_request_create'] endpoint = self.api_endpoint + 'payment-requests/' responses.add(responses.POST, endpoint, body='{}', content_type='application/json') resp = self.api.payment_request_create(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].request.url, endpoint) @responses.activate def test_payment_request_status(self): data = payment_requests_payload['payment_request_status'] endpoint = self.api_endpoint + 'payment-requests/{id}/'.format( **data['request']) responses.add(responses.GET, endpoint, body='{}', content_type='application/json') resp = self.api.payment_request_status(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].request.url, endpoint) @responses.activate def test_payment_requests_list(self): data = payment_requests_payload['payment_requests_list'] endpoint = self.api_endpoint + 'payment-requests/' responses.add(responses.GET, endpoint, body='{}', content_type='application/json') resp = self.api.payment_requests_list(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].request.url, endpoint) @responses.activate def test_payment_requests_list_optional_params(self): data = payment_requests_payload[ 'payment_requests_list_optional_params'] endpoint = self.api_endpoint + 'payment-requests/' responses.add(responses.GET, endpoint, body='{}', content_type='application/json') resp = self.api.payment_requests_list(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) parsed_url = urlparse(responses.calls[0].request.url) self.assertTrue(endpoint.endswith(parsed_url.path)) self.assertDictEqual(dict(parse_qsl(parsed_url.query.strip('/'))), data['request']) @responses.activate def test_payment_request_payment_status(self): data = payment_requests_payload['payment_request_payment_status'] endpoint = self.api_endpoint + 'payment-requests/{id}/{payment_id}/'.format( **data['request']) responses.add(responses.GET, endpoint, body='{}', content_type='application/json') resp = self.api.payment_request_payment_status(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].request.url, endpoint)
def validate(self, attrs): """ Validates the payment ID from Instamojo Server Parameters ---------- attrs: dict Returns ------- data: dict Author: Himanshu Shankar (https://himanshus.com) """ from instamojo_wrapper import Instamojo from .models import PaymentRequest, InstamojoConfiguration # Initialize required variables pr: PaymentRequest = attrs.get('payment_request') ic: InstamojoConfiguration = pr.configuration imojo = Instamojo(api_key=ic.api_key, auth_token=ic.auth_token, endpoint=ic.base_url) # Try to fetch payment status try: response = imojo.payment_request_payment_status( id=pr.id, payment_id=attrs.get('id')) except ConnectionError as err: err = str(err) raise APIException(_(f"Server error occurred while getting " f"payment status from Instamojo: {err}")) if not response['success']: # Instamojo server returned with False success flag. raise serializers.ValidationError(_("Could not validate payment!")) # Initialize data with payment information data = response['payment_request']['payment'].copy() # Set variables as per model data['id'] = data.pop('payment_id') data['instamojo_raw_response'] = json.dumps(response) data['payment_request'] = pr # Extract and set failure variables as per model if 'failure' in data and data.get('failure'): data['failure_reason'] = data.get('failure').get('reason') data['failure_message'] = data.get('failure').get('message') # Convert possible non-str data to str as per model fields non_str_fields = ('payment_request', ) for k, v in data.copy().items(): # If key is not in fields, delete it if k not in self.Meta.fields: del data[k] # If key is not a non-string field and is not None and is # not an instance of string, convert it to string elif k not in non_str_fields and v and not isinstance(v, str): data[k] = str(v) # Return data return data
class TestPaymentRequests(BaseTestClass): def setUp(self): self.api_endpoint = 'https://www.instamojo.com/api/1.1/' self.api = Instamojo('API-KEY', 'AUTH-TOKEN', self.api_endpoint) @responses.activate def test_payment_request_create(self): data = payment_requests_payload['payment_request_create'] endpoint = self.api_endpoint + 'payment-requests/' responses.add( responses.POST, endpoint, body='{}', content_type='application/json' ) resp = self.api.payment_request_create(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual( responses.calls[0].request.url, endpoint) @responses.activate def test_payment_request_status(self): data = payment_requests_payload['payment_request_status'] endpoint = self.api_endpoint + 'payment-requests/{id}/'.format(**data['request']) responses.add( responses.GET, endpoint, body='{}', content_type='application/json' ) resp = self.api.payment_request_status(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual( responses.calls[0].request.url, endpoint) @responses.activate def test_payment_requests_list(self): data = payment_requests_payload['payment_requests_list'] endpoint = self.api_endpoint + 'payment-requests/' responses.add( responses.GET, endpoint, body='{}', content_type='application/json' ) resp = self.api.payment_requests_list(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual( responses.calls[0].request.url, endpoint) @responses.activate def test_payment_requests_list_optional_params(self): data = payment_requests_payload['payment_requests_list_optional_params'] endpoint = self.api_endpoint + 'payment-requests/' responses.add( responses.GET, endpoint, body='{}', content_type='application/json' ) resp = self.api.payment_requests_list(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) parsed_url = urlparse(responses.calls[0].request.url) self.assertTrue(endpoint.endswith(parsed_url.path)) self.assertDictEqual(dict(parse_qsl(parsed_url.query.strip('/'))), data['request']) @responses.activate def test_payment_request_payment_status(self): data = payment_requests_payload['payment_request_payment_status'] endpoint = self.api_endpoint + 'payment-requests/{id}/{payment_id}/'.format(**data['request']) responses.add( responses.GET, endpoint, body='{}', content_type='application/json' ) resp = self.api.payment_request_payment_status(**data['request']) self.assertEqual(resp, {}) self.assertEqual(len(responses.calls), 1) self.assertEqual( responses.calls[0].request.url, endpoint)