コード例 #1
0
ファイル: __init__.py プロジェクト: itmation/django-getpaid
    def get_gateway_url(self, request):
        """
        @see http://tech.epay.dk/en/payment-window-parameters
        @see http://tech.epay.dk/en/specification
        @see http://tech.epay.dk/en/payment-window-how-to-get-started

        `accepturl` - payment accepted for processing.
        `cancelurl` - user closed window before the payment is completed.
        `callbackurl` - is called instantly from the ePay server when
                        the payment is completed.
        """
        merchantnumber = unicode(self.get_backend_setting("merchantnumber", ""))
        if not merchantnumber:
            raise ImproperlyConfigured("epay.dk requires merchantnumber")

        # According to docs order ID should be a-Z 0-9. Max. 9 characters.
        # We use payment id here as we will have access to order from it.
        payment_id = unicode(self.payment.id)

        currency = unicode(PaymentProcessor.get_number_for_currency(self.payment.currency))

        # timeout in minutes
        timeout = unicode(self.get_backend_setting("timeout", "3"))
        instantcallback = unicode(self.get_backend_setting("instantcallback", "0"))

        params = OrderedDict(
            [
                (u"merchantnumber", merchantnumber),
                (u"orderid", payment_id),
                (u"currency", currency),
                (u"amount", PaymentProcessor.format_amount(self.payment.amount)),
                (u"windowstate", u"3"),  # 3 = Full screen
                (u"mobile", u"1"),  # 1 = autodetect
                (u"timeout", timeout),
                (u"instantcallback", instantcallback),
            ]
        )

        user_data = {u"email": None, u"lang": None}

        signals.user_data_query.send(sender=None, order=self.payment.order, user_data=user_data)

        prefered = user_data["lang"] or "en"
        params["language"] = self._get_language_id(request, prefered=prefered)

        url_data = {"domain": get_domain(request=request), "scheme": request.scheme}

        params["accepturl"] = build_absolute_uri("getpaid-epaydk-success", **url_data)

        if not PaymentProcessor.get_backend_setting("callback_secret_path", ""):
            params["callbackurl"] = build_absolute_uri("getpaid-epaydk-online", **url_data)

        params["cancelurl"] = build_absolute_uri("getpaid-epaydk-failure", **url_data)
        params["hash"] = PaymentProcessor.compute_hash(params)

        url = u"{}?{}".format(self.BACKEND_GATEWAY_BASE_URL, urlencode(params))
        return (url, "GET", {})
コード例 #2
0
    def test_build_absolute_url_pass_domain(self, patch_domain, patch_reverse):
        patch_reverse.return_value = '/path'

        url = utils.build_absolute_uri('test', domain='domain2')

        self.assertEquals(url, 'https://domain2/path')
        self.assertFalse(patch_domain.called)
コード例 #3
0
    def test_build_absolute_url_args_kwargs(self, patch_domain, patch_reverse):
        patch_reverse.return_value = '/path'
        patch_domain.return_value = 'domain'
        args = ('asd', 'qwe')
        kwargs = {'pk', 1}

        url = utils.build_absolute_uri('test',
                                       reverse_args=args,
                                       reverse_kwargs=kwargs)

        self.assertEquals(url, 'https://domain/path')
        patch_reverse.assert_called_once_with('test', args=args, kwargs=kwargs)
コード例 #4
0
ファイル: test_utils.py プロジェクト: anih/django-getpaid
    def test_build_absolute_url_args_kwargs(self, patch_domain, patch_reverse):
        patch_reverse.return_value = '/path'
        patch_domain.return_value = 'domain'
        args = ('asd', 'qwe')
        kwargs = {'pk', 1}

        url = utils.build_absolute_uri(
            'test',
            reverse_args=args,
            reverse_kwargs=kwargs)

        self.assertEquals(url, 'https://domain/path')
        patch_reverse.assert_called_once_with('test', args=args, kwargs=kwargs)
