예제 #1
0
def GenericPayment(request):
	if request.method == 'POST':
		form = PaymentForm(request.POST)
		if form.is_valid():
			# account secret key 
			stripe.api_key = settings.STRIPE_SECRET_KEY
			
			# get the payment details from the form
			token = request.POST.get('stripeToken')
			charge_amt = int(request.POST.get('amount'))
			pay_name = request.POST.get('name')
			pay_email = request.POST.get('email')
			comment  = request.POST.get('comment')

			# create the charge on Stripe's servers - this will charge the user's card
			charge_descr = "payment from %s (%s)." % (pay_name, pay_email)
			if comment:
				charge_descr += " comment: %s" % comment
			charge = stripe.Charge.create(
					amount=charge_amt*100, # convert dollars to cents
					currency="usd",
					card=token,
					description= charge_descr
			)

			# TODO error handling if charge does not succeed
			return HttpResponseRedirect("/thanks")
	else:
		form = PaymentForm()		
	return render(request, "payment.html", {'form': form, 
		'stripe_publishable_key': settings.STRIPE_PUBLISHABLE_KEY})
예제 #2
0
파일: views.py 프로젝트: camilo1rp/paysy
 def post(self, request):
     form = PaymentForm(request.POST)
     if form.is_valid():
         cd = form.cleaned_data
         print(cd)
         payload = {"id_pago": cd['id_pago'],
                    "pay_gateway": cd['pay_gateway'].id,
                    "tax": cd['tax'],
                    "total": cd['total'],
                    "config_name": cd['config_name'].name,
                    "pay_details": cd['pay_details'],
                    "customer": {
                        "email": cd['email'],
                        "document_type": cd['document_type'],
                        "document": cd['document'],
                        "name": cd['name'],
                        "surname": cd['surname'],
                        "phone": cd['phone']
                    }
                    }
         serialized_json = JSONRenderer().render(payload)
         root = request.META['HTTP_HOST']
         if root == '127.0.0.1:8000':
             url = f"http://{root}/payment/start/"
         else:
             url = f"https://{root}/payment/start/"
         headers = {'Content-Type': 'application/json; charset=utf-8'}
         response = requests.post(url,
                                  headers=headers,
                                  data=serialized_json)
         data = response.json()
         pay_url = data.pop('str_url', False)
         if pay_url:
             return HttpResponseRedirect(pay_url)
         return render(request,
                       "tests/zona_start.html",
                       {'form': form, 'error':data})
예제 #3
0
	def post(self,*args, **kwargs):
		form = PaymentForm(self.request.POST or None)
		try:
			order = Order.objects.filter(user=self.request.user,ordered=False)[0]			
			if form.is_valid():
				order.ordered=True
				payment = PaymentModel.objects.create(user = self.request.user,
				 stripe_charge_id=generateChargeID(),
				 amount=order.get_total()
				 )
				token = form.cleaned_data.get('stripeToken')
				print(token)
				payment.save()
				order.payment=payment
				order.items.quantity=1
				order.save()
				messages.SUCCESS
				return redirect('core:home')
			else:
				messages.warning(self.request,"Fill fields correctly!")
				return redirect('core:payment')
		except ObjectDoesNotExist:
			messages.info(self.request,"You dont have active order!")
			return redirect('core:home')
예제 #4
0
파일: views.py 프로젝트: sachintomacc/ecomm
    def post(self, *args, **kwargs):
        print(' in patment view POST')
        form = PaymentForm(self.request.POST)
        print(self.request.POST)
        order = Order.objects.get(user=self.request.user, ordered=False)

        if form.is_valid():
            print('FORM VALID')
            stripeToken = form.cleaned_data.get('stripeToken')
            save_card_info = form.cleaned_data.get('save_card_info')
            use_default_card = form.cleaned_data.get('use_default_card')
            amount = int(order.get_total() * 100)
            print('stripeToken = ', stripeToken)
            print('save_card_info = ', save_card_info)
            print('use_default_card = ', use_default_card)

            userprofile = UserProfile.objects.get(user=self.request.user)

            if save_card_info:
                if not userprofile.stripe_customer_id:
                    customer = stripe.Customer.create(
                        source=stripeToken,
                        email=userprofile.user.email,
                    )
                    userprofile.stripe_customer_id = customer['id']
                    userprofile.one_click_purchasing = True
                else:
                    stripe.Customer.create_source(
                        userprofile.stripe_customer_id, source=stripeToken)

        try:
            if use_default_card:
                charge = stripe.Charge.create(
                    amount=amount,
                    currency="usd",
                    customer=userprofile.stripe_customer_id)
            else:
                charge = stripe.Charge.create(amount=amount,
                                              currency="usd",
                                              source=stripeToken)

            payment = Payment()
            payment.stripe_charge_id = charge['id']
            payment.user = self.request.user
            payment.amount = order.get_total()
            payment.save()

            order_items = order.items.all()
            order_items.update(ordered=True)
            for item in order_items:
                item.save()

            order.ordered = True
            order.ref_code = create_ref_code()

            # for order_item in order.items.all():

            order.payment = payment
            order.save()
            messages.warning(self.request, 'order was successful')

            return redirect('/')

        except stripe.error.CardError as e:
            messages.error(self.request, 'CardError')

        except stripe.error.RateLimitError as e:
            messages.error(self.request, 'RateLimitError')
        except stripe.error.InvalidRequestError as e:
            messages.error(self.request, 'InvalidRequestError')
        except stripe.error.AuthenticationError as e:
            messages.error(self.request, 'AuthenticationError')
        except stripe.error.APIConnectionError as e:
            messages.error(self.request, 'APIConnectionError')
        except stripe.error.StripeError as e:
            messages.error(self.request, 'StripeError')
        except Exception as e:
            messages.error(self.request, e.error)

        return redirect('/')
예제 #5
0
 def test_valid_form(self):
     data = {"stripeToken": "ciao", "save": "true", "use_default": "false"}
     form = PaymentForm(data=data)
     self.assertTrue(form.is_valid())