diff options
author | Patryk Zawadzki <patrys@room-303.com> | 2014-06-10 14:12:01 +0200 |
---|---|---|
committer | Patryk Zawadzki <patrys@room-303.com> | 2014-06-10 14:12:01 +0200 |
commit | 1d476a9ab6d810ee8e55acb96a0032cdca974bcf (patch) | |
tree | 68319ed32fa68d7963e1453693bfd95383ee3e2e | |
parent | d48af9c8e9741a9514cd2523fb4dc7f460dfb5b5 (diff) | |
download | django-payments-taler-1d476a9ab6d810ee8e55acb96a0032cdca974bcf.tar.gz django-payments-taler-1d476a9ab6d810ee8e55acb96a0032cdca974bcf.tar.bz2 django-payments-taler-1d476a9ab6d810ee8e55acb96a0032cdca974bcf.zip |
Accept spaces and dashes in card numbers, recognize Maestro
-rw-r--r-- | payments/__init__.py | 13 | ||||
-rw-r--r-- | payments/fields.py | 1 | ||||
-rw-r--r-- | payments/models.py | 2 | ||||
-rw-r--r-- | payments/widgets.py | 9 |
4 files changed, 17 insertions, 8 deletions
diff --git a/payments/__init__.py b/payments/__init__.py index 67531e5..e9ee12a 100644 --- a/payments/__init__.py +++ b/payments/__init__.py @@ -134,12 +134,13 @@ def get_payment_model(): CARD_TYPES = [ - ('^4[0-9]{12}(?:[0-9]{3})?$', 'visa', 'VISA'), - ('^5[1-5][0-9]{14}$', 'mastercard', 'MasterCard'), - ('^6(?:011|5[0-9]{2})[0-9]{12}$', 'discover', 'Discover'), - ('^3[47][0-9]{13}$', 'amex', 'American Express'), - ('^(?:(?:2131|1800|35\d{3})\d{11})$', 'jcb', 'JCB'), - ('^(?:3(?:0[0-5]|[68][0-9])[0-9]{11})$', 'diners', 'Diners Club')] + (r'^4[0-9]{12}(?:[0-9]{3})?$', 'visa', 'VISA'), + (r'^5[1-5][0-9]{14}$', 'mastercard', 'MasterCard'), + (r'^6(?:011|5[0-9]{2})[0-9]{12}$', 'discover', 'Discover'), + (r'^3[47][0-9]{13}$', 'amex', 'American Express'), + (r'^(?:(?:2131|1800|35\d{3})\d{11})$', 'jcb', 'JCB'), + (r'^(?:3(?:0[0-5]|[68][0-9])[0-9]{11})$', 'diners', 'Diners Club'), + (r'^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$', 'maestro', 'Maestro')] def get_credit_card_issuer(number): diff --git a/payments/fields.py b/payments/fields.py index 1552853..9a704ea 100644 --- a/payments/fields.py +++ b/payments/fields.py @@ -24,6 +24,7 @@ class CreditCardNumberField(forms.CharField): super(CreditCardNumberField, self).__init__(*args, **kwargs) def validate(self, value): + value = re.sub('[\s-]+', '', value) card_type, issuer_name = get_credit_card_issuer(value) if value in validators.EMPTY_VALUES and self.required: raise forms.ValidationError(self.error_messages['required']) diff --git a/payments/models.py b/payments/models.py index b582984..81eb120 100644 --- a/payments/models.py +++ b/payments/models.py @@ -51,6 +51,8 @@ class BasePayment(models.Model): billing_postcode = models.CharField(max_length=256, blank=True) billing_country_code = models.CharField(max_length=2, blank=True) billing_country_area = models.CharField(max_length=256, blank=True) + billing_email = models.EmailField(blank=True) + customer_ip_address = models.IPAddressField(blank=True) extra_data = models.TextField(blank=True, default='') token = models.CharField(max_length=36, blank=True, default='') captured_amount = models.DecimalField( diff --git a/payments/widgets.py b/payments/widgets.py index 7b80ae2..e135675 100644 --- a/payments/widgets.py +++ b/payments/widgets.py @@ -9,8 +9,13 @@ class CreditCardNumberWidget(TextInput): def render(self, name, value, attrs=None): if value: value = re.sub('[\s-]', '', value) - value = ' '.join([value[i: i + 4] - for i in range(0, len(value), 4)]) + if len(value) == 16: + value = ' '.join([value[0:4], value[4:8], + value[8:12], value[12:16]]) + elif len(value) == 15: + value = ' '.join([value[0:4], value[4:10], value[10:15]]) + elif len(value) == 14: + value = ' '.join([value[0:4], value[4:10], value[10:14]]) return super(CreditCardNumberWidget, self).render(name, value, attrs) |