コード例 #5
0
    def test_build_absolute_url_scheme(self, patch_reverse):
        patch_reverse.return_value = 'path'

        url = utils.build_absolute_uri('test', domain='domain', scheme='ftp')

        self.assertEquals(url, 'ftp://domain/path')
コード例 #6
0
    def test_build_absolute_url_add_slash(self, patch_reverse):
        patch_reverse.return_value = 'path'

        url = utils.build_absolute_uri('test', domain='domain3')

        self.assertEquals(url, 'https://domain3/path')
コード例 #7
0
ファイル: __init__.py プロジェクト: dcondeurra/django-getpaid
    def get_gateway_url(self, request):
        """
        @see http://tech.epay.dk/en/payment-window-parameters
        @see http://tech.epay.dk/en/specification
        @see http://tech.epay.dk/en/payment-window-how-to-get-started

        `accepturl` - payment accepted for processing.
        `cancelurl` - user closed window before the payment is completed.
        `callbackurl` - is called instantly from the ePay server when
                        the payment is completed.
        """
        merchantnumber = unicode(
            self.get_backend_setting('merchantnumber', ''))
        if not merchantnumber:
            raise ImproperlyConfigured("epay.dk requires merchantnumber")

        # According to docs order ID should be a-Z 0-9. Max. 9 characters.
        # We use payment id here as we will have access to order from it.
        payment_id = unicode(self.payment.id)

        currency = unicode(PaymentProcessor.get_number_for_currency(
                           self.payment.currency))

        # timeout in minutes
        timeout = unicode(self.get_backend_setting('timeout', '3'))
        instantcallback = unicode(self.get_backend_setting('instantcallback',
                                                           '0'))

        params = OrderedDict([
            (u'merchantnumber', merchantnumber),
            (u'orderid', payment_id),
            (u'currency', currency),
            (u'amount', PaymentProcessor.format_amount(self.payment.amount)),
            (u'windowstate', u'3'),  # 3 = Full screen
            (u'mobile', u'1'),  # 1 = autodetect
            (u'timeout', timeout),
            (u'instantcallback', instantcallback),
        ])

        user_data = {
            u'email': None,
            u'lang': None,
        }

        signals.user_data_query.send(
            sender=None, order=self.payment.order, user_data=user_data)

        prefered = user_data['lang'] or 'en'
        params['language'] = self._get_language_id(request, prefered=prefered)

        url_data = {
            'domain': get_domain(request=request),
            'scheme': request.scheme
        }

        params['accepturl'] = build_absolute_uri('getpaid:epaydk:success',
                                                 **url_data)

        if not PaymentProcessor.get_backend_setting('callback_secret_path',
                                                    ''):
            params['callbackurl'] = build_absolute_uri(
                'getpaid:epaydk:online', **url_data
            )

        params['cancelurl'] = build_absolute_uri('getpaid:epaydk:failure',
                                                 **url_data)
        params['hash'] = PaymentProcessor.compute_hash(params)

        url = u"{}?{}".format(self.BACKEND_GATEWAY_BASE_URL, urlencode(params))
        return (url, 'GET', {})
