def get_obfuscated_kwargs(self): """ Get a dictionary containing the obfuscated bank card details used in the eway form. The card number is **not** stored in plain text but is obfuscated in the same way eWay obfuscates their card numers (first 6 and last 4 digits visible). """ card_number = self.data['EWAY_CARDNUMBER'] return { 'card_type': bankcard_type(card_number), 'name': self.data['EWAY_CARDNAME'], 'number': self.get_obfuscated_card_number(card_number), 'expiry_date': "%s/%s" % ( self.data['EWAY_CARDEXPIRYMONTH'], self.data['EWAY_CARDEXPIRYYEAR'], ), }
def get_obfuscated_kwargs(self): """ Get a dictionary containing the obfuscated bank card details used in the eway form. The card number is **not** stored in plain text but is obfuscated in the same way eWay obfuscates their card numers (first 6 and last 4 digits visible). """ card_number = self.data.get('EWAY_CARDNUMBER', '') return { 'card_type': bankcard_type(card_number) or '', 'name': self.data.get('EWAY_CARDNAME', ''), 'number': self.get_obfuscated_card_number(card_number), 'expiry_date': "%s/%s" % ( self.data.get('EWAY_CARDEXPIRYMONTH', ''), self.data.get('EWAY_CARDEXPIRYYEAR', ''), ), }
def _card_type(bankcard_number): """ Convert card-number into appropriate card type that Sagepay will recognise. """ # Oscar provides a function to do the card-type recognition but we need to # map into the values that Sagepay accepts. oscar_type = bankcards.bankcard_type(bankcard_number) mapping = { bankcards.VISA: 'VISA', bankcards.VISA_ELECTRON: 'UKE', bankcards.MASTERCARD: 'MC', bankcards.MAESTRO: 'MAESTRO', bankcards.AMEX: 'AMEX', bankcards.DINERS_CLUB: 'DC', bankcards.LASER: 'LASER', bankcards.JCB: 'JCB', } return mapping.get(oscar_type, '')
def clean(self, value): """ Check if given CC number is valid and one of the card types we accept """ non_decimal = re.compile(r'\D+') value = non_decimal.sub('', value.strip()) if value and not bankcards.luhn(value): raise forms.ValidationError( _("Please enter a valid credit card number.")) if hasattr(self, 'accepted_cards'): card_type = bankcards.bankcard_type(value) if card_type not in self.accepted_cards: raise forms.ValidationError( _("%s cards are not accepted." % card_type)) return super(BankcardNumberField, self).clean(value)
def test_bankcard_type_sniffing(self): for expected_bankcard_type, numbers in self.fixture_data.items(): for number in numbers: sniffed_bankcard_type = bankcards.bankcard_type(number) self.assertEqual(expected_bankcard_type, sniffed_bankcard_type)
def compare(number, type): nose.tools.eq_(bankcards.bankcard_type(number), type)
def compare(number, type): assert bankcards.bankcard_type(number) == type