Ir para conteúdo
  • Cadastre-se

Hook para Redirecionamento Automático para a Fatura Vencida


Posts Recomendados

Olá pessoal,

Desenvolvi um hook para o WHMCS que redireciona automaticamente o usuário após o login à página de pagamento caso exista ao menos uma fatura vencida. Esse hook pode ajudar a garantir que os clientes "estejam cientes" e "forçar" o pagamento para ter acesso a outras funcionalidades dentro da sua área do cliente e pode ser personalizado conforme necessário.

Segue o código do hook:


 

<?php
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('ClientAreaPage', 1, function($vars) {
    // Verifique se o usuário está logado
    if (isset($_SESSION['uid'])) {
        // Obtenha o ID do usuário
        $userId = (int) $_SESSION['uid'];
        
        // Consulta para obter a fatura mais vencida do usuário logado
        $invoice = Capsule::table('tblinvoices')
            ->where('userid', $userId)
            ->where('status', 'Unpaid')
            ->where('duedate', '<', date('Y-m-d'))
            ->orderBy('duedate', 'asc')
            ->first();
        
        // Verifique se há uma fatura vencida
        if ($invoice) {
            $invoiceId = $invoice->id;
            $urlContainsInvoiceId = strpos($_SERVER['REQUEST_URI'], ''.$invoiceId) !== false;

            // Verifique se a página atual não contém o ID da fatura
            if (!$urlContainsInvoiceId) {
                $url = 'viewinvoice.php?id=' . $invoiceId;
                header('Location: ' . $url);
                exit;
            }
        }
    }
});
?>

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, DBPixel disse:

Olá pessoal,

Desenvolvi um hook para o WHMCS que redireciona automaticamente o usuário após o login à página de pagamento caso exista ao menos uma fatura vencida. Esse hook pode ajudar a garantir que os clientes "estejam cientes" e "reforçar" o pagamento para ter acesso a outras funcionalidades dentro da sua área do cliente e pode ser personalizado conforme necessário.

Segue o código do hook:


 

<?php
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('ClientAreaPage', 1, function($vars) {
    // Verifique se o usuário está logado
    if (isset($_SESSION['uid'])) {
        // Obtenha o ID do usuário
        $userId = (int) $_SESSION['uid'];
        
        // Consulta para obter a fatura mais vencida do usuário logado
        $invoice = Capsule::table('tblinvoices')
            ->where('userid', $userId)
            ->where('status', 'Unpaid')
            ->where('duedate', '<', date('Y-m-d'))
            ->orderBy('duedate', 'asc')
            ->first();
        
        // Verifique se há uma fatura vencida
        if ($invoice) {
            $invoiceId = $invoice->id;
            $urlContainsInvoiceId = strpos($_SERVER['REQUEST_URI'], ''.$invoiceId) !== false;

            // Verifique se a página atual não contém o ID da fatura
            if (!$urlContainsInvoiceId) {
                $url = 'viewinvoice.php?id=' . $invoiceId;
                header('Location: ' . $url);
                exit;
            }
        }
    }
});
?>

 

Te mandei add

Link para o comentário
Compartilhar em outros sites

<?php
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('ClientAreaPage', 1, function($vars) {
    // Verifique se o usuário está logado
    if (isset($_SESSION['uid'])) {
        // Obtenha o ID do usuário
        $userId = (int) $_SESSION['uid'];
        
        // Verifique se já redirecionou após o login
        if (!isset($_SESSION['redirected_after_login'])) {
            // Consulta para obter a fatura mais vencida do usuário logado
            $invoice = Capsule::table('tblinvoices')
                ->where('userid', $userId)
                ->where('status', 'Unpaid')
                ->where('duedate', '<', date('Y-m-d'))
                ->orderBy('duedate', 'asc')
                ->first();
            
            // Verifique se há uma fatura vencida
            if ($invoice) {
                $invoiceId = $invoice->id;
                $urlContainsInvoiceId = strpos($_SERVER['REQUEST_URI'], ''.$invoiceId) !== false;

                // Verifique se a página atual não contém o ID da fatura
                if (!$urlContainsInvoiceId) {
                    $url = 'viewinvoice.php?id=' . $invoiceId;
                    $_SESSION['redirected_after_login'] = true;
                    header('Location: ' . $url);
                    exit;
                }
            }
        }
    }
});
?>

Segue uma outra versão do hook desenvolvido pelo @DBPixel, onde nessa versão ele redireciona o usuário apenas uma vez (por sessão) para a fatura vencida, e não "prende" o usuário nessa fatura até pagá-la.

Link para o comentário
Compartilhar em outros sites

