예제 #1
0
 def test_online_wrong_id(self):
     self.assertEqual('ID ERR',
                      PaymentProcessor.online('195.149.229.109', '1111', '1', '', '1',
                                                                          '123.45', None, None, None, None, None,
                                                                          '15bb75707d4374bc6e578c0cbf5a7fc7'))
     self.assertNotEqual('ID ERR',
                         PaymentProcessor.online('195.149.229.109', '1234', '1', '', '1',
                                                                             '123.45', None, None, None, None, None,
                                                                             'f5f8276fbaa98a6e05b1056ab7c3a589'))
예제 #2
0
 def test_online_wrong_sig(self):
     self.assertEqual('SIG ERR',
                      PaymentProcessor.online('195.149.229.109', '1234', '1', '', '1',
                                                                          '123.45', None, None, None, None, None,
                                                                          'xxx'))
     self.assertNotEqual('SIG ERR',
                         PaymentProcessor.online('195.149.229.109', '1234', '1', '', '1',
                                                                             '123.45', None, None, None, None, None,
                                                                             '21b028c2dbdcb9ca272d1cc67ed0574e'))
예제 #3
0
 def test_online_crc_error(self):
     self.assertEqual('CRC ERR',
                      PaymentProcessor.online('195.149.229.109', '1234', '1', '',
                                                                          '99999', '123.45', None, None, None, None,
                                                                          None, 'f5f8276fbaa98a6e05b1056ab7c3a589'))
     self.assertEqual('CRC ERR',
                      PaymentProcessor.online('195.149.229.109', '1234', '1', '',
                                                                          'GRRGRRG', '123.45', None, None, None,
                                                                          None, None,
                                                                          '6a9e045010c27dfed24774b0afa37d0b'))
예제 #4
0
    def post(self, request, *args, **kwargs):
        try:
            id = request.POST['id']
            tr_id = request.POST['tr_id']
            tr_date = request.POST['tr_date']
            tr_crc = request.POST['tr_crc']
            tr_amount = request.POST['tr_amount']
            tr_paid = request.POST['tr_paid']
            tr_desc = request.POST['tr_desc']
            tr_status = request.POST['tr_status']
            tr_error = request.POST['tr_error']
            tr_email = request.POST['tr_email']
            md5sum = request.POST['md5sum']
        except KeyError:
            logger.warning('Got malformed POST request: %s' %
                           str(request.POST))
            return http.HttpResponseBadRequest('MALFORMED',
                                               content_type='text/plain')

        status = PaymentProcessor.online(get_ip_address(request), id, tr_id,
                                         tr_date, tr_crc, tr_amount, tr_paid,
                                         tr_desc, tr_status, tr_error,
                                         tr_email, md5sum)
        if status != u"TRUE":
            http.HttpResponseBadRequest(status)
        return http.HttpResponse(status, content_type='text/plain')
예제 #5
0
    def handle(self, *args, **options):

        key = PaymentProcessor.get_backend_setting('key', None)
        if key is None:
            self.stdout.write('Please be sure to provide "key" setting for this backend (random max. 16 characters)')
        else:
            self.stdout.write('Please setup in Transferuj.pl user defined key (for security signing): %s\n' % key)
예제 #6
0
class OnlineView(View):
    """
    This View answers on Transferuj.pl payment status change request

    The most important logic of this view is delegated to ``PaymentProcessor.online()`` method
    """
    def post(self, request, *args, **kwargs):
        try:
            id = request.POST['id']
            tr_id = request.POST['tr_id']
            tr_date = request.POST['tr_date']
            tr_crc = request.POST['tr_crc']
            tr_amount = request.POST['tr_amount']
            tr_paid = request.POST['tr_paid']
            tr_desc = request.POST['tr_desc']
            tr_status = request.POST['tr_status']
            tr_error = request.POST['tr_error']
            tr_email = request.POST['tr_email']
            md5sum = request.POST['md5sum']
        except KeyError, err:
            logger.warning('Got malformed POST request: %s' %
                           str(request.POST))
            return HttpResponse('MALFORMED')

        status = PaymentProcessor.online(request.META['REMOTE_ADDR'], id,
                                         tr_id, tr_date, tr_crc, tr_amount,
                                         tr_paid, tr_desc, tr_status, tr_error,
                                         tr_email, md5sum)
        return HttpResponse(status)
    def handle(self, *args, **options):

        key = PaymentProcessor.get_backend_setting("key", None)
        if key is None:
            self.stdout.write('Please be sure to provide "key" setting for this backend (random max. 16 characters)')
        else:
            self.stdout.write("Please setup in Transferuj.pl user defined key (for security signing): %s\n" % key)
