def purchase_checkout(request): ''' return purchase checkout page and handle taking payment info / creating payment intent with stripe ''' stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': form = CheckoutForm(request.POST) cart = request.session.get('cart', {}) if form.is_valid: order = form.save(commit=False) order.original_cart = json.dumps(cart) order = form.save() for program_id, program_data in cart.items(): program = Programs.objects.get(id=program_id) checkout_line_item = CheckoutLineItem(purchase=order, program=program, quantity=program_data) checkout_line_item.save() return redirect( reverse('purchase_successful', args=[order.order_number])) else: messages.error(request, f'An error occured!') else: cart_now = cart_content(request) cost = cart_now['total'] stripe_cost = round(cost * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create(amount=stripe_cost, currency=settings.STRIPE_CURRENCY) if request.user.is_authenticated: ''' prefill form for logged in user ''' try: profile = Profile.objects.get(user=request.user) form = CheckoutForm( initial={ 'user': profile.user, 'country': profile.country, 'email': profile.user.email, 'billing_address': profile.address, 'billing_country': profile.country, }) except Profile.DoesNotExist: form = CheckoutForm() else: form = CheckoutForm() context = { 'form': form, 'profile': profile, 'cart': cart_now, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret } return render(request, 'purchase/purchase_checkout.html', context)
def payment(request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': cart = request.session.get('cart', {}) form_data = { 'full_name': request.POST['full_name'], 'email': request.POST['email'], 'phone_number': request.POST['phone_number'], 'country': request.POST['country'], 'postcode': request.POST['postcode'], 'town_or_city': request.POST['town_or_city'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], 'county': request.POST['county'], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save() for item_id, item_data in cart.items(): try: item = Product.objects.get(id=item_id) if isinstance(item_data, int): order_line_item = OrderLineItem( order=order, item=item, quantity=item_data, ) order_line_item.save() except Product.DoesNotExist: messages.error(request, ( "One of the products in your bag wasn't found in our database. " "Please call us for assistance!")) order.delete() return redirect(reverse('view_cart')) request.session['save_info'] = 'save-info' in request.POST return redirect( reverse('payment_success', args=[order.order_number])) else: messages.error( request, 'There was an error with your form. \ Please check your information.') else: cart = request.session.get('cart', {}) if not cart: messages.error(request, "Your shopping cart is empty...") return redirect(reverse('items')) current_cart = cart_content(request) total = current_cart['grand_total'] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm( initial={ 'full_name': profile.user.get_full_name(), 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'country': profile.default_country, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, 'county': profile.default_county, }) except UserProfile.DoesNotExist: order_form = OrderForm() else: order_form = OrderForm() if not stripe_public_key: messages.warning( request, 'Stripe public key is missing. \ Did you forget to set it in your environment?') template = 'payment/payment.html' context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, template, context)
def checkout(request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == "POST": cart = request.session.get('cart', {}) form_data = { "full_name": request.POST["full_name"], "email": request.POST["email"], "phone_number": request.POST["phone_number"], "country": request.POST["country"], "town_or_city": request.POST["town_or_city"], "postcode": request.POST["postcode"], "street_address1": request.POST["street_address1"], "street_address2": request.POST["street_address2"], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save(commit=False) pid = request.POST.get("client_secret").split("_secret")[0] order.stripe_pid = pid order.original_cart = json.dumps(cart) order.save() for item_id, item_data in cart.items(): try: artwork = Artwork.objects.get(id=item_id) if isinstance(item_data, int): order_line_item = OrderLineItem( order=order, artwork=artwork, quantity=item_data, ) order_line_item.save() except artwork.DoesNotExist: messages.error(request, ( "One of your products in the bag cannot be found. Call us for assistance!" )) order.delete() return redirect(reverse("view_cart")) request.session["save_info"] = "save-info" in request.POST return redirect( reverse("checkout_success", args=[order.order_number])) else: messages.error( request, "there was an error with the form. Please check your inputs.") else: cart = request.session.get('cart', {}) if not cart: messages.error(request, "There are no items in your cart") return redirect(reverse('artwork')) current_cart = cart_content(request) total = current_cart["grand_total"] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm( initial={ 'full_name': profile.user.get_full_name(), 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'country': profile.default_country, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, }) except UserProfile.DoesNotExist: order_form = OrderForm() context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, 'checkout/checkout.html', context)
def checkout(request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': cart = request.session.get('cart', {}) form_data = { 'full_name': request.POST['full_name'], 'email': request.POST['email'], 'phone_number': request.POST['phone_number'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], 'postcode': request.POST['postcode'], 'town_or_city': request.POST['town_or_city'], 'county': request.POST['county'], 'country': request.POST['country'], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save(commit=False) pid = request.POST.get('client_secret').split('_secret')[0] order.stripe_pid = pid order.original_cart = json.dumps(cart) order.save() for item_id, quantity in cart.items(): try: product = Product.objects.get(id=item_id) if isinstance(quantity, int): order_line_item = OrderLineItem( order=order, product=product, quantity=quantity, ) order_line_item.save() except Product.DoesNotExist: messages.error(request, ( "One of the products in your cart wasn't found in our database. " "Please contact us for assistance!") ) order.delete() return redirect(reverse('view_cart')) # Saves the info to the user's profile if the process worked correctly request.session['save_info'] = 'save-info' in request.POST return redirect(reverse('checkout_success', args=[order.order_number])) else: messages.error(request, 'There was an error with your form. \ Please double check the information you have provided.') else: cart = request.session.get('cart', {}) current_cart = cart_content(request) total = current_cart['grand_total'] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) # Tries to fill the form if the user has any saved information in his profile if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm(initial={ 'full_name': profile.user.get_full_name(), 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'country': profile.default_country, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, 'county': profile.default_county, }) except UserProfile.DoesNotExist: order_form = OrderForm() else: order_form = OrderForm() if not stripe_public_key: """ Used the idea from Code Institute lesson to set a reminder about the public key""" messages.warning(request, 'Stripe public key is missing. \ Forgot to set it in your environment?') template = 'checkout/checkout.html' context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, template, context)
def checkout(request): """Handle payment form POST request and set up stripe payment intent""" stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': cart = request.session.get('cart', {}) form_data = { 'full_name': request.POST['full_name'], 'email': request.POST['email'], 'phone_number': request.POST['phone_number'], 'postcode': request.POST['postcode'], 'town_or_city': request.POST['town_or_city'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save(commit=False) pid = request.POST.get('client_secret').split('_secret')[0] order.stripe_pid = pid order.original_cart = json.dumps(cart) order.save() for item_id, item_data in cart.items(): try: product = Product.objects.get(id=item_id) if isinstance(item_data, int): order_item = OrderItem( order=order, product=product, quantity=item_data, ) order_item.save() except Product.DoesNotExist: messages.error(request, ( "It seems that one of the projects you selected \ couldn't be found in our database. " "Please call us for assistance!") ) order.delete() return redirect(reverse('view_cart')) request.session['save_info'] = 'save-info' in request.POST return redirect(reverse('checkout-success', args=[order.order_number])) else: messages.error(request, 'There was an error with your form. \ Please double check your information.') else: cart = request.session.get('cart', {}) if not cart: messages.error(request, 'Your cart is empty!') return redirect(reverse('menu')) current_cart = cart_content(request) cart_total = current_cart['order_total'] stripe_total = round(cart_total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm(initial={ 'full_name': profile.user.get_full_name(), 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, }) except UserProfile.DoesNotExist: order_form = OrderForm() else: order_form = OrderForm() template = 'checkout/checkout.html' context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, template, context)
def checkout(request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': cart = request.session.get('cart', {}) form_data = { 'full_name': request.POST['full_name'], 'email': request.POST['email'], 'phone_number': request.POST['phone_number'], 'country': request.POST['country'], 'postcode': request.POST['postcode'], 'town_or_city': request.POST['town_or_city'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], 'county': request.POST['county'], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save() pid = request.POST.get('client_secret').split('_secret')[0] order.stripe_pid = pid order.original_cart = json.dumps(cart) for item_id, item_data in cart.items(): try: merchandise = Merchandise.objects.get(id=item_id) if isinstance(item_data, int): order_line_item = OrderLineItem( order=order, merchandise=merchandise, quantity=item_data, ) order_line_item.save() except Merchandise.DoesNotExist: # dont want to delete entire order order_line_item.delete() request.session['save_info'] = 'save-info' in request.POST return redirect(reverse('checkout_success', args=[order.order_number])) else: return redirect(reverse('view_cart')) else: cart = request.session.get('cart', {}) if not cart: return redirect(reverse('home')) current_cart = cart_content(request) total = current_cart['grand_total'] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm(initial={ 'full_name': profile.user, 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'country': profile.default_country, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, 'county': profile.default_county, }) except UserProfile.DoesNotExist: order_form = OrderForm() else: order_form = OrderForm() template = 'checkout/checkout.html' context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, template, context)
def checkout(request): stripe_public_key = settings.STRIPE_PUBLIC_KEY1 stripe_secret_key = settings.STRIPE_SECRET_KEY1 if request.method == 'POST': cart = request.session.get('cart', {}) form_data = { 'full_name': request.POST['full_name'], 'email': request.POST['email'], 'phone_number': request.POST['phone_number'], 'country': request.POST['country'], 'postcode': request.POST['postcode'], 'town_or_city': request.POST['town_or_city'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], 'county': request.POST['county'], } order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save(commit=False) pid = request.POST.get('client_secret').split('_secret')[0] order.stripe_pid = pid order.original_cart = json.dumps(cart) order.save() for item_id, item_data in cart.items(): try: product = Product.objects.get(id=item_id) if isinstance(item_data, int): order_line_item = OrderLineItem( order=order, product=product, quantity=item_data, ) order_line_item.save() except Product.DoesNotExist: messages.error(request, ( "One of the products in your cart wasn't found in our database. " "Please call us for assistance!")) order.delete() return redirect(reverse('shopping_cart')) request.session['save_info'] = 'save-info' in request.POST return redirect( reverse('checkout_success', args=[order.order_number])) else: messages.error( request, 'There was an error with your form. \ Please double check your information.') else: cart = request.session.get('cart', {}) if not cart: messages.error(request, "There's nothing in your Cart at the moment") return redirect(reverse('products')) active_cart = cart_content(request) total = active_cart['grand_total'] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) # Attempt to prefill the form with any info # the user maintains in their profile if request.user.is_authenticated: try: profile = UserProfile.objects.get(user=request.user) order_form = OrderForm( initial={ 'full_name': profile.user.get_full_name(), 'email': profile.user.email, 'phone_number': profile.default_phone_number, 'country': profile.default_country, 'postcode': profile.default_postcode, 'town_or_city': profile.default_town_or_city, 'street_address1': profile.default_street_address1, 'street_address2': profile.default_street_address2, 'county': profile.default_county, }) except UserProfile.DoesNotExist: order_form = OrderForm() else: order_form = OrderForm() if not stripe_public_key: messages.warning( request, 'Stripe public key is missing. \ Did you forget to set it in your environment?') template = 'checkout/checkout.html' context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, template, context)