Fred808 commited on
Commit
11fe8a7
Β·
verified Β·
1 Parent(s): 77e5000

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -19
app.py CHANGED
@@ -171,7 +171,7 @@ def create_paystack_payment_link(email: str, amount: int, reference: str) -> dic
171
  "email": email,
172
  "amount": amount,
173
  "reference": reference,
174
- "callback_url": "https://custy-bot.vercel.app/payment_callback"
175
  }
176
  try:
177
  response = requests.post(url, json=data, headers=headers, timeout=10)
@@ -826,47 +826,62 @@ async def payment_callback(request: Request):
826
  if request.method == "GET":
827
  params = request.query_params
828
  order_id = params.get("reference")
829
- status = params.get("status", "Paid")
 
830
  if not order_id:
831
  raise HTTPException(status_code=400, detail="Missing order reference in callback.")
 
832
  async with async_session() as session:
833
  result = await session.execute(
834
- Order.__table__.select().where(Order.order_id == order_id)
835
  )
836
- order = result.scalar_one_or_none()
 
837
  if order:
838
- order.status = status
839
  await session.commit()
 
 
 
 
 
 
 
 
 
 
 
840
  else:
841
  raise HTTPException(status_code=404, detail="Order not found.")
842
- await log_order_tracking(order_id, "Payment Confirmed", f"Payment status updated to {status}.")
843
- await asyncio.to_thread(send_whatsapp_message, MANAGEMENT_WHATSAPP_NUMBER,
844
- f"Payment Update:\nOrder ID: {order_id} is now {status}."
845
- )
846
- redirect_url = f"https://wa.link/am87s2"
847
- return RedirectResponse(url=redirect_url)
848
- else:
849
  data = await request.json()
850
  order_id = data.get("reference")
851
- new_status = data.get("status", "Paid")
 
852
  if not order_id:
853
  raise HTTPException(status_code=400, detail="Missing order reference in callback.")
 
854
  async with async_session() as session:
855
  result = await session.execute(
856
- Order.__table__.select().where(Order.order_id == order_id)
857
  )
858
- order = result.scalar_one_or_none()
 
859
  if order:
860
- order.status = new_status
861
  await session.commit()
862
- await log_order_tracking(order_id, "Payment Confirmed", f"Payment status updated to {new_status}.")
863
- await asyncio.to_thread(send_whatsapp_message, MANAGEMENT_WHATSAPP_NUMBER,
864
- f"Payment Update:\nOrder ID: {order_id} is now {new_status}."
 
 
865
  )
866
  return JSONResponse(content={"message": "Order updated successfully."})
867
  else:
868
  raise HTTPException(status_code=404, detail="Order not found.")
869
 
 
870
  @app.get("/track_order/{order_id}")
871
  async def track_order(order_id: str):
872
 
 
171
  "email": email,
172
  "amount": amount,
173
  "reference": reference,
174
+ "callback_url": "https://fred808-botpy-808.hf.space/payment_callback"
175
  }
176
  try:
177
  response = requests.post(url, json=data, headers=headers, timeout=10)
 
826
  if request.method == "GET":
827
  params = request.query_params
828
  order_id = params.get("reference")
829
+ status = params.get("status", "failed") # Default to failed
830
+
831
  if not order_id:
832
  raise HTTPException(status_code=400, detail="Missing order reference in callback.")
833
+
834
  async with async_session() as session:
835
  result = await session.execute(
836
+ select(Order).where(Order.order_id == order_id)
837
  )
838
+ order = result.scalars().first()
839
+
840
  if order:
841
+ order.status = "Paid" if status == "success" else "Failed"
842
  await session.commit()
843
+
844
+ if status == "success":
845
+ # Notify the user
846
+ await asyncio.to_thread(send_whatsapp_message, order.user_id,
847
+ f"βœ… Payment successful! Your order (ID: {order_id}) is now being processed. πŸš€"
848
+ )
849
+
850
+ # Redirect user to WhatsApp link
851
+ return RedirectResponse(url="https://wa.link/am87s2")
852
+ else:
853
+ return JSONResponse(content={"message": "Payment failed. Please try again."})
854
  else:
855
  raise HTTPException(status_code=404, detail="Order not found.")
856
+
857
+ else: # Handle POST webhook (if needed)
 
 
 
 
 
858
  data = await request.json()
859
  order_id = data.get("reference")
860
+ new_status = data.get("status", "failed")
861
+
862
  if not order_id:
863
  raise HTTPException(status_code=400, detail="Missing order reference in callback.")
864
+
865
  async with async_session() as session:
866
  result = await session.execute(
867
+ select(Order).where(Order.order_id == order_id)
868
  )
869
+ order = result.scalars().first()
870
+
871
  if order:
872
+ order.status = "Paid" if new_status == "success" else "Failed"
873
  await session.commit()
874
+
875
+ await asyncio.to_thread(send_whatsapp_message, order.user_id,
876
+ f"βœ… Payment successful! Your order (ID: {order_id}) is now being processed. πŸš€"
877
+ if new_status == "success" else
878
+ f"❌ Payment failed for Order ID: {order_id}. Please retry."
879
  )
880
  return JSONResponse(content={"message": "Order updated successfully."})
881
  else:
882
  raise HTTPException(status_code=404, detail="Order not found.")
883
 
884
+
885
  @app.get("/track_order/{order_id}")
886
  async def track_order(order_id: str):
887