Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Galera,
Estou implementando o PagSeguro no site, mas fiz a primeira compra, teste, para ver como se comportava o sistema.
Segue abaixo o código:
header('Content-Type: text/html; charset=ISO-8859-1');
define('TOKEN', 'MEUTOKEN');
class PagSeguroNpi {
private $timeout = 20; // Timeout em segundos
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;
}
}
if (count($_POST) > 0) {
// POST recebido, indica que é a requisição do NPI.
$npi = new PagSeguroNpi();
$result = $npi->notificationPost();
$dataAtual = date("Y-m-d");
$transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';
if ($result == "VERIFICADO") {
$ProdValor = isset($_POST['ProdValor_1']) ? $_POST['ProdValor_1'] : '';
$DataTransacao = isset($_POST['DataTransacao']) ? $_POST['DataTransacao'] : '';
$TipoPagamento = isset($_POST['TipoPagamento']) ? $_POST['TipoPagamento'] : '';
$StatusTransacao = isset($_POST['StatusTransacao']) ? $_POST['StatusTransacao'] : '';
if ($StatusTransacao == "Completo") {
$diaAtual = date("d");
$mesAtual = date("m");
$anoAtual = date("Y");
$dataAtivo = $anoAtual."-".$mesAtual."-".$diaAtual;
$diasMes = cal_days_in_month(CAL_GREGORIAN, $mesAtual, $anoAtual);
if ( ($diaAtual + 7) <= $diasMes ) {
$diaValidade = $diaAtual + 7;
$mesValidade = $mesAtual;
$anoValidade = $anoAtual;
} else {
if ( ($mesAtual + 1) <= 12) {
$diaValidade = ($diaAtual + 7) - $diasMes;
$mesValidade = $mesAtual + 1;
$anoValidade = $anoAtual;
} else {
$diaValidade = ($diaAtual + 7) - $diasMes;
$mesValidade = ($mesAtual + 1) - 12;
$anoValidade = $anoAtual + 1;
}
}
$dataValidade = $anoValidade."-".$mesValidade."".$diaValidade;
} else {
$dataAtivo == NULL;
$dataValidade == NULL;
}
$ProdID = isset($_POST['ProdID_1']) ? $_POST['ProdID_1'] : '';
if (isset($_POST['ProdID_1'])) {
$numCod = strlen($ProdID) - 1;
$TipCod = substr($ProdID,0,1);
if ($TipCod == "A") {
$anuncio_codigo = substr($ProdID,1,$numCod);
$s_anuncio = "SELECT * FROM classificados_anuncio WHERE codigo='$anuncio_codigo'";
$query_s_anuncio = mysql_query($s_anuncio);
if($query_s_anuncio){
$rows_s_anuncio = mysql_num_rows($query_s_anuncio);
if($rows_s_anuncio == 1){
$s_pagamento = "SELECT * FROM pagamento_anuncio WHERE codigo_anuncio='$anuncio_codigo' AND '$dataAtual' BETWEEN data_ativo AND data_validade ORDER BY data_validade DESC";
$query_s_pagamento = mysql_query($s_pagamento);
if($query_s_pagamento){
$rows_s_pagamento = mysql_num_rows($query_s_pagamento);
if($rows_s_pagamento == 0){
$i_pagamento = "INSERT INTO pagamento_anuncio (codigo_anuncio,valor,data_pagamento,data_ativo,data_validade,pagamento,definicao) VALUES ('$anuncio_codigo','$ProdValor','$DataTransacao','$dataAtivo','$dataValidade','$TipoPagamento','$StatusTransacao')";
}elseif($rows_s_pagamento == 1){
$pagamento_codigo = mysql_result($query_s_pagamento,0,codigo);
if(isset($pagamento_codigo)){
$u_pagamento = "UPDATE pagamento_anuncio SET data_ativo='$dataAtivo' AND data_validade='$dataValidade' AND definicao='$StatusTransacao' WHERE codigo='$pagamento_codigo'";
$query_u_pagamento = mysql_query($u_pagamento);
}
}
}
}
}
} else if ($TipCod == "C") {
$carro_placa = substr($ProdID,1,$numCod);
$s_carro = "SELECT * FROM carro WHERE placa='$carro_placa'";
$query_s_carro = mysql_query($s_carro);
if($query_s_carro){
$rows_s_carro = mysql_num_rows($query_s_carro);
if($rows_s_carro == 1){
$s_pagamento = "SELECT * FROM pagamento_carro WHERE placa='$carro_placa' AND '$dataAtual' BETWEEN data_ativo AND data_validade ORDER BY data_validade DESC";
$query_s_pagamento = mysql_query($s_pagamento);
if($query_s_pagamento){
$rows_s_pagamento = mysql_num_rows($query_s_pagamento);
if($rows_s_pagamento == 0){
$i_pagamento = "INSERT INTO pagamento_carro (placa,valor,data_pagamento,data_ativo,data_validade,pagamento,definicao) VALUES ('$carro_placa','$ProdValor','$DataTransacao','$dataAtivo','$dataValidade','$TipoPagamento','$StatusTransacao')";
}elseif($rows_s_pagamento == 1){
$pagamento_codigo = mysql_result($query_s_pagamento,0,codigo);
if(isset($pagamento_codigo)){
$u_pagamento = "UPDATE pagamento_carro SET data_ativo='$dataAtivo' AND data_validade='$dataValidade' AND definicao='$StatusTransacao' WHERE codigo='$pagamento_codigo'";
$query_u_pagamento = mysql_query($u_pagamento);
}
}
}
}
}
} else if ($TipCod == "L") {
$loja_cnpj = substr($ProdID,1,$numCod);
$s_loja = "SELECT * FROM empresa_loja WHERE cnpj='$loja_cnpj'";
$query_s_loja = mysql_query($s_loja);
if($query_s_loja){
$rows_s_loja = mysql_num_rows($query_s_loja);
if($rows_s_loja == 1){
$s_pagamento = "SELECT * FROM pagamento_empresa WHERE placa='$carro_placa' AND '$dataAtual' BETWEEN data_ativo AND data_validade ORDER BY data_validade DESC";
$query_s_pagamento = mysql_query($s_pagamento);
if($query_s_pagamento){
$rows_s_pagamento = mysql_num_rows($query_s_pagamento);
if($rows_s_pagamento == 0){
$i_pagamento = "INSERT INTO pagamento_empresa (cnpj,valor,data_pagamento,data_ativo,data_validade,pagamento,definicao) VALUES ('$loja_cnpj','$ProdValor','$DataTransacao','$dataAtivo','$dataValidade','$TipoPagamento','$StatusTransacao')";
}elseif($rows_s_pagamento == 1){
$pagamento_codigo = mysql_result($query_s_pagamento,0,codigo);
if(isset($pagamento_codigo)){
$u_pagamento = "UPDATE pagamento_empresa SET data_ativo='$dataAtivo' AND data_validade='$dataValidade' AND definicao='$StatusTransacao' WHERE codigo='$pagamento_codigo'";
$query_u_pagamento = mysql_query($u_pagamento);
}
}
}
}
}
} else if ($TipCod == "V") {
$venda_codigo = substr($ProdID,1,$numCod);
} else if ($TipCod == "P") {
$publicidade_codigo = substr($ProdID,1,$numCod);
$s_publicidade = "SELECT * FROM publicidade WHERE codigo='$publicidade_codigo'";
$query_s_publicidade = mysql_query($s_publicidade);
if($query_s_publicidade){
$rows_s_publicidade = mysql_num_rows($query_s_publicidade);
if($rows_s_publicidade == 1){
$s_pagamento = "SELECT * FROM pagamento_publicidade WHERE codigo_publicidade='$publicidade_codigo'";
$query_s_pagamento = mysql_query($s_pagamento);
if($query_s_pagamento){
$rows_s_pagamento = mysql_num_rows($query_s_pagamento);
if($rows_s_pagamento == 0){
$i_pagamento = "INSERT INTO pagamento_publicidade (codigo_publicidade,valor,data_pagamento,pagamento,definicao) VALUES ('$publicidade_codigo','$ProdValor','$DataTransacao','$TipoPagamento','$StatusTransacao')";
}elseif($rows_s_pagamento >= 1){
$pagamento_codigo = mysql_result($query_s_pagamento,0,codigo);
if(isset($pagamento_codigo)){
$u_pagamento = "UPDATE pagamento_empresa SET definicao='$StatusTransacao' WHERE codigo='$pagamento_codigo'";
$query_u_pagamento = mysql_query($u_pagamento);
}
}
}
}
}
}
}
//O post foi validado pelo PagSeguro.
} else if ($result == "FALSO") {
//O post não foi validado pelo PagSeguro.
$c = base64_encode('FALSO');
if($c){
header("location: pagVer.php?c=".$c);
} $c = base64_encode('ERRO');
if($c){
header("location: pagVer.php?c=".$c);
}
}
} 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.
$c = base64_encode('VERIFICANDO');
if($c){
header("location: pagVer.php?c=".$c);
}
}
Só que, pelo código que fiz, o sistema informa o status da transação, qual o valor, qual a forma de pagamento e assim vai...
Mas quando iniciei a transação escolhi o pagamento por boleto bancário, ele não acusou nada!
Por que? O Código está errado?
Vi e revi esse código e não achei erro algum! Será que os olhares críticos de vocês acham?
Agradeço
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/domains/nitroso.com.br/web/pagRec.php on line 8
Acusando para a linha:
private $timeout = 20; // Timeout em segundos
>
Amigo, no blog do pagseguro tem um TestServer para você rodar aplicações localmente, teste nele vale a pena.
Abs.
Já entrei, já tentei fazer roda-ló online ou localmente, mas sem sucesso!
Não entendi as instruções dadas!
Tirei os termos: private e public. Não apareceu mais o erro, mas mesmo assim não funciona!
Pedir para imprimir o trecho **count($_POST)** e ele retornou **0 (zero)**.
Isso que dizer que não estou recebendo nenhum **$_POST** do PagSeguro?
Estou com muita dor de cabeça, já gastei mais de R$60,00 testando esse PagSeguro e nenhuma informação chega no meu Banco de Dados! (Está bem que volta uma parte para mim, mas a outra fica no PagSeguro mesmo!)
O que eu faço?
Metade da minha dor de cabeça foi pra o espaço!
Acabei de ler esse tópico: Retorno Automático PagSeguro
Lá ele explica que o primeiro acesso a Página de Retorno Automático não é enviado $_POST, por isso não recebi nenhum post!
Porém não sei como está se comportando depois disso, ou seja, o "robô" do PagSeguro faz o Contato diretamente com essa página de Retorno e eu não vou poder visualizar por que meu banco de dados não está sendo alimentado!
Como eu faço isso?
Já tentei instalar o TesteServer do PagSeguro (que se tem em diversas páginas na WEB!) só que não tive sucesso em nenhuma delas!
>
Acabei de ler esse tópico: Retorno Automático PagSeguro
Lá ele explica que o primeiro acesso a Página de Retorno Automático não é enviado $_POST, por isso não recebi nenhum post!
Porém não sei como está se comportando depois disso, ou seja, o "robô" do PagSeguro faz o Contato diretamente com essa página de Retorno e eu não vou poder visualizar por que meu banco de dados não está sendo alimentado!
Como eu faço isso?
Passo a passo para voce ai...
Caso ja tenha feito algum deles, apenas verifique novamente para ver se as está lá configurado bunitinho...
1 - Ative o retorno automático, e aponte uma URL - https://pagseguro.uol.com.br/preferences/automaticReturn.jhtml
2 - Na URL recem criada, capture os posts enviados para ver o que o PagSeguro esta lhe enviando... http://forum.imasters.com.br/topic/425122-retorno-automatico-impossivel/page__p__1678410#entry1678410
Legal chegou perfeito? agora é fazer a validação do post, para ver se foi o pagSeguro realmente que enviou, trocando o conteúdo da url de retorno por... FIQUE ATENTO NOS COMENTARIOS
<?php
//Configurando tipo do documento para html; forçando codificaçao ISO;
header('Content-Type: text/html; charset=ISO-8859-1');
//Definindo TOKEN;
define('TOKEN', 'cole aqui o token do vendedor');
Class createLog{
//especificando nome padrao do arquivo a ser criado
private $name = 'ps.txt';
//especificando tipo de acesso ao stream.
private $type = 'ab';
//criando parametro para guardar o log
public $log;
//altera tipo de acesso ao stream.
function setType($type) {
$this -> type = $type;
}function setFileName($name){
$this -> name = $name;
}public function setLog($log){
$this -> log = $this -> log . $log;
}public function createlog(){
$f = fopen ($this -> name, $this -> type);
fwrite($f, $this -> log . "\n\n");
fclose($f);
}
}
Class PagSeguroNpi {
//especificando tempo limite em segundos
private $timeout = 20;
//formata os dados a serem enviados ao PagSeguro
public function notificationPost() {
//Incluindo token e a acao de validar ao $postdata
$postdata = 'Comando=validar&Token='.TOKEN;
//incluindo dados do post ao $postdata
foreach ($_POST as $key => $value) {
//limpando os valores do post
$valued = $this->clearStr($value);
//incluindo na string $postdata
$postdata .= "&$key=$valued";
}
//verificando se o post foi enviado pelo PagSeguro
$result = $this -> verify($postdata);
//Retornando VERIFICADO ou FALSO
return $result;
}private function clearStr($str) {
//verificando se o servidor esta configurado para adicionar barras invertidas em: aspas simples ('), aspas duplas ("), barra invertida (\) e NUL (o byte NULL).
if (!get_magic_quotes_gpc()) {
//Adicionando barras invertidas em: aspas simples ('), aspas duplas ("), barra invertida (\) e NUL (o byte NULL).
$str = addslashes($str);
}
//retornando a string;
return $str;
}private function verify($data) {
//Iniciando o CURL;
$curl = curl_init();
//Especificando destino
curl_setopt($curl, CURLOPT_URL, "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml");
//Definindo metodo POST
curl_setopt($curl, CURLOPT_POST, true);
//Definindo dados do formulario
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//Definindo exibicao da resposta proveniente do servidor de destino
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//Definindo saida de cabecalho na pagina
curl_setopt($curl, CURLOPT_HEADER, false);
//Definindo timeout
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
//Definindo validacao de SSL
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//Atribuindo a resposta do servidor de destino em $return
$result = trim(curl_exec($curl));
//Fechando a conexao
curl_close($curl);
//retornando a resposta do servidor : VERIFICADO ou FALSO
return $result;
}
}$log = new createLog();
//Criando primeiro registro de log com "POST @ dia/mes/ano hora:minutos:segundos";
$log -> setLog("POST @ " . date("d/m/Y H:i:s") . "\n");
// Iniciando requisicao do NPI.
$npi = new PagSeguroNpi();
//verificando se os dados foi enviado pelo PagSeguro
$result = $npi->notificationPost();
//verificando se o PagSeguro validou
if ($result == "VERIFICADO") {
/*
* Aqui voce podera inserir seus dados no banco de dados, enviar email para o cliente avisando alteracao de status de pagamento, enfim fazer seu tratamento de retorno.
*
*/
//Inserindo todos posts dentro do log
$log -> setLog("<pre>" . var_export($_POST, true) . "</pre>\n<--------------->\n");
} else if ($result == "FALSO") {
/*
* Se cair aqui, significa que seu token esta incorreto, ou seus dados ainda estao utilizando outra codificacao diferente de ISO-8859-1
*
*/
//O post nao foi validado pelo PagSeguro.
$log -> setLog('O post nao foi validado pelo PagSeguro'); $log -> setLog('Erro na integracao com o PagSeguro.');
} * Quando seu sistema estiver devidamente implantado, voce podera comentar esse codigo $log -> createlog();
*
*/
$log -> createlog();
} else {
/*
* Aqui significa que a pagina foi acessada de um navegador e/ou nao chegou nenhum post
* Aqui voce podera inserir sua agradecendo ao cliente ex:
*
*/
?>
<h3>Obrigado por efetuar a compra.</h3>
<?php
}
?>Senartes, entendi!
Isso vai dar o que eu quero saber, onde está o erro!
Vou testar já já eu posto aqui!
Amigo, no blog do pagseguro tem um TestServer para você rodar aplicações localmente, teste nele vale a pena.
Abs.