Skip to content
This repository has been archived by the owner on Feb 10, 2022. It is now read-only.

Commit

Permalink
add get credit card type helper
Browse files Browse the repository at this point in the history
  • Loading branch information
victor-baumann committed Apr 22, 2016
1 parent fd73a0b commit f60e962
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
23 changes: 22 additions & 1 deletion payu/helpers.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,32 @@
import re
import string
import random

CREDIT_CARD_PATTERNS = {
'VISA': re.compile(r'^4[0-9]{12}(?:[0-9]{3})?$'),
'MASTERCARD': re.compile(r'^5[1-5][0-9]{14}$'),
'AMEX': re.compile(r'^3[47][0-9]{13}$'),
'DINERS': re.compile(r'^3(?:0[0-5]|[68][0-9])[0-9]{11}$'),
'DISCOVER': re.compile(r'^6(?:011|5[0-9]{2})[0-9]{12}$')
}

def clean_cc_number(number):
return number.replace(" ", "")

def card_type_from_number(number):
if not number:
return None
number = clean_cc_number(number)
for type, regexp in CREDIT_CARD_PATTERNS.items():
if regexp.match(str(number)):
return type
return None

def generate_reference_code(id=None, prefix='payment_test_'):
if id is None:
s = string.ascii_lowercase + string.digits
id = ''.join(random.sample(s,10))
return prefix + id
return prefix + str(id)


def mask_credit_card_number(number):
Expand Down
4 changes: 3 additions & 1 deletion payu/payu.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from hashlib import md5
from functools import partialmethod
import requests
from payu.helpers import clean_cc_number

class ImproperlyConfigured(Exception):
pass
Expand Down Expand Up @@ -45,7 +46,7 @@ def build_request_base(self, cmd):
def build_signature(self, order, sep='~', algorithm='md5'):
self.validate_signature(order)
ref = order.get('referenceCode')
value = order.get('value')
value = str(order.get('value'))
currency = order.get('currency')
msg = sep.join([self.config['API_KEY'],
self.config['MERCHANT_ID'],
Expand All @@ -64,6 +65,7 @@ def post(self, request_data, url='PAYMENT_URL'):

def tokenize(self, cc_data):
self.validate_cc(cc_data)
cc_data['number'] = clean_cc_number(cc_data['number'])
cmd = 'CREATE_TOKEN'
request_data = self.build_request_base(cmd)
request_data['creditCardToken'] = cc_data
Expand Down

0 comments on commit f60e962

Please sign in to comment.