Em 06/08/2024 em 15:58, Musial disse:
<?php
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('ClientAreaPage', 1, function($vars) {
    // Verifique se o usuário está logado
    if (isset($_SESSION['uid'])) {
        // Obtenha o ID do usuário
        $userId = (int) $_SESSION['uid'];
        
        // Verifique se já redirecionou após o login
        if (!isset($_SESSION['redirected_after_login'])) {
            // Consulta para obter a fatura mais vencida do usuário logado
            $invoice = Capsule::table('tblinvoices')
                ->where('userid', $userId)
                ->where('status', 'Unpaid')
                ->where('duedate', '<', date('Y-m-d'))
                ->orderBy('duedate', 'asc')
                ->first();
            
            // Verifique se há uma fatura vencida
            if ($invoice) {
                $invoiceId = $invoice->id;
                $urlContainsInvoiceId = strpos($_SERVER['REQUEST_URI'], ''.$invoiceId) !== false;

                // Verifique se a página atual não contém o ID da fatura
                if (!$urlContainsInvoiceId) {
                    $url = 'viewinvoice.php?id=' . $invoiceId;
                    $_SESSION['redirected_after_login'] = true;
                    header('Location: ' . $url);
                    exit;
                }
            }
        }
    }
});
?>

Segue uma outra versão do hook desenvolvido pelo @DBPixel, onde nessa versão ele redireciona o usuário apenas uma vez (por sessão) para a fatura vencida, e não "prende" o usuário nessa fatura até pagá-la.

Olá que legal, vou tentar ajudar tambem!
Segue minha versão.

<?php

if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('UserLogin', 1, function($vars) {
    
    $userId = $vars["user"]["id"];

    $invoice = Capsule::table('tblinvoices')->where('userid', $userId)->where('status', 'Unpaid')->where('duedate', '<', date('Y-m-d'))->orderBy('duedate', 'asc')->first();

    if ($invoice) {
        $invoiceId = $invoice->id;
        $url = "viewinvoice.php?id={$invoiceId}";
        header('Location: ' . $url);
        exit();
    }
    
});

O codigo acima faz exatamente a mesma coisa porem ele faz o redirecionamento no login do usuario.

Link para o comentário
Compartilhar em outros sites

17 horas atrás, LtiWeb Soluções disse:

Nossa eu não uso WHMCS a uns 7 anos... mais quando vejo essas idéias chega até coça ! rsrsrsrsrsr

Hahahaha,

A idéia e distribuir estas utilidades pro pessoal, se tudo correr bem até o mês que vem tentaremos disponibilizar um autologin gratuito e outros módulos, gateways, os módulos do gofas nos auxiliaram muito, esses hooks e addons podem auxiliar outros também.

Link para o comentário
Compartilhar em outros sites

Os 2 primeiros códigos, eu copiei e colei num arquivo que criei em PHP e subi na conta do meu WHMCS e ambos deram certo.

Já o do nosso amigo @MMHospedagem, fazendo exatamente igual, dá esta mensagem:

Citar

Oops!
Something went wrong and we couldn't process your request.
Please go back to the previous page and try again.

Não conheço programação, mas me chamou atenção o código ser bem curto, então pode ser que eu tivesse de fazer mais algo, em vez de apenas copiar igual fiz com os códigos que foram postados antes...

Link para o comentário
Compartilhar em outros sites

50 minutos atrás, Streaming disse:

Os 2 primeiros códigos, eu copiei e colei num arquivo que criei em PHP e subi na conta do meu WHMCS e ambos deram certo.

Já o do nosso amigo @MMHospedagem, fazendo exatamente igual, dá esta mensagem:

Não conheço programação, mas me chamou atenção o código ser bem curto, então pode ser que eu tivesse de fazer mais algo, em vez de apenas copiar igual fiz com os códigos que foram postados antes...

O erro esta no Capsule::table esqueci de declara no inicio do codigo 
 

use WHMCS\Database\Capsule;

segue codigo corrigido
 

<?php

if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;

add_hook('UserLogin', 1, function($vars) {
    
    $userId = $vars["user"]["id"];

    $invoice = Capsule::table('tblinvoices')->where('userid', $userId)->where('status', 'Unpaid')->where('duedate', '<', date('Y-m-d'))->orderBy('duedate', 'asc')->first();

    if ($invoice) {
        $invoiceId = $invoice->id;
        $url = "viewinvoice.php?id={$invoiceId}";
        header('Location: ' . $url);
        exit();
    }
    
});

 

Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Infelizmente, seu conteúdo contém termos que não são permitimos. Edite seu conteúdo para remover as palavras destacadas abaixo.
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?