diff --git a/src/pages/Assinatura.tsx b/src/pages/Assinatura.tsx index e619579..ffb4669 100644 --- a/src/pages/Assinatura.tsx +++ b/src/pages/Assinatura.tsx @@ -1,3 +1,4 @@ + import { useState } from "react"; import { Button } from "@/components/ui/button"; import { ArrowLeft, Check } from "lucide-react"; @@ -29,37 +30,46 @@ const Assinatura = () => { console.log('🔄 [ASSINATURA] Iniciando processo de assinatura...'); // Verificar sessão do usuário - const { data: { user }, error: userError } = await supabase.auth.getUser(); + const { data: { session }, error: sessionError } = await supabase.auth.getSession(); - if (userError) { - console.error('❌ [ASSINATURA] Erro de autenticação:', userError); + if (sessionError) { + console.error('❌ [ASSINATURA] Erro ao obter sessão:', sessionError); toast.error("Erro de autenticação. Faça login novamente."); return; } - if (!user || !user.id || !user.email) { - console.error('❌ [ASSINATURA] Usuário não autenticado'); + if (!session || !session.user || !session.user.id || !session.user.email) { + console.error('❌ [ASSINATURA] Usuário não autenticado ou dados incompletos'); toast.error("Sessão inválida. Por favor, faça login novamente."); return; } + const { user } = session; console.log('✅ [ASSINATURA] Usuário autenticado:', { id: user.id, email: user.email }); + // Preparar dados para envio + const requestData = { + email: user.email, + userId: user.id + }; + + console.log('📦 [ASSINATURA] Dados a serem enviados:', requestData); + // Chamar a função do MercadoPago console.log('📞 [ASSINATURA] Chamando função mercado-pago-subscribe...'); const { data, error } = await supabase.functions.invoke('mercado-pago-subscribe', { - body: { - email: user.email, - userId: user.id - }, + body: requestData, + method: 'POST' }); + console.log('📨 [ASSINATURA] Resposta da função:', { data, error }); + if (error) { console.error('❌ [ASSINATURA] Erro na função:', error); // Tratar diferentes tipos de erro if (error.message?.includes('FunctionsHttpError')) { - toast.error("Erro de comunicação. Verifique sua conexão e tente novamente."); + toast.error("Erro de comunicação com o servidor. Tente novamente."); } else if (error.message?.includes('FunctionsRelayError')) { toast.error("Serviço temporariamente indisponível. Tente novamente em alguns instantes."); } else if (error.message?.includes('fetch')) { diff --git a/supabase/functions/mercado-pago-subscribe/index.ts b/supabase/functions/mercado-pago-subscribe/index.ts index eaa9b22..9e303b9 100644 --- a/supabase/functions/mercado-pago-subscribe/index.ts +++ b/supabase/functions/mercado-pago-subscribe/index.ts @@ -15,32 +15,48 @@ serve(async (req) => { try { console.log('🚀 Iniciando processamento da assinatura MercadoPago'); + console.log('📋 Método da requisição:', req.method); + console.log('📋 Headers da requisição:', Object.fromEntries(req.headers.entries())); // Verificar se há dados no corpo da requisição let requestBody; try { const text = await req.text(); - requestBody = text ? JSON.parse(text) : {}; - console.log('📦 Corpo da requisição:', requestBody); + console.log('📦 Texto bruto recebido:', text); + + if (!text || text.trim() === '') { + console.error('❌ Corpo da requisição está vazio'); + return new Response(JSON.stringify({ error: 'Dados da requisição não fornecidos.' }), { + headers: { ...corsHeaders, 'Content-Type': 'application/json' }, + status: 400, + }); + } + + requestBody = JSON.parse(text); + console.log('📦 Corpo da requisição parseado:', requestBody); } catch (parseError) { console.error('❌ Erro ao fazer parse do JSON:', parseError); - return new Response(JSON.stringify({ error: 'Dados da requisição inválidos.' }), { + return new Response(JSON.stringify({ error: 'Formato de dados inválido.' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 400, }); } + // Extrair email e userId do corpo da requisição const { email, userId } = requestBody; + console.log('📧 Dados extraídos:', { email, userId }); + if (!email || !userId) { console.error('❌ Email ou ID do usuário não fornecido'); + console.error('❌ Dados recebidos:', { email, userId }); return new Response(JSON.stringify({ error: 'E-mail ou ID do usuário não fornecido.' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 400, }); } - console.log('📧 Dados recebidos:', { email, userId }); + console.log('📧 Dados validados com sucesso:', { email, userId }); // Cria um cliente Supabase com a service_role_key para verificar o usuário const supabaseAdmin = createClient( @@ -59,7 +75,7 @@ serve(async (req) => { if (userError) { console.error('❌ Erro ao buscar usuário:', userError); - return new Response(JSON.stringify({ error: 'Usuário não encontrado.' }), { + return new Response(JSON.stringify({ error: 'Usuário não encontrado no sistema.' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 404, }); @@ -67,7 +83,7 @@ serve(async (req) => { if (!userData) { console.error('❌ Usuário não encontrado no banco'); - return new Response(JSON.stringify({ error: 'Usuário não encontrado.' }), { + return new Response(JSON.stringify({ error: 'Usuário não encontrado no sistema.' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 404, });