Пример #1
0
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
Пример #2
0
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)
Пример #3
0
    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)