Beispiel #1
0
 public function processar()
 {
     $this->load->library('cielo');
     $this->language->load('payment/cielo');
     $this->load->model('checkout/order');
     $this->load->model('payment/cielo');
     $json = array();
     if ($this->validar()) {
         try {
             $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
             $valor_total = $order_info['total'];
             $cielo_taxas = $this->config->get('cielo_taxas');
             if (!empty($cielo_taxas)) {
                 foreach ($cielo_taxas as $taxa) {
                     if ($taxa['parcelas'] == $this->request->post["formaPagamento"]) {
                         $this->model_checkout_order->setTaxaPagamento($this->session->data['order_id'], (double) $taxa['valor'], $taxa['tipo']);
                         break;
                     }
                 }
             }
             $loja = new \Tritoq\Payment\Cielo\Loja();
             $loja->setNomeLoja(substr($order_info['store_name'], 0, 13))->setAmbiente(\Tritoq\Payment\Cielo\Loja::AMBIENTE_PRODUCAO)->setUrlRetorno($this->url->link('payment/cielo/callback'))->setChave($this->config->get('cielo_chave'))->setNumeroLoja($this->config->get('cielo_afiliacao'))->setSslCertificado(DIR_SYSTEM . 'library/Tritoq/Payment/Cielo/ssl/ecommerce.cielo.com.br.cer');
             if ($this->config->get('cielo_teste') == '1') {
                 $loja->setAmbiente(\Tritoq\Payment\Cielo\Loja::AMBIENTE_TESTE)->setChave(\Tritoq\Payment\Cielo\Loja::LOJA_CHAVE_AMBIENTE_TESTE)->setNumeroLoja(\Tritoq\Payment\Cielo\Loja::LOJA_NUMERO_AMBIENTE_TESTE);
             }
             $cartao = new \Tritoq\Payment\Cielo\Cartao();
             $cartao->setNumero($this->request->post['creditcard_ccno'])->setCodigoSegurancaCartao($this->request->post['creditcard_cccvd'])->setBandeira($this->request->post['creditcard_cctype'])->setNomePortador($this->request->post['creditcard_name'])->setValidade($this->request->post['validade']);
             $transacao = new \Tritoq\Payment\Cielo\Transacao();
             $transacao->setAutorizar($this->config->get('cielo_autorizacao'))->setCapturar(\Tritoq\Payment\Cielo\Transacao::CAPTURA_SIM)->setParcelas(1)->setProduto(\Tritoq\Payment\Cielo\Transacao::PRODUTO_CREDITO_AVISTA);
             if (!$this->config->get('cielo_captura')) {
                 $transacao->setCapturar(\Tritoq\Payment\Cielo\Transacao::CAPTURA_NAO);
             }
             if ($this->request->post["formaPagamento"] == 'A') {
                 $transacao->setProduto(\Tritoq\Payment\Cielo\Transacao::PRODUTO_DEBITO);
             } else {
                 if ($this->request->post["formaPagamento"] != '1') {
                     $transacao->setProduto($this->config->get('cielo_parcelamento'));
                     $transacao->setParcelas($this->request->post["formaPagamento"]);
                     if ($this->config->get('cielo_parcelamento') == \Tritoq\Payment\Cielo\Transacao::PRODUTO_PARCELADO_LOJA) {
                         $valor_total = $this->juroComposto($valor_total, $this->request->post["formaPagamento"], $this->config->get('cielo_parcela_juros'));
                     }
                 }
             }
             $pedido = new \Tritoq\Payment\Cielo\Pedido();
             $pedido->setDataHora(new \DateTime())->setDescricao('Compra na loja ' . $order_info['store_name'])->setIdioma(\Tritoq\Payment\Cielo\Pedido::IDIOMA_PORTUGUES)->setNumero($this->session->data['order_id'])->setValor(preg_replace('/[^0-9]/', '', number_format($valor_total, 2)));
             if ($this->config->get('cielo_teste') == '1') {
                 $pedido->setValor(preg_replace('/[^0-9]/', '', ceil($valor_total) . '00'));
             }
             $portador = new \Tritoq\Payment\Cielo\Portador();
             $portador->setBairro($order_info['payment_address_2'])->setCep($order_info['payment_postcode'])->setEndereco($order_info['payment_address_1']);
             if ($this->config->get('cielo_analise') == '1') {
                 $country_code = $this->model_payment_cielo->getCountryCodeById($order_info['payment_country_id']);
                 $zone_code = $this->model_payment_cielo->getZoneCodeById($order_info['payment_zone_id']);
                 $pedidoAnalise = new \Tritoq\Payment\Cielo\AnaliseRisco\PedidoAnaliseRisco();
                 $pedidoAnalise->setEstado($zone_code)->setCep($order_info['payment_postcode'])->setCidade($order_info['payment_city'])->setEndereco($order_info['payment_address_1'])->setId($this->request->post['pedido'])->setPais($country_code)->setPrecoTotal(str_replace(',', '.', $valor_total));
                 if ($order_info['shipping_country_id'] != $order_info['payment_country_id']) {
                     $country_code = $this->model_payment_cielo->getCountryCodeById($order_info['shipping_country_id']);
                 }
                 if ($order_info['shipping_zone_id'] != $order_info['payment_zone_id']) {
                     $zone_code = $this->model_payment_cielo->getZoneCodeById($order_info['shipping_zone_id']);
                 }
                 $cliente = new \Tritoq\Payment\Cielo\AnaliseRisco\ClienteAnaliseRisco();
                 $cliente->nome = $order_info['firstname'];
                 $cliente->sobrenome = $order_info['lastname'];
                 $cliente->endereco = $order_info['shuipping_address_1'];
                 $cliente->complemento = '';
                 $cliente->cep = $order_info['shipping_postcode'];
                 $cliente->documento = '';
                 $cliente->email = $order_info['email'];
                 $cliente->estado = $zone_code;
                 $cliente->cidade = $order_info['shipping_city'];
                 $cliente->id = $this->customer->getId();
                 $cliente->ip = $order_info['ip'];
                 $cliente->pais = $country_code;
                 $cliente->telefone = $this->customer->getTelephone();
                 /*
                  *
                  * Usando a Análise de Risco
                  *
                  */
                 // Para qualquer ação será revista com ação manual posterior, caso seja de baixo risco, a transação será capturada automaticamente
                 $analise = new \Tritoq\Payment\Cielo\AnaliseRisco();
                 $analise->setCliente($cliente)->setPedido($pedidoAnalise)->setAfsServiceRun(true)->setAltoRisco(\Tritoq\Payment\Cielo\AnaliseRisco::ACAO_MANUAL_POSTERIOR)->setMedioRisco(\Tritoq\Payment\Cielo\AnaliseRisco::ACAO_MANUAL_POSTERIOR)->setBaixoRisco(\Tritoq\Payment\Cielo\AnaliseRisco::ACAO_CAPTURAR)->setErroDados(\Tritoq\Payment\Cielo\AnaliseRisco::ACAO_MANUAL_POSTERIOR)->setErroIndisponibilidade(\Tritoq\Payment\Cielo\AnaliseRisco::ACAO_MANUAL_POSTERIOR)->setDeviceFingerPrintID(md5($this->config->get('config_name')));
                 $service = new \Tritoq\Payment\Cielo\CieloService(array('portador' => $portador, 'loja' => $loja, 'cartao' => $cartao, 'transacao' => $transacao, 'pedido' => $pedido, 'analise' => $analise));
                 // Setando o tipo de versão de conexão SSL
                 $service->setSslVersion(4);
                 // Desabilitando a analise de risco
                 $service->setHabilitarAnaliseRisco(true);
                 $gerarToken = false;
                 $checkAvs = true;
             } else {
                 $service = new \Tritoq\Payment\Cielo\CieloService(array('portador' => $portador, 'loja' => $loja, 'cartao' => $cartao, 'transacao' => $transacao, 'pedido' => $pedido));
                 // Setando o tipo de versão de conexão SSL
                 $service->setSslVersion(4);
                 // Desabilitando a analise de risco
                 $service->setHabilitarAnaliseRisco(false);
                 $gerarToken = false;
                 $checkAvs = false;
             }
             $service->doTransacao($gerarToken, $checkAvs);
             $urlAutenticacao = (string) $transacao->getUrlAutenticacao();
             if ($transacao->getStatus() == \Tritoq\Payment\Cielo\Transacao::STATUS_AUTORIZADA || $transacao->getStatus() == \Tritoq\Payment\Cielo\Transacao::STATUS_CAPTURADA) {
                 $finalizacao = 'Aprovado';
                 $comentario = "Situação: " . $finalizacao . "<br />";
                 $comentario .= " Pedido: " . (string) $pedido->getNumero() . "<br />";
                 $comentario .= " TID: " . (string) $transacao->getTid() . "<br />";
                 $comentario .= " Cartão: " . strtoupper((string) $cartao->getBandeira()) . "<br />";
                 $comentario .= " Parcelado em: " . (string) $transacao->getParcelas() . "x";
                 $this->model_checkout_order->addOrderHistory((string) $pedido->getNumero(), $this->config->get('cielo_aprovado_id'), $comentario, true);
                 $requisicoes = $transacao->getRequisicoes(\Tritoq\Payment\Cielo\Transacao::REQUISICAO_TIPO_TRANSACAO);
                 $requisicao = current($requisicoes);
                 if (is_array($requisicao)) {
                     $requisicao = current($requisicao);
                 }
                 $xmlRetorno = $requisicao->getXmlRetorno();
                 $data = $this->model_payment_cielo->parseData($xmlRetorno);
                 $this->model_payment_cielo->addTransaction($data);
                 $json['redirect'] = $this->url->link('checkout/success');
             } else {
                 if (!empty($urlAutenticacao)) {
                     $requisicoes = $transacao->getRequisicoes(\Tritoq\Payment\Cielo\Transacao::REQUISICAO_TIPO_TRANSACAO);
                     $requisicao = current($requisicoes);
                     if (is_array($requisicao)) {
                         $requisicao = current($requisicao);
                     }
                     $xmlRetorno = $requisicao->getXmlRetorno();
                     $data = $this->model_payment_cielo->parseData($xmlRetorno);
                     $this->model_payment_cielo->addTransaction($data);
                     $json['redirect'] = $urlAutenticacao;
                 } else {
                     $requisicoes = $transacao->getRequisicoes(\Tritoq\Payment\Cielo\Transacao::REQUISICAO_TIPO_TRANSACAO);
                     $requisicao = current($requisicoes);
                     if (is_array($requisicao)) {
                         $requisicao = current($requisicao);
                     }
                     $errors = $requisicao->getErrors();
                     if (!empty($errors)) {
                         foreach ($errors as $error) {
                             $this->error[] = isset($error->mensagem) ? utf8_decode((string) $error->mensagem) : $error;
                         }
                     }
                 }
             }
         } catch (\Exception $e) {
             $this->error = array_merge((array) $this->error, array($e->getMessage()));
         }
     }
     if (!empty($this->error)) {
         $json['error'] = $this->error;
     }
     $this->response->addHeader('Content-Type: application/json');
     $this->response->setOutput(json_encode($json));
 }