habulaj commited on
Commit
253e11b
·
verified ·
1 Parent(s): 4587654

Update routes/subscription.py

Browse files
Files changed (1) hide show
  1. routes/subscription.py +38 -4
routes/subscription.py CHANGED
@@ -585,22 +585,56 @@ async def stripe_webhook(request: Request):
585
  elif event_type == "payment_intent.succeeded":
586
  payment_intent = payload.get("data", {}).get("object", {})
587
 
588
- # 🔹 Pegando os valores do metadado
589
  stylist_id = payment_intent.get("metadata", {}).get("stylist_id")
590
- client_id = payment_intent.get("metadata", {}).get("client_id")
591
- subscription_id = payment_intent.get("metadata", {}).get("subscription_id")
592
  payment_id = payment_intent.get("id") # Payment ID
593
  amount_received = payment_intent.get("amount_received", 0) # Valor recebido (em centavos)
 
594
 
595
- if not all([stylist_id, client_id, subscription_id, payment_id]):
596
  logger.error("❌ Faltando dados essenciais no metadado do Payment Intent.")
597
  return {"status": "error", "message": "Missing essential metadata."}
 
 
 
 
 
 
 
 
 
598
 
599
  logger.info(f"🔹 Payment Intent succeeded for subscription {subscription_id}")
600
  logger.info(f"👤 Client ID: {client_id}")
601
  logger.info(f"👗 Stylist ID: {stylist_id}")
602
  logger.info(f"💰 Price: R$ {amount_received / 100:.2f}")
603
  logger.info(f"💳 Payment ID: {payment_id}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
604
 
605
  # 🔹 Definindo os cabeçalhos do Supabase
606
  supabase_headers = {
 
585
  elif event_type == "payment_intent.succeeded":
586
  payment_intent = payload.get("data", {}).get("object", {})
587
 
588
+ # 🔹 Pegando os valores do metadado - CORRIGIDO
589
  stylist_id = payment_intent.get("metadata", {}).get("stylist_id")
590
+ client_id = payment_intent.get("metadata", {}).get("user_id") # Alterado de client_id para user_id
591
+ invoice_id = payment_intent.get("invoice") # Obtendo o ID da fatura
592
  payment_id = payment_intent.get("id") # Payment ID
593
  amount_received = payment_intent.get("amount_received", 0) # Valor recebido (em centavos)
594
+ stylist_stripe_id = payment_intent.get("metadata", {}).get("stylist_stripe_id")
595
 
596
+ if not all([stylist_id, client_id, payment_id]):
597
  logger.error("❌ Faltando dados essenciais no metadado do Payment Intent.")
598
  return {"status": "error", "message": "Missing essential metadata."}
599
+
600
+ # Obter subscription_id da fatura
601
+ subscription_id = None
602
+ if invoice_id:
603
+ try:
604
+ invoice = stripe.Invoice.retrieve(invoice_id)
605
+ subscription_id = invoice.get("subscription")
606
+ except Exception as e:
607
+ logger.error(f"❌ Erro ao obter subscription_id da fatura: {str(e)}")
608
 
609
  logger.info(f"🔹 Payment Intent succeeded for subscription {subscription_id}")
610
  logger.info(f"👤 Client ID: {client_id}")
611
  logger.info(f"👗 Stylist ID: {stylist_id}")
612
  logger.info(f"💰 Price: R$ {amount_received / 100:.2f}")
613
  logger.info(f"💳 Payment ID: {payment_id}")
614
+
615
+ # Criar transferência para a conta conectada do estilista
616
+ if stylist_stripe_id and amount_received > 0:
617
+ try:
618
+ # Calcular valor do estilista (80%)
619
+ stylist_amount = int(amount_received * 0.8)
620
+
621
+ # Criar transferência
622
+ transfer = stripe.Transfer.create(
623
+ amount=stylist_amount,
624
+ currency="brl",
625
+ destination=stylist_stripe_id,
626
+ source_transaction=payment_intent.get("latest_charge"),
627
+ description=f"Pagamento de assinatura para {stylist_id}",
628
+ metadata={
629
+ "stylist_id": stylist_id,
630
+ "client_id": client_id,
631
+ "payment_intent_id": payment_id,
632
+ "subscription_id": subscription_id
633
+ }
634
+ )
635
+ logger.info(f"✅ Transferência criada com sucesso: {transfer.id} - Valor: R$ {stylist_amount / 100:.2f}")
636
+ except Exception as e:
637
+ logger.error(f"❌ Erro ao criar transferência: {str(e)}")
638
 
639
  # 🔹 Definindo os cabeçalhos do Supabase
640
  supabase_headers = {