예제 #8
0
 def test_online_payment_failure(self):
     Payment = apps.get_model('getpaid', 'Payment')
     order = Order(name='Test EUR order', total='123.45', currency='PLN')
     order.save()
     payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu')
     payment.save(force_insert=True)
     self.assertEqual('TRUE', PaymentProcessor.online('195.149.229.109', '1234', '1', '',
                                                                                  payment.pk, '123.45', '23.45', '',
                                                                                  False, 0, '',
                                                                                  '21b028c2dbdcb9ca272d1cc67ed0574e'))
     payment = Payment.objects.get(pk=payment.pk)
     self.assertEqual(payment.status, 'failed')
예제 #9
0
    def test_default_config_url_transaction_params(self):
        data = self.get_geteway_data()

        crc = data['crc']
        kwota = data['kwota']
        id_ = data['id']
        key = PaymentProcessor.get_backend_setting('key')
        md5sum = six.text_type(id_) + kwota + six.text_type(crc) + key
        md5sum = md5sum.encode('utf-8')

        self.assertEquals(crc, self.payment.pk)
        self.assertEquals(kwota, six.text_type(self.payment.amount))
        self.assertEquals(id_, 1234)
        self.assertEquals(data['md5sum'], md5(md5sum).hexdigest())
예제 #10
0
    def test_online_not_allowed_ip(self):
        self.assertEqual(
            'IP ERR',
            PaymentProcessor.online('0.0.0.0', None, None, None, None, None,
                                    None, None, None, None, None, None))

        # Tests allowing IP given in settings
        with self.settings(
                GETPAID_BACKENDS_SETTINGS={
                    'getpaid.backends.transferuj': {
                        'allowed_ip': ('1.1.1.1', '1.2.3.4'),
                        'key': ''
                    },
                }):
            self.assertEqual(
                'IP ERR',
                PaymentProcessor.online('0.0.0.0', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))
            self.assertNotEqual(
                'IP ERR',
                PaymentProcessor.online('1.1.1.1', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))
            self.assertNotEqual(
                'IP ERR',
                PaymentProcessor.online('1.2.3.4', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))

        # Tests allowing all IP
        with self.settings(GETPAID_BACKENDS_SETTINGS={
                'getpaid.backends.transferuj': {
                    'allowed_ip': [],
                    'key': ''
                },
        }):
            self.assertNotEqual(
                'IP ERR',
                PaymentProcessor.online('0.0.0.0', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))
            self.assertNotEqual(
                'IP ERR',
                PaymentProcessor.online('1.1.1.1', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))
            self.assertNotEqual(
                'IP ERR',
                PaymentProcessor.online('1.2.3.4', None, None, None, None,
                                        None, None, None, None, None, None,
                                        None))
예제 #11
0
    def post(self, request, *args, **kwargs):
        try:
            id = request.POST['id']
            tr_id = request.POST['tr_id']
            tr_date = request.POST['tr_date']
            tr_crc = request.POST['tr_crc']
            tr_amount = request.POST['tr_amount']
            tr_paid = request.POST['tr_paid']
            tr_desc = request.POST['tr_desc']
            tr_status = request.POST['tr_status']
            tr_error = request.POST['tr_error']
            tr_email = request.POST['tr_email']
            md5sum = request.POST['md5sum']
        except KeyError:
            logger.warning('Got malformed POST request: %s' % str(request.POST))
            return HttpResponse('MALFORMED')

        status = PaymentProcessor.online(request.META['REMOTE_ADDR'], id, tr_id, tr_date, tr_crc, tr_amount, tr_paid, tr_desc, tr_status, tr_error, tr_email, md5sum)
        return HttpResponse(status)
예제 #12
0
    def post(self, request, *args, **kwargs):
        try:
            id = request.POST['id']
            tr_id = request.POST['tr_id']
            tr_date = request.POST['tr_date']
            tr_crc = request.POST['tr_crc']
            tr_amount = request.POST['tr_amount']
            tr_paid = request.POST['tr_paid']
            tr_desc = request.POST['tr_desc']
            tr_status = request.POST['tr_status']
            tr_error = request.POST['tr_error']
            tr_email = request.POST['tr_email']
            md5sum = request.POST['md5sum']
        except KeyError:
            logger.warning('Got malformed POST request: %s' % str(request.POST))
            return HttpResponse('MALFORMED')

        status = PaymentProcessor.online(request.META['REMOTE_ADDR'], id, tr_id, tr_date, tr_crc, tr_amount, tr_paid, tr_desc, tr_status, tr_error, tr_email, md5sum)
        return HttpResponse(status)
