Example #1
0
def auth_transaction(user, campaign_id, link_id, amount, payment_method_id, references):
    if payment_method_id not in PayID.get_ids(user._id):
        return None, "invalid payment method"

    profile_id = CustomerID.get_id(user._id)
    invoice = "T%dC%d" % (link_id, campaign_id)

    references["pay_id"] = payment_method_id

    try:
        authorize_response = api.create_authorization_hold(profile_id, payment_method_id, amount, invoice, request.ip)
        AuthorizeTransaction._new(authorize_response, **references)
    except api.DuplicateTransactionError as e:
        transaction_id = e.transaction_id
        try:
            bid = Bid.one(transaction_id, campaign=campaign_id)
        except NotFound:
            bid = Bid._new(transaction_id, user, payment_method_id, link_id, amount, campaign_id)
        g.log.error("%s on campaign %d" % (e.message, campaign_id))
        return transaction_id, None
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return None, e.message

    bid = Bid._new(authorize_response.trans_id, user, payment_method_id, link_id, amount, campaign_id)
    return authorize_response.trans_id, None
Example #2
0
def auth_transaction(amount, user, payment_method_id, link, campaign_id):
    if payment_method_id not in PayID.get_ids(user._id):
        return None, "invalid payment method"

    profile_id = CustomerID.get_id(user._id)
    invoice = "T%dC%d" % (link._id, campaign_id)

    try:
        transaction_id = api.create_authorization_hold(profile_id,
                                                       payment_method_id,
                                                       amount, invoice,
                                                       request.ip)
    except api.DuplicateTransactionError as e:
        transaction_id = e.transaction_id
        try:
            bid = Bid.one(transaction_id, campaign=campaign_id)
        except NotFound:
            bid = Bid._new(transaction_id, user, payment_method_id, link._id,
                           amount, campaign_id)
        g.log.error("%s on campaign %d" % (e.message, campaign_id))
        return transaction_id, None
    except api.TransactionError as e:
        return None, e.message

    bid = Bid._new(transaction_id, user, payment_method_id, link._id, amount,
                   campaign_id)
    return transaction_id, None
Example #3
0
def auth_transaction(user, campaign_id, link_id, amount, payment_method_id,
                     references):
    if payment_method_id not in PayID.get_ids(user._id):
        return None, "invalid payment method"

    profile_id = CustomerID.get_id(user._id)
    invoice = "T%dC%d" % (link_id, campaign_id)

    references['pay_id'] = payment_method_id

    try:
        authorize_response = api.create_authorization_hold(
            profile_id, payment_method_id, amount, invoice, request.ip)
        AuthorizeTransaction._new(authorize_response, **references)
    except api.DuplicateTransactionError as e:
        transaction_id = e.transaction_id
        try:
            bid = Bid.one(transaction_id, campaign=campaign_id)
        except NotFound:
            bid = Bid._new(transaction_id, user, payment_method_id, link_id,
                           amount, campaign_id)
        g.log.error("%s on campaign %d" % (e.message, campaign_id))
        return transaction_id, None
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return None, e.message

    bid = Bid._new(authorize_response.trans_id, user, payment_method_id,
                   link_id, amount, campaign_id)
    return authorize_response.trans_id, None
Example #4
0
def auth_transaction(amount, user, payment_method_id, link, campaign_id):
    if payment_method_id not in PayID.get_ids(user._id):
        return None, "invalid payment method"

    profile_id = CustomerID.get_id(user._id)
    invoice = "T%dC%d" % (link._id, campaign_id)

    try:
        transaction_id = api.create_authorization_hold(
            profile_id, payment_method_id, amount, invoice, request.ip)
    except api.DuplicateTransactionError as e:
        transaction_id = e.transaction_id
        try:
            bid = Bid.one(transaction_id, campaign=campaign_id)
        except NotFound:
            bid = Bid._new(transaction_id, user, payment_method_id, link._id,
                           amount, campaign_id)
        g.log.error("%s on campaign %d" % (e.message, campaign_id))
        return transaction_id, None
    except api.TransactionError as e:
        return None, e.message

    bid = Bid._new(transaction_id, user, payment_method_id, link._id, amount,
                   campaign_id)
    return transaction_id, None
Example #5
0
def refund_transaction(amount, user, trans_id, test=None):
    bid = Bid.one(trans_id)
    if trans_id > 0:
        # create a new bid to identify the refund
        success, res = _make_transaction(ProfileTransRefund, amount, user, bid.pay_id, trans_id=trans_id, test=test)
        if success:
            bid = Bid._new(res.trans_id, user, -1, bid.thing_id, amount)
            bid.refund()
            return bool(res.trans_id)
