Created
May 27, 2009 19:05
-
-
Save adamcik/118833 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#encoding: utf-8 | |
import urllib | |
from django.db import connection | |
from django.conf import settings | |
from django.http import HttpResponse | |
from django.shortcuts import render_to_response | |
def generate_ticket_pdf_url(purchase_id): | |
tickets = get_ticket_references(purchase_id) | |
return 'https://billig.samfundet.no/pdf?%s' % urllib.urlencode( | |
[("ticket%s" % i+1 , t) for i, t in enumerate(tickets)]) | |
def generate_paynet_url(purchase_id): | |
return 'https://www.paynet.no/term193/terminal.php?%s' % urllib.urlencode({ | |
'ttype': 'sale', | |
'id': settings.PAYNET_SHOP_ID, | |
'subid': settings.PAYNET_SUB_SHOP_ID, | |
'currency': 'NOK', | |
'desc': 'Billettsalg', | |
'utref': purchase_id, | |
'amount': get_purchase_price(purchase_id), | |
'PMD': ','.join(get_ticket_references(purchase_id)), | |
}) | |
def get_ticket_references(purchase_id): | |
cursor = connection.cursor() | |
cursor.execute('''SELECT billig.ticket || billig.generate_hmac(ticket) AS ticket_ref | |
FROM billig.ticket WHERE purchase = %s AND refunded IS NULL''', [purchase_id]) | |
for row in cursor.fetchall(): | |
yield row[0] | |
def get_purchase_price(purchase_id): | |
cursor = connection.cursor() | |
cursor.execute('SELECT billig.purchase_price(%s) AS price', [purchase_id]) | |
return cursor.fetchone()[0] | |
def get_payment_status(ticket_id): | |
cursor = connection.cursor() | |
cursor.execute('''SELECT 1 FROM billig.purchase NATURAL JOIN billig.ticket | |
WHERE ticket = %s AND paid IS NOT NULL LIMIT 1''', [ticket_id]) | |
return cursor.rowcount > 0 | |
def get_tickets_from_query(querydict): | |
pmd = querydict.get('PMD', '') | |
return pmd.split(',') | |
def valid_tickets(tickets): | |
for ticket in tickets: | |
if not ticket.isdigit(): | |
reutrn False | |
return True | |
def wait_for_payment(request): | |
tickets = get_tickets_from_query(request.GET) | |
if not tickets: | |
return HttpResponse('No PMD given', status_code=409) | |
elif not valid_tickets(tickets): | |
return HttpResponse('Invalid PMD') | |
else: | |
return render_to_response('wait-for-payment', { | |
'pmd': tickets[0], | |
}) | |
def check_payment(request): | |
ticket = request.GET.get('ticket', None) | |
if ticket is None: | |
return HttpRespone('...') | |
elif get_payment_status(ticket): | |
return HttpResponse("true") | |
else: | |
return HttpResponse("false") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment