Salve!
Vamos falar um pouco sobre a integração do UOL PagSeguro com aplicações desenvolvidas utilizando o CodeIgniter como framework.
Após muitos testes, buscas pela internet, perguntas em Fórum de discussão, eu consegui fazer pelos meus próprios meios. E compartilho aqui pois acredito que outras pessoas estejam com o mesmo problema.
Enviar as informações de pagamento para o PagSeguro é muito fácil e eu não preciso comentar nada por aqui. O grande “vilão” dessa conversa é o Retorno Automático.
Vamos começar pelo Controler.
Obs. Imagine que essa função seria exatamente a informada nas configurações de retorno do PagSeguro (http://www.seusite.com.br/retorno_automatico).
public function retorno_pagseguro(){ if (count($_POST) > 0) { // POST recebido, indica que é a requisição do NPI. //$npi = new PagSeguroNpi(); $this->load->library(PagSeguroNpi);//Carrega a library $result = $this->PagSeguroNpi->notificationPost(); $transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : ''; if ($result == "VERIFICADO") { //O post foi validado pelo PagSeguro. $source = array('.', ','); $replace = array('', '.'); $pagamento['TransacaoID'] = $_POST['TransacaoID']; $pagamento['Referencia'] = $_POST['Referencia']; $pagamento['TipoPagamento'] = $_POST['TipoPagamento']; $pagamento['StatusTransacao'] = $_POST['StatusTransacao']; $pagamento['Anotacao'] = $_POST['Anotacao']; $pagamento['DataTransacao'] = $_POST['DataTransacao']; $pagamento['ProdValor_1'] = str_replace($source, $replace, $_POST['ProdValor_1']); $this->load->model('financeiro_model');//Carrega a Model $this->financeiro_model->GravaRetorno($pagamento);//Grava os dados recebido if($_POST['StatusTransacao'] == 'Aprovado'){ $histpagto = $this->financeiro_model->GetPagtoByID($_POST['Referencia']); $pag['valor'] = $histpagto[0]->nu_valor; $pag['idanunciante'] = $histpagto[0]->id_anunciante; $this->financeiro_model->AtualizaCredito($pag); $pag['idtransacao'] = $_POST['TransacaoID']; $pag['idpagto'] = $_POST['Referencia']; $this->financeiro_model->AtualizaHistPag($pag); $informacao['status'] = '1'; }elseif($_POST['StatusTransacao'] == 'Em Análise'){ $informacao['status'] = '2'; }elseif($_POST['StatusTransacao'] == 'Aguardando Pagto'){ $informacao['status'] = '3'; }elseif($_POST['StatusTransacao'] == 'Completo'){ $informacao['status'] = '4'; }elseif($_POST['StatusTransacao'] == 'Cancelado'){ $informacao['status'] = '5'; } } else if ($result == "FALSO") { //O post não foi validado pelo PagSeguro. $informacao['status'] = '1000'; } else { //Erro na integração com o PagSeguro. $informacao['status'] = '3'; } } else { // POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro. // No término do checkout o usuário é redirecionado para este bloco. $informacao['status'] = '3'; } $this->load->view('header_interna_view', $page_infos);//Carrega o cabeçalho $this->load->view('empresa/sidebar_view');//Carrega a Sidebar $this->load->view('financeiro/retorno_view', $informacao);//Carrega a view de conteudo $this->load->view('footer_view');//carrega do rodapé }
Agora a library:
<?php header('Content-Type: text/html; charset=ISO-8859-1'); define('TOKEN', '2EEF70CFFCB547DBA7823F19C7D17F24'); class PagSeguroNpi { private $timeout = 20; // Timeout em segundo public function notificationPost() { $postdata = 'Comando=validar&Token='.TOKEN; foreach ($_POST as $key =>$value) { $valued = $this->clearStr($value); $postdata .= "&$key=$valued"; } return $this->verify($postdata); } private function clearStr($str) { if (!get_magic_quotes_gpc()) { $str = addslashes($str); } return $str; } private function verify($data) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml"); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $result = trim(curl_exec($curl)); curl_close($curl); return $result; } } ?>
Testem! Qualquer problema, sugestão ou qualquer outra coisa, deixe um comentário.
Porque no seguinte trecho:
ResponderExcluir//Erro na integração com o PagSeguro.
$informacao['status'] = '3';
}
} else {
// POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
// No término do checkout o usuário é redirecionado para este bloco.
$informacao['status'] = '3';
}
Sempre é atribuído o valor 3?