Example #6
0
def auth_freebie_transaction(amount, user, link, campaign_id):
    transaction_id = -link._id

    try:
        # attempt to update existing freebie transaction
        bid = Bid.one(thing_id=link._id, transaction=transaction_id, campaign=campaign_id)
    except NotFound:
        bid = Bid._new(transaction_id, user, FREEBIE_PAYMENT_METHOD_ID, link._id, amount, campaign_id)
    else:
        bid.bid = amount
        bid.auth()

    return transaction_id, ""
Example #7
0
def auth_transaction(amount, user, payid, thing, test = None):
    # use negative pay_ids to identify freebies, coupons, or anything
    # that doesn't require a CC.
    if payid < 0:
        trans_id = -thing._id
        # update previous freebie transactions if we can
        try:
            bid = Bid.one(thing_id = thing._id,
                          pay_id = payid)
            bid.bid = amount
            bid.auth()
        except NotFound:
            bid = Bid._new(trans_id, user, payid, thing._id, amount)
        return bid.transaction

    elif int(payid) in PayID.get_ids(user):
        order = Order(invoiceNumber = "%dT%d" % (user._id, thing._id))
        success, res = _make_transaction(ProfileTransAuthOnly,
                                         amount, user, payid,
                                         order = order, test = test)
        if success:
            Bid._new(res.trans_id, user, payid, thing._id, amount)
            return res.trans_id
        elif res is None:
            # we are in test mode!
            return auth_transaction(amount, user, -1, thing, test = test)
        # duplicate transaction, which is bad, but not horrible.  Log
        # the transaction id, creating a new bid if necessary. 
        elif (res.response_code, res.response_reason_code) == (3,11):
            try:
                Bid.one(res.trans_id)
            except NotFound:
                Bid._new(res.trans_id, user, payid, thing._id, amount)
            return res.trans_id
Example #8
0
def auth_freebie_transaction(amount, user, link, campaign_id):
    transaction_id = -link._id

    try:
        # attempt to update existing freebie transaction
        bid = Bid.one(thing_id=link._id,
                      transaction=transaction_id,
                      campaign=campaign_id)
    except NotFound:
        bid = Bid._new(transaction_id, user, FREEBIE_PAYMENT_METHOD_ID,
                       link._id, amount, campaign_id)
    else:
        bid.bid = amount
        bid.auth()

    return transaction_id, ""
Example #9
0
def charge_transaction(user, transaction_id, campaign_id):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if bid.is_charged():
        return True, None

    if transaction_id < 0:
        bid.charged()
        return True, None

    profile_id = CustomerID.get_id(user._id)

    try:
        api.capture_authorization_hold(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=bid.bid,
            transaction_id=transaction_id,
        )
    except api.AuthorizationHoldNotFound:
        # authorization hold has expired
        bid.void()
        return False, api.TRANSACTION_NOT_FOUND
    except api.TransactionError as e:
        return False, e.message

    bid.charged()
    return True, None
Example #10
0
def void_transaction(user, trans_id, test=None):
    bid = Bid.one(trans_id)
    bid.void()
    # verify that the transaction has the correct ownership
    if bid.account_id == user._id and trans_id > 0:
        res = _make_transaction(ProfileTransVoid, None, user, None, trans_id=trans_id, test=test)
        return res
