def check_cc_validity():
    payload = request.forms
    cc = CreditCard(**payload)
    logger.info(
        'Checking credit card **** **** **** {last_four_digits} validity.'.
        format(last_four_digits=cc['cc_number'][-4:]))
    if cc.is_valid():
        logger.info('Valid credit card.')
        response.status = http.client.OK
        return
    logger.info('Invalid credit card.')
    response.status = http.client.PAYMENT_REQUIRED

    return 'Invalid credit card'
Beispiel #2
0
def pay(line):
    """Logic new payment"""
    msg = 0
    if len(line) > 4:
        actor = User.get_by_name(line[1])
        target = User.get_by_name(line[2])
        amount = line[3]
        note = ' '.join(line[4:])
        actor_card = CreditCard.get_by_user(actor)
        if actor_card:  # actor has a card
            if actor and target:  #both existed
                if actor != target:  #not paying self
                    amount = clean_amount(amount)
                    if amount:  #valid amount
                        t = Transaction(actor, target, amount, note)
                        t.save()
                    else:
                        msg = ERROR_MSG['INVLIAD_AMOUNT']
                else:
                    msg = ERROR_MSG['PAY_SELF']
            else:
                msg = ERROR_MSG['U_NOT_EXISTED']
        else:
            msg = ERROR_MSG['U_HAS_NO_CARD']

    else:
        msg = ERROR_MSG['INVALID_ARS']

    return msg
Beispiel #3
0
def credit_cards():
    data = request.get_json()

    card_info = data.get('encrypted_payment_form', None)

    if not card_info:
        print("Empty Payment Information or Invalid Data Format")
        return jsonify(status='fail',message='Empty Payment Information')

    card = CreditCard(card_info=card_info)
    try:
        card.save()
    except ValidationError as e:
        print(e)
        return jsonify(status='fail',message=str(e))
    return jsonify(status='success', token=card.token)
def process_payment():
    payload = request.forms
    amount = payload.pop('amount')
    cc = CreditCard(**payload)
    logger.info(
        'Processing payment with card **** **** **** {last_four_digits}. Charging {amount}$.'
        .format(last_four_digits=cc['cc_number'][-4:], amount=amount))
    if cc.funds_available(amount):
        logger.info('Payment approved.')
        response.status = http.client.OK
        return 'Successfully payed {amount}$ with card **** **** **** {last_four_digits}.'.format(
            last_four_digits=cc['cc_number'][-4:], amount=amount)
    logger.error('Payment denied. Not enough money.')
    response.status = http.client.PAYMENT_REQUIRED

    return 'Not enough funds. Please try again with a different credit card!'
Beispiel #5
0
    def test_should_have_creditcard_as_addressable(self):
        """
        Prueba que una direccion pueda ser asociada
        a una tarjeta de credito
        """

        credit_card = CreditCard(number="1111111111")
        credit_card.save()

        address = Address()
        address.street1 = "Cra 7 # 6-19"
        address.addressable_object = credit_card
        address.save()

        address_from_db = Address.objects.get(id=address.id)
        self.assertEqual(address_from_db.addressable_type.name, 'credit card')
    def test_should_have_creditcard_as_addressable(self):
        """
        Prueba que una direccion pueda ser asociada
        a una tarjeta de credito
        """

        credit_card = CreditCard(number="1111111111")
        credit_card.save()

        address = Address()
        address.street1 = "Cra 7 # 6-19"
        address.addressable_object = credit_card 
        address.save()

        address_from_db = Address.objects.get(id=address.id)
        self.assertEqual(address_from_db.addressable_type.name, 'credit card')
Beispiel #7
0
def add_card(line):
    """Logic add a card"""
    msg = 0
    if len(line) == 3:
        user_name = line[1]
        card_number = line[2]
        user = User.get_by_name(user_name)
        card1 = CreditCard.get_by_user(user)  #already have a card?
        if not card1:
            card2 = CreditCard.get_by_number(card_number)  #fraud card?
            if not card2:
                if user:
                    if clean_card_number(card_number):
                        card = CreditCard(user, card_number)
                        card.save()
                    else:
                        msg = ERROR_MSG['INVALID_CARD']
                else:
                    msg = ERROR_MSG['U_NOT_EXISTED']
            else:
                msg = ERROR_MSG['FRAUD_CARD']
        else:
            msg = ERROR_MSG['U_HAS_CARD']
    else:
        msg = ERROR_MSG['INVALID_ARS']
    return msg
Beispiel #8
0
 def save(self, instance=None):
     data = self.data
     data['user_id'] = instance.id
     credit_card = CreditCard.query.filter(
         CreditCard.user_id == instance.id,
         CreditCard.is_active == True).first()
     if credit_card:
         data['stripe_customer_id'] = credit_card.stripe_customer_id
         update_card(data)
         del data['cvv']
         db.session.query(CreditCard).filter(
             CreditCard.user_id == instance.id,
             CreditCard.is_active == True).update(data)
     else:
         add_card(data)
         del data['cvv']
         credit_card = CreditCard(**data)
         db.session.add(credit_card)
         db.session.flush()
     db.session.commit()
     return CreditCard.query.filter(CreditCard.id == credit_card.id).first()
Beispiel #9
0
 def setUp(self):
     """ Runs before each test """
     CreditCard.init_db(server.app)
     CreditCard.collection.drop()
Beispiel #10
0
def init_db():
    """ Initialies the SQLAlchemy app """
    global app
    CreditCard.init_db(app)