Song commited on
Commit ·
2083b0b
1
Parent(s): 2c576ba
hi
Browse files- app.py +5 -2
- schemas.py +1 -0
- stripe_service.py +11 -3
app.py
CHANGED
|
@@ -382,8 +382,11 @@ async def create_order_endpoint(
|
|
| 382 |
# Create order in database
|
| 383 |
order = await create_order(db, order_data, profile.id)
|
| 384 |
|
| 385 |
-
#
|
| 386 |
-
|
|
|
|
|
|
|
|
|
|
| 387 |
|
| 388 |
# Update order with Stripe session ID
|
| 389 |
from crud import update_order_status
|
|
|
|
| 382 |
# Create order in database
|
| 383 |
order = await create_order(db, order_data, profile.id)
|
| 384 |
|
| 385 |
+
# Get user's email - prefer frontend-provided email, fall back to authenticated user's email
|
| 386 |
+
user_email = order_data.customer_email or current_user.email
|
| 387 |
+
|
| 388 |
+
# Create Stripe checkout session with user's email
|
| 389 |
+
checkout_url = create_checkout_session_for_order(order, customer_email=user_email)
|
| 390 |
|
| 391 |
# Update order with Stripe session ID
|
| 392 |
from crud import update_order_status
|
schemas.py
CHANGED
|
@@ -140,6 +140,7 @@ class OrderCreate(OrderBase):
|
|
| 140 |
"""Schema for creating a new order."""
|
| 141 |
|
| 142 |
profile_id: UUID = Field(..., description="ID of the profile making the order")
|
|
|
|
| 143 |
|
| 144 |
|
| 145 |
class OrderUpdate(BaseModel):
|
|
|
|
| 140 |
"""Schema for creating a new order."""
|
| 141 |
|
| 142 |
profile_id: UUID = Field(..., description="ID of the profile making the order")
|
| 143 |
+
customer_email: Optional[str] = Field(default=None, description="Customer email for Stripe checkout")
|
| 144 |
|
| 145 |
|
| 146 |
class OrderUpdate(BaseModel):
|
stripe_service.py
CHANGED
|
@@ -15,12 +15,13 @@ from exceptions import PaymentException, handle_payment_error
|
|
| 15 |
stripe.api_key = settings.stripe_secret_key
|
| 16 |
|
| 17 |
|
| 18 |
-
def create_checkout_session_for_order(order) -> str:
|
| 19 |
"""
|
| 20 |
Create a Stripe checkout session for an order.
|
| 21 |
|
| 22 |
Args:
|
| 23 |
order: Order object with items and total_amount
|
|
|
|
| 24 |
|
| 25 |
Returns:
|
| 26 |
Stripe checkout session URL
|
|
@@ -34,6 +35,7 @@ def create_checkout_session_for_order(order) -> str:
|
|
| 34 |
logger.info(f"[DEBUG] Order items type: {type(order.items)}")
|
| 35 |
logger.info(f"[DEBUG] Order items: {order.items}")
|
| 36 |
logger.info(f"[DEBUG] Order total_amount: {order.total_amount}")
|
|
|
|
| 37 |
|
| 38 |
# Extract order items for Stripe line items
|
| 39 |
line_items = []
|
|
@@ -88,7 +90,7 @@ def create_checkout_session_for_order(order) -> str:
|
|
| 88 |
})
|
| 89 |
|
| 90 |
# Create Stripe checkout session
|
| 91 |
-
|
| 92 |
payment_method_types=['card'],
|
| 93 |
line_items=line_items,
|
| 94 |
mode='payment',
|
|
@@ -105,7 +107,13 @@ def create_checkout_session_for_order(order) -> str:
|
|
| 105 |
phone_number_collection={
|
| 106 |
'enabled': True,
|
| 107 |
}
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
return session.url
|
| 111 |
|
|
|
|
| 15 |
stripe.api_key = settings.stripe_secret_key
|
| 16 |
|
| 17 |
|
| 18 |
+
def create_checkout_session_for_order(order, customer_email: str = None) -> str:
|
| 19 |
"""
|
| 20 |
Create a Stripe checkout session for an order.
|
| 21 |
|
| 22 |
Args:
|
| 23 |
order: Order object with items and total_amount
|
| 24 |
+
customer_email: Customer email for pre-filling in Stripe checkout
|
| 25 |
|
| 26 |
Returns:
|
| 27 |
Stripe checkout session URL
|
|
|
|
| 35 |
logger.info(f"[DEBUG] Order items type: {type(order.items)}")
|
| 36 |
logger.info(f"[DEBUG] Order items: {order.items}")
|
| 37 |
logger.info(f"[DEBUG] Order total_amount: {order.total_amount}")
|
| 38 |
+
logger.info(f"[DEBUG] Customer email: {customer_email}")
|
| 39 |
|
| 40 |
# Extract order items for Stripe line items
|
| 41 |
line_items = []
|
|
|
|
| 90 |
})
|
| 91 |
|
| 92 |
# Create Stripe checkout session
|
| 93 |
+
session_params = {
|
| 94 |
payment_method_types=['card'],
|
| 95 |
line_items=line_items,
|
| 96 |
mode='payment',
|
|
|
|
| 107 |
phone_number_collection={
|
| 108 |
'enabled': True,
|
| 109 |
}
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
# Add customer_email if provided
|
| 113 |
+
if customer_email:
|
| 114 |
+
session_params['customer_email'] = customer_email
|
| 115 |
+
|
| 116 |
+
session = stripe.checkout.Session.create(**session_params)
|
| 117 |
|
| 118 |
return session.url
|
| 119 |
|