Fix: Subscription page error handling
The AI addressed the subscription page error, which seems to originate from the Supabase edge function.
This commit is contained in:
parent
247c510f48
commit
490404d22b
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { ArrowLeft, Check } from "lucide-react";
|
import { ArrowLeft, Check } from "lucide-react";
|
||||||
@ -59,7 +58,11 @@ const Assinatura = () => {
|
|||||||
console.error('❌ [ASSINATURA] Erro na função:', error);
|
console.error('❌ [ASSINATURA] Erro na função:', error);
|
||||||
|
|
||||||
// Tratar diferentes tipos de erro
|
// Tratar diferentes tipos de erro
|
||||||
if (error.message?.includes('fetch')) {
|
if (error.message?.includes('FunctionsHttpError')) {
|
||||||
|
toast.error("Erro de comunicação. Verifique sua conexão e 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')) {
|
||||||
toast.error("Erro de conexão. Verifique sua internet e tente novamente.");
|
toast.error("Erro de conexão. Verifique sua internet e tente novamente.");
|
||||||
} else if (error.message?.includes('401')) {
|
} else if (error.message?.includes('401')) {
|
||||||
toast.error("Sessão expirada. Faça login novamente.");
|
toast.error("Sessão expirada. Faça login novamente.");
|
||||||
@ -75,7 +78,7 @@ const Assinatura = () => {
|
|||||||
// Tratar erros específicos do MercadoPago
|
// Tratar erros específicos do MercadoPago
|
||||||
if (data.error.includes('temporariamente indisponível')) {
|
if (data.error.includes('temporariamente indisponível')) {
|
||||||
toast.error("Serviço temporariamente indisponível para sua região. Entre em contato conosco.");
|
toast.error("Serviço temporariamente indisponível para sua região. Entre em contato conosco.");
|
||||||
} else if (data.error.includes('Token')) {
|
} else if (data.error.includes('Token') || data.error.includes('configuração')) {
|
||||||
toast.error("Erro de configuração. Entre em contato com o suporte.");
|
toast.error("Erro de configuração. Entre em contato com o suporte.");
|
||||||
} else {
|
} else {
|
||||||
toast.error(data.error);
|
toast.error(data.error);
|
||||||
@ -92,7 +95,7 @@ const Assinatura = () => {
|
|||||||
window.location.href = data.init_point;
|
window.location.href = data.init_point;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} else {
|
} else {
|
||||||
console.error('❌ [ASSINATURA] URL de checkout não encontrada');
|
console.error('❌ [ASSINATURA] URL de checkout não encontrada nos dados:', data);
|
||||||
toast.error("Não foi possível gerar o link de pagamento. Tente novamente.");
|
toast.error("Não foi possível gerar o link de pagamento. Tente novamente.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,21 @@ serve(async (req) => {
|
|||||||
try {
|
try {
|
||||||
console.log('🚀 Iniciando processamento da assinatura MercadoPago');
|
console.log('🚀 Iniciando processamento da assinatura MercadoPago');
|
||||||
|
|
||||||
const { email, userId } = await req.json();
|
// 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);
|
||||||
|
} catch (parseError) {
|
||||||
|
console.error('❌ Erro ao fazer parse do JSON:', parseError);
|
||||||
|
return new Response(JSON.stringify({ error: 'Dados da requisição inválidos.' }), {
|
||||||
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
|
status: 400,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const { email, userId } = requestBody;
|
||||||
|
|
||||||
if (!email || !userId) {
|
if (!email || !userId) {
|
||||||
console.error('❌ Email ou ID do usuário não fornecido');
|
console.error('❌ Email ou ID do usuário não fornecido');
|
||||||
@ -39,20 +53,27 @@ serve(async (req) => {
|
|||||||
console.log('🔍 Verificando usuário no banco de dados...');
|
console.log('🔍 Verificando usuário no banco de dados...');
|
||||||
const { data: userData, error: userError } = await supabaseAdmin
|
const { data: userData, error: userError } = await supabaseAdmin
|
||||||
.from('usuarios')
|
.from('usuarios')
|
||||||
.select('id')
|
.select('id, email')
|
||||||
.eq('id', userId)
|
.eq('id', userId)
|
||||||
.eq('email', email)
|
|
||||||
.single();
|
.single();
|
||||||
|
|
||||||
if (userError || !userData) {
|
if (userError) {
|
||||||
console.error('❌ Falha na verificação do usuário:', userError);
|
console.error('❌ Erro ao buscar usuário:', userError);
|
||||||
return new Response(JSON.stringify({ error: 'Usuário não autorizado.' }), {
|
return new Response(JSON.stringify({ error: 'Usuário não encontrado.' }), {
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
status: 401,
|
status: 404,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('✅ Usuário verificado com sucesso');
|
if (!userData) {
|
||||||
|
console.error('❌ Usuário não encontrado no banco');
|
||||||
|
return new Response(JSON.stringify({ error: 'Usuário não encontrado.' }), {
|
||||||
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
|
status: 404,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('✅ Usuário verificado com sucesso:', userData);
|
||||||
|
|
||||||
const MERCADO_PAGO_ACCESS_TOKEN = Deno.env.get('MERCADO_PAGO_ACCESS_TOKEN')
|
const MERCADO_PAGO_ACCESS_TOKEN = Deno.env.get('MERCADO_PAGO_ACCESS_TOKEN')
|
||||||
if (!MERCADO_PAGO_ACCESS_TOKEN) {
|
if (!MERCADO_PAGO_ACCESS_TOKEN) {
|
||||||
@ -63,6 +84,10 @@ serve(async (req) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pegar a URL de origem para o back_url
|
||||||
|
const origin = req.headers.get('origin') || req.headers.get('referer') || 'https://lovableproject.com';
|
||||||
|
console.log('🌐 Origin detectado:', origin);
|
||||||
|
|
||||||
const body = {
|
const body = {
|
||||||
reason: "Plano Mensal Finance Home",
|
reason: "Plano Mensal Finance Home",
|
||||||
auto_recurring: {
|
auto_recurring: {
|
||||||
@ -71,7 +96,7 @@ serve(async (req) => {
|
|||||||
transaction_amount: 14.99,
|
transaction_amount: 14.99,
|
||||||
currency_id: "BRL"
|
currency_id: "BRL"
|
||||||
},
|
},
|
||||||
back_url: req.headers.get("origin") || "http://localhost:5173/configuracoes",
|
back_url: `${origin}/configuracoes`,
|
||||||
payer_email: email
|
payer_email: email
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -107,7 +132,7 @@ serve(async (req) => {
|
|||||||
const errorMessage = mpData.message || `Erro no MercadoPago (${mpResponse.status})`;
|
const errorMessage = mpData.message || `Erro no MercadoPago (${mpResponse.status})`;
|
||||||
return new Response(JSON.stringify({ error: errorMessage }), {
|
return new Response(JSON.stringify({ error: errorMessage }), {
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
status: mpResponse.status,
|
status: 422,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user