/** * Processa uma transação recebida por um gateway de pagamento * @param $servico * @param Object $transaction * @return Inscricao em caso de sucesso, ou a string com a falha * @internal param $string */ public function processarTransacaoPagSeguro($transaction) { // Iniciar variáveis $id_inscricao = null; if (get_class($transaction) != 'PagSeguroTransactionSummary' && get_class($transaction) != 'PagSeguroTransaction') { return "Registro do tipo " . get_class($transaction); } // Plib::var_dump($servico); // Plib::var_dump($transaction); $status = $transaction->getStatus()->getValue(); $id_inscricao = $transaction->getReference(); $valorBruto = $transaction->getGrossAmount(); $valorLiquido = $transaction->getNetAmount(); $taxa = $valorBruto - $valorLiquido; $data = $transaction->getDate(); $data_pagseguro = $transaction->getLastEventDate(); $codigo = $transaction->getCode(); if ($transaction->getPaymentMethod() != null) { $forma_pagamento = $transaction->getPaymentMethod()->getType()->getValue(); } //if ($transaction->getPaymentMethod()->getCode()) //$forma_pagamento = $transaction->getPaymentMethod()->getCode()->getValue(); // if ($id_inscricao!=546) return null; // Plib::var_dump($transaction); if ($id_inscricao == null) { // PLib::var_dump($transaction); // die(); return "Id da inscrição nulo. Codigo Transação: " . $codigo . ". Valor: " . PLib::format_cash($valorBruto) . ". Data: " . $data; } /** @var $inscricao Inscricao */ $inscricao = Inscricoes::getInstance()->getById($id_inscricao); if ($inscricao == null) { return "Transação de inscrição não encontrada no banco de dados: " . $id_inscricao . " - Codigo Transação: " . $codigo; } // Pago? if ($status == 3 || $status == 4) { // Sim // echo $inscricao->pessoa()->nome."<br>"; // var_dump($inscricao->forma_pagamento); // echo "<br>"; if ($inscricao->confirmado != 1 || $inscricao->forma_pagamento_gateway != $forma_pagamento || $inscricao->valor_liquido != $valorLiquido || $inscricao->forma_pagamento != 'Gateway' || $inscricao->confirmado == 0 && strtotime($inscricao->data_cancelamento) < strtotime($data_pagseguro)) { $inscricao->_observacao = "Inscrição confirmada"; $inscricao->confirmarPagamento($status, $data, $valorBruto, $valorLiquido, $taxa, $codigo, $data_pagseguro, $forma_pagamento); } if ($inscricao->status_gateway != $status) { $inscricao = $inscricao->registrarStatusGateway($data_pagseguro, $codigo, $status, $forma_pagamento); } } else { if ($status == 6 || $status == 7) { // 6 - Estorno / 7 - Cancelada // Ainda não - Registrar o que? A situação né... // Se já estava pago e foi para Cancelada, alterar registro, avisar // Se já estava pago, registrar falha, pois é um estorno ou coisa do tipo // Pensar, porque pode ter sido paga em dinheiro, ai tem que reativar e tal, ignorar o cancelado echo "<hr>"; var_dump(strtotime($inscricao->data_confirmacao)); var_dump($inscricao->data_confirmacao); echo "<br>"; var_dump(strtotime($data_pagseguro)); var_dump($data_pagseguro); echo "<br>"; var_dump(strtotime($inscricao->data_confirmacao) < strtotime($data_pagseguro)); echo "<br>"; echo "<br>"; // Cancelada if ($inscricao->confirmado == '1' && $inscricao->forma_pagamento != 'Dinheiro' && $inscricao->forma_pagamento != 'Depósito' && strtotime($inscricao->data_confirmacao) < strtotime($data_pagseguro)) { $inscricao->_observacao = "Pagamento cancelado (desfeito)"; $inscricao->cancelarFalhaPagamento(true); } else { if ($inscricao->confirmado === null) { $inscricao->_observacao = "Pagamento cancelado"; $inscricao->cancelarFalhaPagamento(); } } // Se foi pago em dinheiro, a inscrição permanece confirmada } else { // Registrar status apenas quando não confirmado if ($inscricao->confirmado == null && $inscricao->vencido == null) { $inscricao = $inscricao->registrarStatusGateway($data_pagseguro, $codigo, $status, $forma_pagamento); } } } $inscricao->_status_gateway = $status . " - " . \lib\PagSeguroUtil::getStatusTituloString($status); $inscricao->save(); return $inscricao; }
/** * @param bool|true $considerarDados Irá considerar a forma de pagamento, se está confirmado, para então retornar o título mais realista * @return mixed */ public function titulo_status_gateway($considerarDados = true) { if ($considerarDados) { if ($this->forma_pagamento != 'Gateway') { return null; } else { return PagSeguroUtil::getStatusTituloString($this->status_gateway); } } else { return PagSeguroUtil::getStatusTituloString($this->status_gateway); } }