Song commited on
Commit
2083b0b
·
1 Parent(s): 2c576ba
Files changed (3) hide show
  1. app.py +5 -2
  2. schemas.py +1 -0
  3. 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
- # Create Stripe checkout session
386
- checkout_url = create_checkout_session_for_order(order)
 
 
 
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
- session = stripe.checkout.Session.create(
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