Example #11
0
def charge_transaction(user, campaign_id, link_id, transaction_id, references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if bid.is_charged():
        return True, None

    if transaction_id < 0:
        bid.charged()
        return True, None

    references['pay_id'] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.capture_authorization_hold(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=bid.bid,
            transaction_id=transaction_id,
        )
        AuthorizeTransaction._new(authorize_response, **references)
    except api.AuthorizationHoldNotFound:
        # authorization hold has expired
        bid.void()
        return False, api.TRANSACTION_NOT_FOUND
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.charged()
    return True, None
Example #12
0
def charge_transaction(user, campaign_id, link_id, transaction_id, references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if bid.is_charged():
        return True, None

    if transaction_id < 0:
        bid.charged()
        return True, None

    references["pay_id"] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.capture_authorization_hold(
            customer_id=profile_id, payment_profile_id=bid.pay_id, amount=bid.bid, transaction_id=transaction_id
        )
        AuthorizeTransaction._new(authorize_response, **references)
    except api.AuthorizationHoldNotFound:
        # authorization hold has expired
        bid.void()
        return False, api.TRANSACTION_NOT_FOUND
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.charged()
    return True, None
Example #13
0
def refund_transaction(user, campaign_id, link_id, amount, transaction_id,
                       references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if transaction_id < 0:
        bid.refund(amount)
        return True, None

    references['pay_id'] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.refund_transaction(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=amount,
            transaction_id=transaction_id,
        )
        AuthorizeTransaction._new(authorize_response, **references)
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.refund(amount)
    return True, None
Example #14
0
def charge_transaction(user, transaction_id, campaign_id):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if bid.is_charged():
        return True, None

    if transaction_id < 0:
        bid.charged()
        return True, None

    profile_id = CustomerID.get_id(user._id)

    try:
        api.capture_authorization_hold(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=bid.bid,
            transaction_id=transaction_id,
        )
    except api.AuthorizationHoldNotFound:
        # authorization hold has expired
        bid.void()
        return False, api.TRANSACTION_NOT_FOUND
    except api.TransactionError as e:
        return False, e.message

    bid.charged()
    return True, None
Example #15
0
def void_transaction(user, trans_id, campaign, test=None):
    bid =  Bid.one(transaction=trans_id, campaign=campaign)
    bid.void()
    if trans_id > 0:
        res = _make_transaction(ProfileTransVoid,
                                None, user, None, trans_id=trans_id,
                                test=test)
        return res
Example #16
0
def charge_transaction(user, trans_id, test=None):
    bid = Bid.one(trans_id)
    bid.charged()
    if trans_id < 0:
        # freebies are automatically approved
        return True
    elif bid.account_id == user._id:
        res = _make_transaction(ProfileTransPriorAuthCapture, bid.bid, user, bid.pay_id, trans_id=trans_id, test=test)
        return bool(res)
Example #17
0
def get_transactions(*trans_keys):
    from sqlalchemy import and_, or_

    if trans_keys:
        f = or_(*[and_(Bid.transaction == trans_id, Bid.campaign == camp) for trans_id, camp in trans_keys])
        q = Bid.query()
        q = q.filter(f)
        return dict(((p.transaction, p.campaign), p) for p in q)
    return {}
Example #18
0
def get_transactions(*trans_keys):
    from sqlalchemy import and_, or_

    if trans_keys:
        f = or_(*[and_(Bid.transaction == trans_id, Bid.campaign == camp)
                  for trans_id, camp in trans_keys])
        q = Bid.query()
        q = q.filter(f)
        return dict(((p.transaction, p.campaign), p) for p in q)
    return {}
Example #19
0
def is_charged_transaction(trans_id, campaign):
    if not trans_id: return False # trans_id == 0 means no bid
    try:
        bid = Bid.one(transaction=trans_id, campaign=campaign)
    except NotFound:
        return False
    except MultipleResultsFound:
        g.log.error('Multiple bids for trans_id %s' % trans_id)
        return False

    return bid.is_charged() or bid.is_refund()
Example #20
0
def auth_transaction(amount, user, payid, thing, campaign, test=None):
    # use negative pay_ids to identify freebies, coupons, or anything
    # that doesn't require a CC.
    if payid < 0:
        trans_id = -thing._id
        # update previous freebie transactions if we can
        try:
            bid = Bid.one(thing_id=thing._id,
                          transaction=trans_id,
                          campaign=campaign)
            bid.bid = amount
            bid.auth()
        except NotFound:
            bid = Bid._new(trans_id, user, payid, thing._id, amount, campaign)
        return bid.transaction, ""

    elif int(payid) in PayID.get_ids(user):
        order = Order(invoiceNumber="T%dC%d" % (thing._id, campaign))
        success, res = _make_transaction(ProfileTransAuthOnly,
                                         amount,
                                         user,
                                         payid,
                                         order=order,
                                         test=test)
        if success:
            if test:
                return auth_transaction(amount,
                                        user,
                                        -1,
                                        thing,
                                        campaign,
                                        test=test)
            else:
                Bid._new(res.trans_id, user, payid, thing._id, amount,
                         campaign)
                return res.trans_id, ""
        elif res is None:
            # we are in test mode!
            return auth_transaction(amount, user, -1, thing, test=test)
        # duplicate transaction, which is bad, but not horrible.  Log
        # the transaction id, creating a new bid if necessary.
        elif res.trans_id and (res.response_code,
                               res.response_reason_code) == (3, 11):
            g.log.error("Authorize.net duplicate trans %d on campaign %d" %
                        (res.trans_id, campaign))
            try:
                Bid.one(res.trans_id, campaign=campaign)
            except NotFound:
                Bid._new(res.trans_id, user, payid, thing._id, amount,
                         campaign)
        return res.trans_id, res.response_reason_text
Example #21
0
def charge_transaction(user, trans_id, campaign, test=None):
    bid = Bid.one(transaction=trans_id, campaign=campaign)
    if not bid.is_charged():
        bid.charged()
        if trans_id < 0:
            # freebies are automatically authorized
            return True
        elif bid.account_id == user._id:
            res = _make_transaction(
                ProfileTransPriorAuthCapture, bid.bid, user, bid.pay_id, trans_id=trans_id, test=test
            )
            return bool(res)

    # already charged
    return True
Example #22
0
def void_transaction(user, transaction_id, campaign_id):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)

    if transaction_id <= 0:
        bid.void()
        return True, None

    profile_id = CustomerID.get_id(user._id)
    try:
        api.void_authorization_hold(profile_id, bid.pay_id, transaction_id)
    except api.TransactionError as e:
        return False, e.message

    bid.void()
    return True, None
Example #23
0
def void_transaction(user, transaction_id, campaign_id):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)

    if transaction_id <= 0:
        bid.void()
        return True, None

    profile_id = CustomerID.get_id(user._id)
    try:
        api.void_authorization_hold(profile_id, bid.pay_id, transaction_id)
    except api.TransactionError as e:
        return False, e.message

    bid.void()
    return True, None
Example #24
0
def charge_transaction(user, trans_id, campaign, test=None):
    bid =  Bid.one(transaction=trans_id, campaign=campaign)
    if not bid.is_charged():
        bid.charged()
        if trans_id < 0:
            # freebies are automatically authorized
            return True
        elif bid.account_id == user._id:
            res = _make_transaction(ProfileTransPriorAuthCapture,
                                    bid.bid, user,
                                    bid.pay_id, trans_id=trans_id,
                                    test=test)
            return bool(res)

    # already charged
    return True
Example #25
0
def refund_transaction(user, trans_id, campaign_id, amount, test=None):
    # refund will only work if charge has settled
    bid =  Bid.one(transaction=trans_id, campaign=campaign_id)
    if trans_id < 0:
        bid.refund(amount)
        return True
    else:
        success, res = _make_transaction(ProfileTransRefund, amount, user,
                                         bid.pay_id, trans_id=trans_id,
                                         test=test)
        if success:
            bid.refund(amount)
        elif success == False:
            msg = "Refund failed, response: %r" % res
            raise AuthorizeNetException(msg)
        return True
Example #26
0
def charge_transaction(user, trans_id, campaign, test=None):
    bid =  Bid.one(transaction=trans_id, campaign=campaign)
    if bid.is_charged():
        return True

    if trans_id < 0:
        success = True
    else:
        success, res = _make_transaction(ProfileTransPriorAuthCapture,
                                         bid.bid, user,
                                         bid.pay_id, trans_id=trans_id,
                                         test=test)

    if success:
        bid.charged()
    return success
Example #27
0
def refund_transaction(user, transaction_id, campaign_id, amount):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if transaction_id < 0:
        bid.refund(amount)
        return True, None

    profile_id = CustomerID.get_id(user._id)
    try:
        api.refund_transaction(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=amount,
            transaction_id=transaction_id,
        )
    except api.TransactionError as e:
        return False, e.message

    bid.refund(amount)
    return True, None
Example #28
0
def refund_transaction(user, transaction_id, campaign_id, amount):
    bid =  Bid.one(transaction=transaction_id, campaign=campaign_id)
    if transaction_id < 0:
        bid.refund(amount)
        return True, None

    profile_id = CustomerID.get_id(user._id)
    try:
        api.refund_transaction(
            customer_id=profile_id,
            payment_profile_id=bid.pay_id,
            amount=amount,
            transaction_id=transaction_id,
        )
    except api.TransactionError as e:
        return False, e.message

    bid.refund(amount)
    return True, None
Example #29
0
def void_transaction(user, campaign_id, link_id, transaction_id, references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)

    if transaction_id <= 0:
        bid.void()
        return True, None

    references["pay_id"] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.void_authorization_hold(profile_id, bid.pay_id, transaction_id)
        AuthorizeTransaction._new(authorize_response, **references)
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.void()
    return True, None
Example #30
0
def auth_transaction(amount, user, payid, thing, campaign):
    # use negative pay_ids to identify freebies, coupons, or anything
    # that doesn't require a CC.
    if payid < 0:
        trans_id = -thing._id
        # update previous freebie transactions if we can
        try:
            bid = Bid.one(thing_id=thing._id,
                          transaction=trans_id,
                          campaign=campaign)
            bid.bid = amount
            bid.auth()
        except NotFound:
            bid = Bid._new(trans_id, user, payid, thing._id, amount, campaign)
        return bid.transaction, ""

    elif int(payid) in PayID.get_ids(user):
        order = Order(invoiceNumber="T%dC%d" % (thing._id, campaign))
        success, res = _make_transaction(
            ProfileTransAuthOnly, amount, user, payid, order=order,
            include_request_ip=True)

        if success:
            Bid._new(res.trans_id, user, payid, thing._id, amount, campaign)
            return res.trans_id, ""

        elif (res.trans_id and
              (res.response_code, res.response_reason_code) == (3, 11)):
            # duplicate transaction, which is bad, but not horrible.  Log
            # the transaction id, creating a new bid if necessary.
            g.log.error("Authorize.net duplicate trans %d on campaign %d" % 
                        (res.trans_id, campaign))
            try:
                Bid.one(res.trans_id, campaign=campaign)
            except NotFound:
                Bid._new(res.trans_id, user, payid, thing._id, amount, campaign)

        return res.trans_id, res.response_reason_text
Example #31
0
def void_transaction(user, campaign_id, link_id, transaction_id, references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)

    if transaction_id <= 0:
        bid.void()
        return True, None

    references['pay_id'] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.void_authorization_hold(
            profile_id, bid.pay_id, transaction_id)
        AuthorizeTransaction._new(authorize_response, **references)
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.void()
    return True, None
Example #32
0
def refund_transaction(user, campaign_id, link_id, amount, transaction_id, references):
    bid = Bid.one(transaction=transaction_id, campaign=campaign_id)
    if transaction_id < 0:
        bid.refund(amount)
        return True, None

    references["pay_id"] = bid.pay_id

    profile_id = CustomerID.get_id(user._id)
    try:
        authorize_response = api.refund_transaction(
            customer_id=profile_id, payment_profile_id=bid.pay_id, amount=amount, transaction_id=transaction_id
        )
        AuthorizeTransaction._new(authorize_response, **references)
    except api.TransactionError as e:
        authorize_response = e.authorize_response
        AuthorizeTransaction._new(authorize_response, **references)
        return False, e.message

    bid.refund(amount)
    return True, None
Example #33
0
def charge_transaction(user, trans_id, campaign, test=None):
    bid = Bid.one(transaction=trans_id, campaign=campaign)
    if bid.is_charged():
        return True

    if trans_id < 0:
        success = True
        response_reason_code = None
    else:
        success, res = _make_transaction(ProfileTransPriorAuthCapture,
                                         bid.bid, user,
                                         bid.pay_id, trans_id=trans_id,
                                         test=test)
        response_reason_code = res.get("response_reason_code")

    if success:
        bid.charged()
    elif response_reason_code == TRANSACTION_NOT_FOUND:
        # authorization hold has expired
        bid.void()

    return success, response_reason_code
Example #34
0
def charge_transaction(user, trans_id, campaign, test=None):
    bid = Bid.one(transaction=trans_id, campaign=campaign)
    if bid.is_charged():
        return True

    if trans_id < 0:
        success = True
        response_reason_code = None
    else:
        success, res = _make_transaction(ProfileTransPriorAuthCapture,
                                         bid.bid,
                                         user,
                                         bid.pay_id,
                                         trans_id=trans_id,
                                         test=test)
        response_reason_code = res.get("response_reason_code")

    if success:
        bid.charged()
    elif response_reason_code == TRANSACTION_NOT_FOUND:
        # authorization hold has expired
        bid.void()

    return success, response_reason_code
Example #35
0
def is_charged_transaction(trans_id, campaign):
    bid =  Bid.one(transaction = trans_id, campaign = campaign)
    return bid.is_charged()
Example #36
0
def is_charged_transaction(trans_id, campaign):
    bid = Bid.one(transaction=trans_id, campaign=campaign)
    return bid.is_charged()
Example #37
0
def is_charged_transaction(trans_id, campaign):
    if not trans_id: return False # trans_id == 0 means no bid
    bid =  Bid.one(transaction = trans_id, campaign = campaign)
    return bid.is_charged()
Example #38
0
def is_charged_transaction(trans_id, campaign):
    if not trans_id: return False # trans_id == 0 means no bid
    bid =  Bid.one(transaction = trans_id, campaign = campaign)
    return bid.is_charged()