Landing flow: set/get token/card_id
This commit is contained in:
		
					parent
					
						
							
								dc28186fe9
							
						
					
				
			
			
				commit
				
					
						9bf8992ff4
					
				
			
		
					 1 changed files with 62 additions and 20 deletions
				
			
		|  | @ -282,14 +282,55 @@ class PaymentOrderView(FormView): | |||
|             ) | ||||
|         if address_form.is_valid(): | ||||
|             token = address_form.cleaned_data.get('token') | ||||
|             owner = self.request.user | ||||
|             if token is '': | ||||
|                 card_id = address_form.cleaned_data.get('card') | ||||
|                 customer = owner.stripecustomer | ||||
|                 try: | ||||
|                     user_card_detail = UserCardDetail.objects.get(id=card_id) | ||||
|                     if not request.user.has_perm( | ||||
|                             'view_usercarddetail', user_card_detail | ||||
|                     ): | ||||
|                         raise UserCardDetail.DoesNotExist( | ||||
|                             _("{user} does not have permission to access the " | ||||
|                               "card").format(user=request.user.email) | ||||
|                         ) | ||||
|                 except UserCardDetail.DoesNotExist as e: | ||||
|                     ex = str(e) | ||||
|                     logger.error("Card Id: {card_id}, Exception: {ex}".format( | ||||
|                             card_id=card_id, ex=ex | ||||
|                         ) | ||||
|                     ) | ||||
|                     msg = _("An error occurred. Details: {}".format(ex)) | ||||
|                     messages.add_message( | ||||
|                         self.request, messages.ERROR, msg, | ||||
|                         extra_tags='make_charge_error' | ||||
|                     ) | ||||
|                     return HttpResponseRedirect( | ||||
|                         reverse('datacenterlight:payment') + '#payment_error' | ||||
|                     ) | ||||
|                 request.session['card_id'] = user_card_detail.id | ||||
|             else: | ||||
|                 # Get or create stripe customer | ||||
|                 customer = StripeCustomer.get_or_create( | ||||
|                     email=owner.email, token=token | ||||
|                 ) | ||||
|                 if not customer: | ||||
|                     msg = _("Invalid credit card") | ||||
|                     messages.add_message( | ||||
|                         self.request, messages.ERROR, msg, | ||||
|                         extra_tags='make_charge_error') | ||||
|                     return HttpResponseRedirect( | ||||
|                         reverse('datacenterlight:payment') + '#payment_error') | ||||
|                 request.session['token'] = token | ||||
|             if request.user.is_authenticated(): | ||||
|                 this_user = { | ||||
|                     'email': request.user.email, | ||||
|                     'name': request.user.name | ||||
|                 } | ||||
|                 customer = StripeCustomer.get_or_create( | ||||
|                     email=this_user.get('email'), | ||||
|                     token=token) | ||||
|                     email=this_user.get('email'), token=token | ||||
|                 ) | ||||
|             else: | ||||
|                 user_email = address_form.cleaned_data.get('email') | ||||
|                 user_name = address_form.cleaned_data.get('name') | ||||
|  | @ -337,7 +378,6 @@ class PaymentOrderView(FormView): | |||
|                         billing_address_form=address_form | ||||
|                     ) | ||||
|                 ) | ||||
|             request.session['token'] = token | ||||
|             if type(customer) is StripeCustomer: | ||||
|                 request.session['customer'] = customer.stripe_id | ||||
|             else: | ||||
|  | @ -358,32 +398,34 @@ class OrderConfirmationView(DetailView): | |||
| 
 | ||||
|     @cache_control(no_cache=True, must_revalidate=True, no_store=True) | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         context = {} | ||||
|         if 'specs' not in request.session or 'user' not in request.session: | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||
|         if 'token' not in request.session: | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:payment')) | ||||
|         stripe_api_cus_id = request.session.get('customer') | ||||
|         stripe_utils = StripeUtils() | ||||
|         card_details = stripe_utils.get_card_details(stripe_api_cus_id, | ||||
|                                                      request.session.get( | ||||
|                                                          'token')) | ||||
|         if not card_details.get('response_object'): | ||||
|             msg = card_details.get('error') | ||||
|             messages.add_message(self.request, messages.ERROR, msg, | ||||
|                                  extra_tags='failed_payment') | ||||
|             return HttpResponseRedirect( | ||||
|                 reverse('datacenterlight:payment') + '#payment_error') | ||||
|         context = { | ||||
|         if 'token' in self.request.session: | ||||
|             token = self.request.session['token'] | ||||
|             stripe_utils = StripeUtils() | ||||
|             card_details = stripe_utils.get_cards_details_from_token( | ||||
|                 token | ||||
|             ) | ||||
|             if not card_details.get('response_object'): | ||||
|                 return HttpResponseRedirect(reverse('hosting:payment')) | ||||
|             card_details_response = card_details['response_object'] | ||||
|             context['cc_last4'] = card_details_response['last4'] | ||||
|             context['cc_brand'] = card_details_response['brand'] | ||||
|         else: | ||||
|             card_id = self.request.session.get('card_id') | ||||
|             card_detail = UserCardDetail.objects.get(id=card_id) | ||||
|             context['cc_last4'] = card_detail.last4 | ||||
|             context['cc_brand'] = card_detail.brand | ||||
|         context.update({ | ||||
|             'site_url': reverse('datacenterlight:index'), | ||||
|             'cc_last4': card_details.get('response_object').get('last4'), | ||||
|             'cc_brand': card_details.get('response_object').get('brand'), | ||||
|             'vm': request.session.get('specs'), | ||||
|             'page_header_text': _('Confirm Order'), | ||||
|             'billing_address_data': ( | ||||
|                 request.session.get('billing_address_data') | ||||
|             ), | ||||
|             'cms_integration': get_cms_integration('default'), | ||||
|         } | ||||
|         }) | ||||
|         return render(request, self.template_name, context) | ||||
| 
 | ||||
|     def post(self, request, *args, **kwargs): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue