Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

how to save an instance after all processes are completed (including Stripe checkout session)?

$
0
0

#views

@transaction.atomicdef booking_form(request, id):    franchise_id = id    form = BookingForm(franchise_id=franchise_id)    if request.method == 'POST':        form = BookingForm(request.POST, franchise_id=franchise_id)        if 'paynow-btn' in request.POST:            if form.is_valid():                instance = form.save(commit=False)                instance.payment_status = 'due'                instance.booking_status = 'unconfirmed'                instance.franchise_id = franchise_id                #other code                #stripe connect [standard account] direct charges                    connected_account_id = create_or_get_connected_account(franchise_id)                success_urlpattern = reverse('booking:booking_successful', kwargs={'id': franchise_id})                success_urlpath = request.build_absolute_uri(success_urlpattern)                # Create a Stripe checkout session                print("Before checkout session creation")                checkout_session = stripe.checkout.Session.create(                    payment_method_types=['card'],                    line_items=[{"price_data": {"currency": "gbp","unit_amount": int(instance.total_amount * 100),"product_data": {"name": f'Booking for {instance.full_name}',                            },                        },"quantity": 1,                    }],                    payment_intent_data={'metadata': {'booking_id': instance.id,                        },'application_fee_amount': int(instance.total_amount * (franchise.payout_percentage / 100) * 100),                    },                    mode='payment',                    # Create a Stripe checkout session                    success_url=success_urlpath,                    cancel_url=settings.PAYMENT_CANCEL_URL,                    stripe_account=connected_account_id,                )                print("After checkout session creation")                print(checkout_session)                # Check if the checkout session was successfully created                if checkout_session and checkout_session.status == 'completed':                    # Save the instance only if the checkout session is completed                    instance.save()                    return redirect(checkout_session.url)                else:                    # Handle the case where the checkout session creation failed                    messages.error(request, 'Failed to create the checkout session. Please try again.')                    return redirect(reverse('booking:booking_form', kwargs={'id': franchise_id}))

Hi, I'm trying to save the booking object instance after all the processes are completed! It doesn't work and leaves me with Failed to create the checkout session. Please try again. Printing the session shows me this {"status": "open",}. I tried doing @transaction.atomic without the stripe checkout_session.status check and saving the instance after all the processes, and that just saves the instance as soon as I hit the paynow-btn and then redirects me to stripe for payment. Is there a way to solve this??


Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>