コード例 #8
0
ファイル: __init__.py プロジェクト: mionch/django-getpaid
    def get_gateway_url(self, request):
        """
        Routes a payment to Gateway, should return URL for redirection.

        """

        self.payment.external_id = self.generate_payment_id()
        params = {
            'ClientId': six.text_type(PaymentProcessor.get_backend_setting('client_id')),
            'Password': six.text_type(PaymentProcessor.get_backend_setting('password')),
            'OrderId': self.payment.external_id,
            'Total': self.payment.amount,
            'Currency': EServiceCurrency.get_by_name(self.payment.currency)
        }

        token = self.get_token(params)
        params.pop('Password')

        if token is None:
            # TODO Handle broken payment
            logger.error('No token could be retrieved for the payment')

        params['Token'] = six.text_type(token)

        user_data = {
            'lang': None,
        }

        signals.user_data_query.send(sender=None, order=self.payment.order, user_data=user_data)

        if user_data['lang'] and user_data['lang'].lower() in PaymentProcessor._ACCEPTED_LANGS:
            params['lang'] = user_data['lang'].lower()
        elif PaymentProcessor.get_backend_setting('lang', False) and \
                PaymentProcessor.get_backend_setting('lang').lower() in PaymentProcessor._ACCEPTED_LANGS:
            params['lang'] = six.text_type(PaymentProcessor.get_backend_setting('lang').lower())

        url_data = {
            'domain': get_domain(request=request),
            'scheme': request.scheme
        }
        params['okUrl'] = build_absolute_uri('getpaid-eservice-success',  **url_data)
        params['failUrl'] = build_absolute_uri('getpaid-eservice-failure', **url_data)
        params['pendingUrl'] = build_absolute_uri('getpaid-eservice-pending', **url_data)

        params['StoreType'] = PaymentProcessor.get_backend_setting('store_type')
        params['TranType'] = u'Auth'

        params['ConsumerName'] = user_data.get('first_name', u'')
        params['ConsumerSurname'] = user_data.get('last_name', u'')

        params['ShipToName'] = user_data.get('shipping_country', u'')
        params['ShipToPostalCode'] = user_data.get('shipping_zip_code', u'')
        params['ShipToStreet1'] = user_data.get('shipping_address', u'')
        params['ShipToCity'] = user_data.get('shipping_city', u'')
        params['ShipToCountry'] = u'PL'

        params['BillToName'] = user_data.get('name') or u'{} {}'.format(user_data.get('first_name', u''),
                                                                        user_data.get('last_name', u''))
        params['BillToPostalCode'] = user_data.get('adress_zip_code', u'')
        params['BillToStreet1'] = user_data.get('adress', u'')
        params['BillToCity'] = user_data.get('address_city', u'')
        params['BillToCountry'] = user_data.get('address_country', u'')

        logger.info(u'New payment using GET: %s' % params)
        for key in params.keys():
            params[key] = six.text_type(params[key]).encode('utf-8')
        return self.gateway_url + 'fim/eservicegate?' + urlencode(params), 'GET', {}
コード例 #9
0
    def get_gateway_url(self, request):
        """
        @see http://tech.epay.dk/en/payment-window-parameters
        @see http://tech.epay.dk/en/specification
        @see http://tech.epay.dk/en/payment-window-how-to-get-started

        `accepturl` - payment accepted for processing.
        `cancelurl` - user closed window before the payment is completed.
        `callbackurl` - is called instantly from the ePay server when
                        the payment is completed.
        """
        merchantnumber = unicode(self.get_backend_setting(
            'merchantnumber', ''))
        if not merchantnumber:
            raise ImproperlyConfigured("epay.dk requires merchantnumber")

        # According to docs order ID should be a-Z 0-9. Max. 9 characters.
        # We use payment id here as we will have access to order from it.
        payment_id = unicode(self.payment.id)

        currency = unicode(
            PaymentProcessor.get_number_for_currency(self.payment.currency))

        # timeout in minutes
        timeout = unicode(self.get_backend_setting('timeout', '3'))
        instantcallback = unicode(
            self.get_backend_setting('instantcallback', '0'))

        params = OrderedDict([
            (u'merchantnumber', merchantnumber),
            (u'orderid', payment_id),
            (u'currency', currency),
            (u'amount', PaymentProcessor.format_amount(self.payment.amount)),
            (u'windowstate', u'3'),  # 3 = Full screen
            (u'mobile', u'1'),  # 1 = autodetect
            (u'timeout', timeout),
            (u'instantcallback', instantcallback),
        ])

        user_data = {
            u'email': None,
            u'lang': None,
        }

        signals.user_data_query.send(sender=None,
                                     order=self.payment.order,
                                     user_data=user_data)

        prefered = user_data['lang'] or 'en'
        params['language'] = self._get_language_id(request, prefered=prefered)

        url_data = {
            'domain': get_domain(request=request),
            'scheme': request.scheme
        }

        params['accepturl'] = build_absolute_uri('getpaid-epaydk-success',
                                                 **url_data)

        if not PaymentProcessor.get_backend_setting('callback_secret_path',
                                                    ''):
            params['callbackurl'] = build_absolute_uri('getpaid-epaydk-online',
                                                       **url_data)

        params['cancelurl'] = build_absolute_uri('getpaid-epaydk-failure',
                                                 **url_data)
        params['hash'] = PaymentProcessor.compute_hash(params)

        url = u"{}?{}".format(self.BACKEND_GATEWAY_BASE_URL, urlencode(params))
        return (url, 'GET', {})