예제 #13
0
    def test_online_not_allowed_ip(self):
        self.assertEqual('IP ERR',
                         PaymentProcessor.online('0.0.0.0', None, None, None, None, None,
                                                                             None, None, None, None, None, None))

        #Tests allowing IP given in settings
        with self.settings(GETPAID_BACKENDS_SETTINGS={
            'getpaid.backends.transferuj': {'allowed_ip': ('1.1.1.1', '1.2.3.4'), 'key': ''},
        }):
            self.assertEqual('IP ERR',
                             PaymentProcessor.online('0.0.0.0', None, None, None, None,
                                                                                 None, None, None, None, None, None,
                                                                                 None))
            self.assertNotEqual('IP ERR',
                                PaymentProcessor.online('1.1.1.1', None, None, None, None,
                                                                                    None, None, None, None, None, None,
                                                                                    None))
            self.assertNotEqual('IP ERR',
                                PaymentProcessor.online('1.2.3.4', None, None, None, None,
                                                                                    None, None, None, None, None, None,
                                                                                    None))

        #Tests allowing all IP
        with self.settings(GETPAID_BACKENDS_SETTINGS={
            'getpaid.backends.transferuj': {'allowed_ip': [], 'key': ''},
        }):
            self.assertNotEqual('IP ERR',
                                PaymentProcessor.online('0.0.0.0', None, None, None, None,
                                                                                    None, None, None, None, None, None,
                                                                                    None))
            self.assertNotEqual('IP ERR',
                                PaymentProcessor.online('1.1.1.1', None, None, None, None,
                                                                                    None, None, None, None, None, None,
                                                                                    None))
            self.assertNotEqual('IP ERR',
                                PaymentProcessor.online('1.2.3.4', None, None, None, None,
                                                                                    None, None, None, None, None, None,
                                                                                    None))
예제 #14
0
 def setUp(self):
     self.payment = PaymentFactory()
     self.pp = PaymentProcessor(self.payment)
예제 #15
0
class PaymentProcessorGetGatewayUrl(TestCase):

    def setUp(self):
        self.payment = PaymentFactory()
        self.pp = PaymentProcessor(self.payment)

    def update_settings(self, data):
        settings = get_backend_settings('getpaid.backends.transferuj')
        settings.update(data)

        return {'getpaid.backends.transferuj': settings}

    def get_geteway_data(self):
        settings = self.update_settings({'method': 'post'})
        with self.settings(GETPAID_BACKENDS_SETTINGS=settings):
            url, method, data = self.pp.get_gateway_url(Mock())

        return data

    def test_return_types(self):
        settings = self.update_settings({'method': 'get'})

        with self.settings(GETPAID_BACKENDS_SETTINGS=settings):
            url, method, data = self.pp.get_gateway_url(Mock())

        self.assertEquals(method, 'GET')
        self.assertEquals(data, {})
        self.assertIsInstance(url, str)

    def test_default_config_url_transaction_params(self):
        data = self.get_geteway_data()

        crc = data['crc']
        kwota = data['kwota']
        id_ = data['id']
        key = PaymentProcessor.get_backend_setting('key')
        md5sum = six.text_type(id_) + kwota + six.text_type(crc) + key
        md5sum = md5sum.encode('utf-8')

        self.assertEquals(crc, self.payment.pk)
        self.assertEquals(kwota, six.text_type(self.payment.amount))
        self.assertEquals(id_, 1234)
        self.assertEquals(data['md5sum'], md5(md5sum).hexdigest())

    def test_default_config_url_data_params(self):
        data = self.get_geteway_data()

        self.assertEquals(data['email'], '*****@*****.**')
        self.assertIn('opis', data)
        self.assertNotIn('jezyk', data)

    def get_urls(self):
        return {
            'wyn_url': reverse('getpaid:transferuj:online'),
            'pow_url_blad': reverse('getpaid:transferuj:failure',
                                    kwargs={'pk': self.payment.pk}),
            'pow_url': reverse('getpaid:transferuj:success',
                               kwargs={'pk': self.payment.pk}),
        }

    def test_default_config_url_urls(self):
        data = self.get_geteway_data()

        for key, u in self.get_urls().items():
            str_ = data[key]
            self.assertTrue(str_.endswith(u),
                            "{} not end with {}".format(str_, u))

    @patch.object(transferuj, 'get_domain')
    def test_domains_http(self, patch_domain):
        patch_domain.return_value = 'test'

        data = self.get_geteway_data()

        for key in self.get_urls():
            self.assertTrue(data[key].startswith('http://test/'))

    @patch.object(transferuj, 'get_domain')
    def test_domains_https(self, patch_domain):
        patch_domain.return_value = 'test'
        settings = self.update_settings({
            'force_ssl_online': True,
            'force_ssl_return': True,
        })

        with self.settings(GETPAID_BACKENDS_SETTINGS=settings):
            data = self.get_geteway_data()

        for key in self.get_urls():
            str_ = data[key]
            self.assertTrue(str_.startswith('https://test/'),
                            "{} not start with https://test/".format(str_))

    def test_post(self):
        settings = self.update_settings({'method': 'post'})

        with self.settings(GETPAID_BACKENDS_SETTINGS=settings):
            url, method, data = self.pp.get_gateway_url(Mock())

        self.assertEquals(method, 'POST')
        self.assertNotEquals(data, {})

    def test_bad_type(self):
        settings = self.update_settings({'method': 'update'})

        with self.settings(GETPAID_BACKENDS_SETTINGS=settings):
            with self.assertRaises(ImproperlyConfigured):
                self.pp.get_gateway_url(Mock())