63 lines
2.7 KiB
Python
63 lines
2.7 KiB
Python
from django.shortcuts import render_to_response
|
|
from django.conf import settings
|
|
from django.core.urlresolvers import reverse
|
|
from django.template import RequestContext
|
|
from django.http import HttpResponseRedirect, HttpResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.db.models import F
|
|
from notification import models as notification
|
|
import urllib2
|
|
import json
|
|
import forms
|
|
import models
|
|
import signals
|
|
|
|
def index(request):
|
|
if request.method == 'POST':
|
|
form = forms.DonationForm(request.POST)
|
|
else:
|
|
form = forms.DonationForm()
|
|
if form.is_valid():
|
|
data = {}
|
|
order = {}
|
|
item = {}
|
|
item['Description'] = "Caminus Donation"
|
|
item['Name'] = "Caminus Donation"
|
|
item['Price'] = str(form.cleaned_data['quantity'])
|
|
item['Quantity'] = 1
|
|
order['OrderItems'] = [item,]
|
|
order['Test'] = True
|
|
order['Tax'] = 0.00
|
|
order['Total'] = str(form.cleaned_data['quantity'])
|
|
order['DestinationId'] = settings.DWOLLA_API_ID
|
|
data['PurchaseOrder'] = order
|
|
data['Key'] = settings.DWOLLA_API_KEY
|
|
data['Secret'] = settings.DWOLLA_API_SECRET
|
|
data['Callback'] = 'http://camin.us%s'%reverse('donate.views.dwollaCallback')
|
|
donation = models.Donation.objects.create(quantity=form.cleaned_data['quantity'], user=request.user)
|
|
order['OrderId'] = donation.id
|
|
data['Redirect'] = 'http://camin.us%s'%reverse('donate.views.thanks', donation.id)
|
|
req = urllib2.Request("https://www.dwolla.com/payment/request", data=json.dumps(data), headers={'Content-Type': 'application/json'})
|
|
response = json.load(urllib2.urlopen(req))
|
|
return HttpResponseRedirect("https://www.dwolla.com/payment/checkout/%s"%(response['CheckoutId']))
|
|
else:
|
|
return render_to_response('donate/index.html', {'form': form}, context_instance = RequestContext(request))
|
|
|
|
@csrf_exempt
|
|
def dwollaCallback(request):
|
|
if request.method =='POST':
|
|
data = json.loads(request.raw_post_data)
|
|
donation = models.Donation.objects.get(id=data['OrderId'])
|
|
donation.status = models.Donation.STATUS_PAID
|
|
donation.transactionId = data['TransactionId']
|
|
donation.save()
|
|
acct = donation.user.minecraftprofile.currencyaccount
|
|
acct.balance = F('balance')+(donation.quantity*2000)
|
|
acct.save()
|
|
notification.send_now([donation.user], "donation_paid", {"donation":donation, "credit":donation.quantity*2000})
|
|
return HttpResponse(status=204)
|
|
|
|
def thanks(request, donation):
|
|
donationObj = models.Donation.objects.get(id=donation)
|
|
return render_to_response('donate/thanks.html', {'donation': donationObj}, context_instance = RequestContext(request))
|