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)); }