paghiper / whmcs

Modulo de PIX e boleto bancário PagHiper para o WHMCS
GNU General Public License v3.0
25 stars 17 forks source link

Erros no código, exit() #144

Closed mazzei-adam closed 5 months ago

mazzei-adam commented 8 months ago

Em várias partes do código é usada a função exit() mas acredito que esteja sendo usada de forma errada. Parece que a intenção é sair da função, mas isso interrompe o script todo. Ou seja, tudo que deveria acontecer após a chamada do exit() não acontece.

Um exemplo: Crie uma fatura com forma de recebimento Boleto PagHiper de um plano com recorrência e adicione um pagamento com outra forma de pagamento (transferencia bancária ou dinheiro). O comportamento normal do WHMCS seria marcar a fatura como paga, enviar o email de recebimento e atualizar o proximo vencimento. E o módulo deveria apenas cancelar o boleto (pois foi recebido por outra forma).

Mas ao usar exit(), o WHMCS só executa o primeiro passo, q é marcar a fatura como paga, ou seja, o email não é enviado e o proximo vencimento não é atualizado.

Esses exit() espalhados pelo código atrapalha quase tudo, inclusive a baixa automatica no retorno do PagHiper, que também não envia o email de recebimento e não atualiza o proximo vencimento.

Analisando o trecho abaixo, dá pra perceber bem o uso errado da função exit().

`public function process() {

    if($this->hasPayableStatus()) {
        if($this->hasPayableTransaction()) {
            return $this->getTransaction();
        } else {
            $this->createTransaction();
            return $this->getTransaction();
        }
    }
}`

`private function hasPayableStatus() {

    // Process status screens accordingly to invoice status
    switch($this->invoiceData['status']) {
        case "Paid":

            // Mostrar tela de boleto pago
            $ico = ($this->isPIX) ? 'pix-ok.png' : 'billet-ok.png';
            $title = 'Fatura paga!';
            $message = 'Este '.(($this->isPIX) ? 'PIX' : 'boleto').' ja foi compensado no sistema e consta como pago.';
            echo paghiper_print_screen($ico, $title, $message);
            exit();

            break;
        case "Draft":

            // Mostrar tela de boleto indisponível
            $ico = ($this->isPIX) ? 'pix-cancelled.png' : 'billet-cancelled.png';
            $title = 'Esta fatura ainda não está disponível!';
            $message = 'Este '.(($this->isPIX) ? 'PIX' : 'boleto').' ainda não está disponível. Caso acredite que seja um erro, por favor acione o suporte.';
            echo paghiper_print_screen($ico, $title, $message);
            exit();

            break;
        case "Unpaid":
            return true;

            break;
        case "Overdue":
            return true;

            break;
        case "Cancelled":

            // Mostrar tela de boleto indisponível
            $ico = ($this->isPIX) ? 'pix-cancelled.png' : 'billet-cancelled.png';
            $title = 'Esta fatura foi cancelada!';
            $message = 'Por consequencia, esse '.(($this->isPIX) ? 'PIX' : 'boleto').' também foi cancelado. Caso acredite que seja um erro, por favor acione o suporte.';
            echo paghiper_print_screen($ico, $title, $message);
            exit();

            break;
        case "Refunded":

            // Mostrar tela de boleto indisponível
            $ico = ($this->isPIX) ? 'pix-cancelled.png' : 'billet-cancelled.png';
            $title = 'Este fatura foi estornada.';
            $message = 'Seu '.(($this->isPIX) ? 'PIX' : 'boleto').' foi estornado. Caso acredite que seja um erro, por favor acione o suporte.';
            echo paghiper_print_screen($ico, $title, $message);
            exit();

            break;
        case "Collections":
            break;
    }
}`
henriqueccruz commented 5 months ago

Respondido em outro ticket aberto.