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?