def get_paypal_settings(self, request, obj, amount): ct = ContentType.objects.get_for_model(obj) hash_args = [ct.app_label, ct.model, unicode(obj.id), unicode(request.user.id)] hash = payment_hash(*hash_args) custom = ':'.join(hash_args) site = Site.objects.get_current() return { 'notify_url': 'http://%s%s' % (site.domain, reverse('paypal-ipn')), 'cancel_return': 'http://%s%s' % (site.domain, reverse('%s_%s_payment_cancelled' % (self.admin_site.url_prefix, self.slug), kwargs={'object_id': obj.id})), 'return_url': 'http://%s%s' % (site.domain, reverse('%s_%s_payment_complete' % (self.admin_site.url_prefix, self.slug), kwargs={'object_id': obj.id})), 'item_number': hash, 'custom': custom, 'item_name': unicode(obj), 'amount': amount }
def payment_complete_view(self, request, object_id): try: hash_args = request.POST['custom'].split(':') hash = payment_hash(*hash_args) if hash != request.POST['item_number']: messages.add_message(request, messages.ERROR, 'The security data on this post was tampered with, but your payment may have been processed. Check back!') else: try: Payment.objects.get(ipn__txn_id=request.POST['txn_id']) except Payment.DoesNotExist: messages.add_message(request, messages.SUCCESS, "Paypal has processed your payment, but it hasn't quite reached our system yet. Check back!") else: messages.add_message(request, messages.SUCCESS, "We've received your payment. Thanks and we'll see you there!") except: pass return HttpResponseRedirect(reverse("%s_%s_payment" % (self.admin_site.url_prefix, self.slug), kwargs={'object_id': object_id}))