Beispiel #1
0
def create_ogone_order(order_id, amount, currency, payment_method=None, language=settings.LANGUAGE):
    hash = create_hash(order_id, amount, currency, settings.PSPID, 
        settings.SHA1_PRE_SECRET)
    order = Order()
    order.order_id = order_id
    order.currency = currency
    order.amount = amount
    order.payment_method = payment_method
    order.signature = hash
    order.save()
    return order
    
Beispiel #2
0
def create_ogone_order(order_id,
                       amount,
                       currency,
                       payment_method=None,
                       language=settings.LANGUAGE):
    hash = create_hash(order_id, amount, currency, settings.PSPID,
                       settings.SHA1_PRE_SECRET)
    order = Order()
    order.order_id = order_id
    order.currency = currency
    order.amount = amount
    order.payment_method = payment_method
    order.signature = hash
    order.save()
    return order
Beispiel #3
0
def order_status_update(request):
    params = request.POST or request.GET
    if not params:
        raise InvalidParamsException("no parameters in the request")

    order_id = params.get("orderID")
    # check for Order existence
    order = Order.objects.get(order_id=order_id)
    amount = params.get("amount")
    currency = params.get("currency")
    payment_method = params.get("PM")
    acceptance = params.get("ACCEPTANCE")
    status = params.get("STATUS")
    card_number = params.get("CARDNO")
    pay_id = params.get("PAYID")
    error = params.get("NCERROR")  # this is needed when NCERROR == [u'']
    brand = params.get("BRAND")
    ip = params.get("IP")
    signature = params.get("SHASIGN")

    # check signature
    hash = create_hash(
        order_id,
        currency,
        amount,
        payment_method,
        acceptance,
        status,
        card_number,
        pay_id,
        error,
        brand,
        ogone_settings.SHA1_POST_SECRET,
    )
    if hash != signature:
        raise InvalidSignatureException("hash (%s) != signature" % hash)

    # set numeric fields to None if they are empty (i.e. == [u''])
    if not amount:
        amount = None
    if not status:
        status = None
    if not error:
        error = None

    # store order status
    order_status = OrderStatus(
        order=order,
        amount=amount,
        currency=currency,
        payment_method=payment_method,
        acceptance=acceptance,
        status=status,
        card_number=card_number,
        pay_id=pay_id,
        error=error,
        brand=brand,
        signature=signature,
    )
    order_status.save()

    # base the response on the status code (see status_codes.txt)
    # authorized and accepted
    if status:
        if status == u"9":
            # send ogone_payment_accepted signal with amount converted to Decimal and cents
            signals.ogone_payment_accepted.send(
                sender=OrderStatus, order_id=order_id, amount=Decimal(amount) * 100, currency=currency
            )
            # return the appropiate response
            return render_to_response("ogone/payment_accepted.html", context_instance=RequestContext(request))
        # cancelled
        elif status == u"1":
            return render_to_response("ogone/payment_cancelled.html", context_instance=RequestContext(request))
        elif int(status) in [
            0,
            2,
            4,
            41,
            5,
            51,
            52,
            59,
            6,
            61,
            62,
            63,
            7,
            71,
            72,
            73,
            74,
            75,
            8,
            81,
            82,
            83,
            84,
            85,
            91,
            92,
            93,
            94,
            95,
            97,
            98,
            99,
        ]:
            return render_to_response("ogone/payment_not_processed.html", context_instance=RequestContext(request))
        else:
            # mail_admins
            subject = "Error (%s IP): %s" % (
                (request.META.get("REMOTE_ADDR") in settings.INTERNAL_IPS and "internal" or "EXTERNAL"),
                request.path,
            )
            try:
                request_repr = repr(request)
            except:
                request_repr = "Request repr() unavailable"
            message = "Unknown ogone status code: %s\n\n%s" % (status, request_repr)
            mail_admins(subject, message, fail_silently=True)
            return render_to_response("ogone/payment_not_processed.html", context_instance=RequestContext(request))
    else:
        return render_to_response("ogone/payment_not_processed.html", context_instance=RequestContext(request))
Beispiel #4
0
def order_status_update(request):
    params = request.POST or request.GET
    if not params:
        raise InvalidParamsException("no parameters in the request")
        
    order_id = params.get('orderID')
    # check for Order existence
    order = Order.objects.get(order_id=order_id) 
    amount = params.get('amount')
    currency = params.get('currency')
    payment_method = params.get('PM')
    acceptance = params.get('ACCEPTANCE')
    status = params.get('STATUS')
    card_number = params.get('CARDNO')
    pay_id = params.get('PAYID')
    error = params.get('NCERROR') # this is needed when NCERROR == [u'']
    brand = params.get('BRAND')
    ip = params.get('IP')
    signature = params.get('SHASIGN')

    # check signature
    hash = create_hash(order_id, currency, amount, payment_method, acceptance,
        status, card_number, pay_id, error, brand, ogone_settings.SHA1_POST_SECRET)
    if hash != signature:
        raise InvalidSignatureException("hash (%s) != signature" % hash)
        
    # set numeric fields to None if they are empty (i.e. == [u''])
    if not amount: amount = None
    if not status: status = None
    if not error:  error = None
    
    # store order status
    order_status = OrderStatus(order=order, amount=amount, currency=currency,
        payment_method=payment_method, acceptance=acceptance, status=status,
        card_number=card_number, pay_id=pay_id, error=error, brand=brand,
        signature=signature)
    order_status.save()
    
    # base the response on the status code (see status_codes.txt)
    # authorized and accepted
    if status:
        if status == u'9': 
            # send ogone_payment_accepted signal with amount converted to Decimal and cents
            signals.ogone_payment_accepted.send(sender=OrderStatus, order_id=order_id, 
                amount=Decimal(amount) * 100, currency=currency)
            # return the appropiate response
            return render_to_response('ogone/payment_accepted.html',
                context_instance=RequestContext(request))
        # cancelled
        elif status == u'1':
            return render_to_response('ogone/payment_cancelled.html', 
                context_instance=RequestContext(request))
        elif int(status) in [0,2,4,41,5,51,52,59,6,61,62,63,7,71,72,73,74,75,
            8,81,82,83,84,85,91,92,93,94,95,97,98,99]:
            return render_to_response('ogone/payment_not_processed.html',
                context_instance=RequestContext(request))
        else:
            # mail_admins
            subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
            try:
                request_repr = repr(request)
            except:
                request_repr = "Request repr() unavailable"
            message = "Unknown ogone status code: %s\n\n%s" % (status, request_repr)
            mail_admins(subject, message, fail_silently=True)
            return render_to_response('ogone/payment_not_processed.html',
                context_instance=RequestContext(request))
    else:
        return render_to_response('ogone/payment_not_processed.html',
            context_instance=RequestContext(request))