コード例 #10
0
 def get_postlink_url(self, request, **kw):
     return build_absolute_uri('epay:postlink', **kw)
コード例 #11
0
 def get_postlink_url(self, request, **kw):
     return build_absolute_uri('epay:postlink', **kw)
コード例 #12
0
    def get_gateway_url(self, request):
        """
        Routes a payment to Gateway, should return URL for redirection.

        """

        self.payment.external_id = self.generate_payment_id()
        params = {
            'ClientId':
            six.text_type(PaymentProcessor.get_backend_setting('client_id')),
            'Password':
            six.text_type(PaymentProcessor.get_backend_setting('password')),
            'OrderId':
            self.payment.external_id,
            'Total':
            self.payment.amount,
            'Currency':
            EServiceCurrency.get_by_name(self.payment.currency)
        }

        token = self.get_token(params)
        params.pop('Password')

        if token is None:
            # TODO Handle broken payment
            logger.error('No token could be retrieved for the payment')

        params['Token'] = six.text_type(token)

        user_data = {
            'lang': None,
        }

        signals.user_data_query.send(sender=None,
                                     order=self.payment.order,
                                     user_data=user_data)

        if user_data['lang'] and user_data['lang'].lower(
        ) in PaymentProcessor._ACCEPTED_LANGS:
            params['lang'] = user_data['lang'].lower()
        elif PaymentProcessor.get_backend_setting('lang', False) and \
                PaymentProcessor.get_backend_setting('lang').lower() in PaymentProcessor._ACCEPTED_LANGS:
            params['lang'] = six.text_type(
                PaymentProcessor.get_backend_setting('lang').lower())

        url_data = {
            'domain': get_domain(request=request),
            'scheme': request.scheme
        }
        params['okUrl'] = build_absolute_uri('getpaid-eservice-success',
                                             **url_data)
        params['failUrl'] = build_absolute_uri('getpaid-eservice-failure',
                                               **url_data)
        params['pendingUrl'] = build_absolute_uri('getpaid-eservice-pending',
                                                  **url_data)

        params['StoreType'] = PaymentProcessor.get_backend_setting(
            'store_type')
        params['TranType'] = u'Auth'

        params['ConsumerName'] = user_data.get('first_name', u'')
        params['ConsumerSurname'] = user_data.get('last_name', u'')

        params['ShipToName'] = user_data.get('shipping_country', u'')
        params['ShipToPostalCode'] = user_data.get('shipping_zip_code', u'')
        params['ShipToStreet1'] = user_data.get('shipping_address', u'')
        params['ShipToCity'] = user_data.get('shipping_city', u'')
        params['ShipToCountry'] = u'PL'

        params['BillToName'] = user_data.get('name') or u'{} {}'.format(
            user_data.get('first_name', u''), user_data.get('last_name', u''))
        params['BillToPostalCode'] = user_data.get('adress_zip_code', u'')
        params['BillToStreet1'] = user_data.get('adress', u'')
        params['BillToCity'] = user_data.get('address_city', u'')
        params['BillToCountry'] = user_data.get('address_country', u'')

        logger.info(u'New payment using GET: %s' % params)
        for key in params.keys():
            params[key] = six.text_type(params[key]).encode('utf-8')
        return self.gateway_url + 'fim/eservicegate?' + urlencode(
            params), 'GET', {}