Example #1
0
    def post(self, *args, **kwargs):
        ''' what happens when payment view is posted '''
        token = self.request.POST.get('stripeToken')
        order = Order.objects.get(user=self.request.user, ordered=False)

        amount = int(order.get_final_price() * 100)

        try:
            charge = stripe.Charge.create(
                amount=amount,  # cents
                currency="usd",
                source=token)

            # create the payment
            payment = Payment()
            payment.stripe_charge_id = charge['id']
            payment.user = self.request.user
            payment.amount = int(order.get_final_price())
            payment.save()

            # assign the payment to the order
            order_items = order.items.all()
            order_items.update(ordered=True)
            for item in order_items:
                item.save()

            order.ordered = True
            order.payment = payment
            order.save()

            messages.success(self.request, "Your order was successful!")
            return redirect("home")

        except stripe.error.CardError as e:
            body = e.json_body
Example #2
0
    def post(self, *args, **kwargs):
        order = Order.objects.get(user=self.request.user, ordered=False)
        form = PaymentForm(self.request.POST)
        # token = stripe.Token.create(card={ "number": "4242424242424242", "exp_month": 8, "exp_year": 2021, "cvc": "314",})
        amount = int(order.get_total() * 100)
        try:
            charge = stripe.Charge.create(
                        amount=amount,  # cents
                        currency="usd",
                        source="tok_visa",
                    )
            payment = Payment()
            payment.stripe_charge_id = charge['id']
            payment.user = self.request.user
            payment.amount = order.get_total()
            payment.save()

            order.ordered = True
            order.payment = payment
            order.save()
            messages.success(self.request, "Your Order Was Successful")
            return redirect("shop:shop")

        except stripe.error.CardError as e:
          # Since it's a decline, stripe.error.CardError will be caught
            body = e.json_body
            err = body.get('error', {})
            messages.warning(self.request, f"{err.get('message')}")
            return redirect("shop:shop")
        except stripe.error.RateLimitError as e:
          # Too many requests made to the API too quickly
          messages.warning(self.request, "RateLimitError")
          return redirect("shop:shop")
        except stripe.error.InvalidRequestError as e:
          # Invalid parameters were supplied to Stripe's API
          messages.warning(self.request, "InvalidRequestError")
          return redirect("shop:shop")
        except stripe.error.AuthenticationError as e:
          # Authentication with Stripe's API failed
          # (maybe you changed API keys recently)
          messages.warning(self.request, "AuthenticationError")
          return redirect("shop:shop")
        except stripe.error.APIConnectionError as e:
          # Network communication with Stripe failed
          messages.warning(self.request, "APIConnectionError")
          return redirect("shop:shop")
        except stripe.error.StripeError as e:
          # Display a very generic error to the user, and maybe send
          # yourself an email
          messages.warning(self.request, "StripeError")
          return redirect("shop:shop")
        except Exception as e:
          # Something else happened, completely unrelated to Stripe
          messages.warning(self.request, "Something Went Wrong Please Try Again")
          return redirect("shop:shop")
Example #3
0
    def post(self, *args, **kwargs):
        order = Order.objects.get(user=self.request.user, ordered=False)
        form = PaymentForm(self.request.POST)
        userprofile = UserProfile.objects.get(user=self.request.user)
        if form.is_valid():
            token = form.cleaned_data.get('stripeToken')
            save = form.cleaned_data.get('save')
            use_default = form.cleaned_data.get('use_default')

            if save:
                if userprofile.stripe_customer_id != '' and userprofile.stripe_customer_id is not None:
                    customer = stripe.Customer.retrieve(
                        userprofile.stripe_customer_id)
                    customer.sources.create(source=token)
                else:
                    customer = stripe.Customer.create(
                        email=self.request.user.email, )
                    customer.sources.create(source=token)
                    userprofile.stripe_customer_id = customer['id']
                    userprofile.one_click_purchasing = True
                    userprofile.save()
            amount = int(order.get_total() * 100)

            try:

                if use_default or save:
                    charge = stripe.Charge.create(
                        amount=amount,
                        currency='usd',
                        customer=userprofile.stripe_customer_id)
                else:
                    charge = stripe.Charge.create(amount=amount,
                                                  currency='usd',
                                                  customer=userprofile.token)

                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.payment = payment
                order.ref_code = create_ref_code()
                order.save()

                messages.success(self.request, 'Your order was successful')
                return redirect('/')

            except stripe.error.CardError as e:
                body = e.json_body
                err = body.get('error', {})
                messages.warning(self.request, f"{err.get('message')}")
                return redirect("/")

            except stripe.error.RateLimitError as e:
                # Too many requests made to the API too quickly
                messages.warning(self.request, "Rate limit error")
                return redirect("/")

            except stripe.error.InvalidRequestError as e:
                # Invalid parameters were supplied to Stripe's API
                print(e)
                messages.warning(self.request, "Invalid parameters")
                return redirect("/")

            except stripe.error.AuthenticationError as e:
                # Authentication with Stripe's API failed
                # (maybe you changed API keys recently)
                messages.warning(self.request, "Not authenticated")
                return redirect("/")

            except stripe.error.APIConnectionError as e:
                # Network communication with Stripe failed
                messages.warning(self.request, "Network error")
                return redirect("/")

            except stripe.error.StripeError as e:
                # Display a very generic error to the user, and maybe send
                # yourself an email
                messages.warning(
                    self.request,
                    "Something went wrong. You were not charged. Please try again."
                )
                return redirect("/")

            except Exception as e:
                # send an email to ourselves
                messages.warning(
                    self.request,
                    "A serious error occurred. We have been notifed.")
                return redirect("/")

        messages.warning(self.request, "Invalid data received")
        return redirect("/payment/stripe/")