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
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))
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))