def form_valid(self, form): stripe_token = form.cleaned_data.get('stripe_token') email = form.cleaned_data.get('stripe_email') amount = int(form.cleaned_data.get('amount')) if int(form.cleaned_data.get('amount_choice')) == -1 else int(form.cleaned_data.get('amount_choice')) x_rate = ExchangeRate.objects.last() if not x_rate: raise 'Please set up ExchangeRate' else: x_rate = x_rate.rate usd_amount = amount * x_rate try: stripe.api_key = STRIPE_API_KEY charge = stripe.Charge.create( amount=int(usd_amount * 100), currency='usd', card=stripe_token, description=email) if charge.paid and int(usd_amount * 100) == charge.amount: UserProfile.objects.filter(user=self.request.user).update(balance=F('balance')+amount) purchase = CurrencyPurchase( user=self.request.user, amount=amount, usd_amount=usd_amount) purchase.save() messages.success(self.request, 'Purchase of %d coins completed successfully' % (amount,)) except stripe.CardError: messages.error(self.request, "Your chard could not be charged. Please check the number and/or contact your credit card") except: messages.error(self.request, "Something has happened wrong. Please contact site administrator.") return super(BalanceView, self).form_valid(form)
def buy(request): if request.method == 'POST': stripe_token = request.POST['stripeToken'] email = request.POST['stripeEmail'] print stripe_token, email amount = float(request.POST['up_amount']) # product = Product.query.get(product_id) x_rate = 2.0 # TODO: get x-rate from db usd_amount = amount * x_rate try: # charge = stripe.Charge.create( # amount=int(usd_amount * 100), # currency='usd', # card=stripe_token, # description=email) profile = UserProfile.objects.get(user=request.user) profile.balance += amount profile.save() purchase = CurrencyPurchase( user=request.user, amount=amount, usd_amount=usd_amount) purchase.save() except stripe.CardError, e: return HttpResponse("""<html><body><h1>Card Declined</h1><p> Your chard could not be charged. Please check the number and/or contact your credit card company. </p></body></html>""") # print charge return HttpResponse( "Puchase of {} coins completed successfully" .format(amount))