Jump to content

Hook para Redirecionamento Automático para a Fatura Vencida


Recommended Posts

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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Do you agree with our terms?