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", {})
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)
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)
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)
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')
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')
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', {})
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', {}
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', {})
def get_postlink_url(self, request, **kw): return build_absolute_uri('epay:postlink', **kw)
def get_postlink_url(self, request, **kw): return build_absolute_uri('epay:postlink', **kw)
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', {}