Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gaw

PagSeguro ¬¬

Recommended Posts

Ao efetuar uma compra percebi que o PagSeguro não está me enviando as informações devolta pois meu Log de retorno fica Vazio, sendo que meu script estava funcionando perfeitamente!

 

Esse é meu código:

 

<?php

// TOKEn da Empresa Gerado pelo PagSeguro
$retorno_token = 'TOKEN';

// Log dos Dados retornados pelo PagSeguro
$log = var_export($_POST, true);

// Nome do Arquivo que receberá os Dados.
$Nome_Arquivo = "log.txt";

// Abrimos o Arquivo.
$Arquivo = fopen($Nome_Arquivo, "ab");

// Array Contendo os Caracteres que serão Substituidos ou Removidos.
$Array_Subst = array(">" => "", ")" => "", "array (" => "", "array ( " => "", "  " => "", "\n" => "");

// Substituimos e/ou Removemos os Caracteres.
$Substitui = strtr($log, $Array_Subst);

// Substituimos ',' por ' = '
$Formatacao_Log  = preg_replace("/','/","' = '",$Substitui);

// Substituimos ', por '
$Formatacao_Log2 = preg_replace("/',/","'",$Formatacao_Log);

// Substituimos ' = ' por '='
$Formatacao_Log3 = preg_replace("/' = '/","'='",$Formatacao_Log2);

// Gravamos as Informações no Arquivo
fwrite($Arquivo, $Formatacao_Log3);

if($log == 0){

echo"Ocorreu um erro ao Armazenar os Dados...<br>";

exit;}

// Fechamo o Arquivo.
fclose($Arquivo);

// Abrimos o Arquivo Novamente.
$Arquivo2 = fopen ($Nome_Arquivo, "r+");

// Pegamos os Dados do Log e armazenamos em uma Variavel
if ($Linha = fgets($Arquivo2, 102400)){

// Criamos um Array com os Dados do Log
$Cria_Array = explode("=", $Linha);

// Contamos quantos Valores o Array tem.
$Contador = count($Cria_Array);

// Definimos uma Variavel que Recebera todas as Informações.
$Dados_Url;

// Fazemos um Loop de acordo com a Quantidade de Valores do Array.
for($i=0; $i<$Contador; $i++){

// Verificamos se $i é Par ou Impar 
$Par = ($i % 2);

// Se $i for Par entra nessa Condição.
if($Par == 0){

// Retiramos os Espaços e as Aspas Simples da String.
$Info_PagSeguro = str_replace(" ", "", str_replace("'", "", $Cria_Array[$i]));

// Guardamos os Dados em uma Variavel.
$Dados_Url .= $Info_PagSeguro."=";

// Se $i for Impar entra nessa Condição.
}else{

// Retiramos as Aspas Simples da String.
$Retira_Aspas = str_replace("'", "", $Cria_Array[$i]);

// Substituimos os Espaços por +
$Info_Cliente = str_replace(' ', '+', $Retira_Aspas);

// Guardamos os Dados em uma Variavel.
$Dados_Url .= $Info_Cliente."&";

}

}

if($Dados_Url == 0){

echo"Os Dados não puderam ser Tratados e Lidos...<br>";

exit;}

}

// Definimos o Tempo de Envio das Informações ao PagSeguro.
$Tempo = 20;

// Juntamos TODOS os Dados que serão Enviados ao PagSeguro.
$Dados_Url_Completo ='Comando=validar&Token='.$retorno_token.'&'.$Dados_Url;

function Envia_Url($Data, $Tmp){

$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, $Tmp);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = trim(curl_exec($curl));
curl_close($curl);

// Retornamos a Resposta do PagSeguro.
return $result;

}

if($Dados_Url_Completo == "Comando=validar&Token=".$retorno_token."&"){

echo"Os Dados não puderam ser enviados ao PagSeguro...<br>";

}

// Fechamos o Arquivo.
fclose ($Arquivo2);

// Guardamos a Resposta do PagSeguro em uma Variavel.
$Verificacao = Envia_Url($Dados_Url_Completo, $Tempo);

if($Verificacao == "VERIFICADO"){

echo"<fieldset><font color='#999'>Seu Pedido foi VERIFICADO, aguarde alguns segundos para que possamos Confirmar os seus Dados</font><br><br><center><img src='img/load.gif'></center></fieldset>";

echo'<meta http-equiv="refresh" content="5;URL=BD.php?'.$Dados_Url.'" />';

}else{

echo"Ocorreu um problema ao VERIFICAR seu pedido, por favor tente novamente!";

}

?>

 

Alguém sabe o que está acontecendo???

Compartilhar este post


Link para o post
Compartilhar em outros sites


if($Verificacao == "VERIFICADO"){

echo"<fieldset><font  color='#999'>Seu Pedido foi VERIFICADO, aguarde alguns segundos para  que possamos Confirmar os seus  Dados</font><br><br><center><img  src='img/load.gif'></center></fieldset>";

echo'<meta http-equiv="refresh" content="5;URL=BD.php?'.$Dados_Url.'" />';

}else{

echo"Ocorreu um problema ao VERIFICAR seu pedido, por favor tente novamente!";

}

?>

 

Alguém sabe o que está acontecendo???

 

Já temos bastante material sobre isso, um grande erro é tentar imprimir os dados na tela, o que eu já falei com você mesmo em um outro tópico que você criou

http://forum.imaster...ost__p__1739645

 

faça o que está descrito nesse post e veja o que está retornando.

http://forum.imaster...ost__p__1678410

 

 

Aproposito não entendo porque você grava o post dentro de um arquivo de texto e no mesmo php você abre e manipula o que tem dentro do arquivo, ao invez de manipular o post direto.

 

Enfim, da uma olhada na API de notificação, creio que esse será mais fácil você entender como funciona.

https://pagseguro.uo...tificacoes.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não estou tentando printar nada na tela, estou tentando guardar em um LOG, estava funcionando, mas do nada o PagSeguro parou de mandar as informações para mim, pq o LOG fica vazio...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esses echos que você está tentando mostrar na tela?

 

tente fazer o que postei anteriormente e fala o resultado, mais coloca SOMENTE o que foi passado, sem nenhum outro código adicional.

 

Para ficar mais fácil, desativa a URL de redirecionamento, e deixa apenas ativado a URL de retorno, vamos ver se desse jeito faz um pouco mais de sentido os posts enviados.

 

Ou tenta implementar a API de notificação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim eu ja havia tentado tratar os dados pelo $_POST mas não consegui... por isso utilizo o arquivo de Texto, mas como disse o LOG vem vazio pq a Variavel que recebe os POSTS do pag seguro vem Vazia!!!

 

Obs não entendi o que você quis dizer com:

 

"tente fazer o que postei anteriormente e fala o resultado, mais coloca SOMENTE o que foi passado, sem nenhum outro código adicional.

 

Para ficar mais fácil, desativa a URL de redirecionamento, e deixa apenas ativado a URL de retorno, vamos ver se desse jeito faz um pouco mais de sentido os posts enviados.

 

Ou tenta implementar a API de notificação."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais agora você fez o que falei?

 

faça o que está descrito nesse post e veja o que está retornando.

http://forum.imasters.com.br/topic/425122-retorno-automatico-impossivel/page__view__findpost__p__1678410

 

 

só copiar o código que estava no link e colocar na sua URL de retorno. O arquivo de texto ainda estava vazio?

 

Veja se não é permissão também no seu arquivo de texto ( deixe 777 ).

 

Fez o que eu falei também na sua conta do PagSeguro?

 

Ou você está apenas se baseando no que você já tinha feito em outros dias...

 

Bom para evitar dor de cabeça, implementar logo a API de notificação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, Gaw.

 

Envie por DM seu email cadastrado no PagSeguro e o último código da transação não recebida para análise.

 

 

 

 

Ficamos à disposição para maiores esclarecimentos.

 

 

Atenciosamente,

 

 

 

Equipe PagSeguro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na Verdade era um erro na URL de Retorno mesmo, o PagSeguro enviou os dados, mas não percebi que eles não atualizaram minha URL, na verdade não estou conseguindo alterar minha URL ¬¬ eu atualizo fala que atualizou etc... mas retorna sempre para a mesma URL (a antiga).

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é simples a pagina que configura o link que ira ser redirecionado no final da compra https://pagseguro.uol.com.br/integracao/pagina-de-redirecionamento.jhtml

 

A pagina que configura o link que ira ser enviado o código de notificação ( usado para a API de notificação ) https://pagseguro.uol.com.br/integracao/notificacao-de-transacoes.jhtml

 

A pagina que configura o link que ira ser enviado o retorno de dados ( o antigo ) https://pagseguro.uol.com.br/integracao/retorno-automatico-de-dados.jhtml

Compartilhar este post


Link para o post
Compartilhar em outros sites

é eu percebi isso, não sei pq eles trocaram essas informações, e tbm não sei pq eles mudaram o modo de retorno automático, ¬¬ isso só está complicando a vida do programador, além do código PHP deles não funcionar, o generico que fiz não vai aguentar outra atualização deles... mas vamos ver o que vai dar, Valeu pela atenção galera e Senartes valeu pelo tempo ^^ de coração vlw pela ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que eles mudaram isso devido as novas funcionalidades das APIs que lançaram recentemente, e o retorno automático é a mesma coisa, envia os posts do mesmo jeito que antes eu não entendi seu ponto de vista.

 

E o codigo PHP para consultar as transações funciona perfeitamente, só não tive tempo de testar a de JAVA porem as outras duas funciona, Você chegou a testar? Usando essas APIs você consegue fazer mágica ( rsrs )

 

Veja o link das bibliotecas: https://pagseguro.uol.com.br/v2/guia-de-integracao/downloads.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde Galera, estou recorrendo a vocês porque já li de tudo e ja fiz de praticamente tudo. Eu possuo um Site de Compras coletivas que ja veio com script pronto, tudo estava funcionando normalmente até segunda feira, desde então nao recebo nenhum tipo de retorno do pagseguro, já tentei a parte de charset verifiquei muita coisa e gostaria da ajuda de vocÊs. Grato. Segue o codigo do meu retorno.

<?php

include_once("../config.php");

include_once("../mysql.php");

include_once("../funcoes.php");

 

$retorno_site = '../'; // Site para onde o usuário vai ser redirecionado

$retorno_token = ConsultaConfig("pagseguro_token"); // Token gerado pelo PagSeguro

 

 

// Validando dados no PagSeguro

 

$PagSeguro = 'Comando=validar';

$PagSeguro .= '&Token=' . $retorno_token;

$Cabecalho = "Retorno PagSeguro";

 

foreach ($_POST as $key => $value){ $value = urlencode(stripslashes($value));

$PagSeguro .= "&$key=$value";

}

 

if (function_exists('curl_exec'))

{

$curl = true;

}

elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen ('ssl://pagseguro.uol.com.br', 443, $errno, $errstr, 30)) )

{

$fsocket = true;

}

elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $errno, $errstr, 30))

{

$fsocket = true;

}

 

if ($curl == true)

{

$ch = curl_init();

 

curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx');

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

 

curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx');

$resp = curl_exec($ch);

 

curl_close($ch);

$confirma = (strcmp ($resp, "VERIFICADO") == 0);

}

elseif ($fsocket == true)

{

$Cabecalho = "POST /Security/NPI/Default.aspx HTTP/1.0\r\n";

$Cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n";

$Cabecalho .= "Content-Length: " . strlen($PagSeguro) . "\r\n\r\n";

 

if ($fp || $errno>0)

{

fputs ($fp, $Cabecalho . $PagSeguro);

$confirma = false;

$resp = '';

while (!feof($fp))

{

$res = @fgets ($fp, 1024);

$resp .= $res;

if (strcmp ($res, "VERIFICADO") == 0)

{

$confirma=true;

break;

}

}

fclose ($fp);

}

else

{

echo "$errstr ($errno)<br />\n";

}

}

 

 

if ($confirma) {

 

// Recebendo Dados

$TransacaoID = $_POST['TransacaoID'];

$VendedorEmail = $_POST['VendedorEmail'];

$Referencia = $_POST['Referencia'];

$TipoFrete = $_POST['TipoFrete'];

$ValorFrete = $_POST['ValorFrete'];

$Extras = $_POST['Extras'];

$Anotacao = $_POST['Anotacao'];

$TipoPagamento = $_POST['TipoPagamento'];

$StatusTransacao = $_POST['StatusTransacao'];

$CliNome = $_POST['CliNome'];

$CliEmail = $_POST['CliEmail'];

$CliEndereco = $_POST['CliEndereco'];

$CliNumero = $_POST['CliNumero'];

$CliComplemento = $_POST['CliComplemento'];

$CliBairro = $_POST['CliBairro'];

$CliCidade = $_POST['CliCidade'];

$CliEstado = $_POST['CliEstado'];

$CliCEP = $_POST['CliCEP'];

$CliTelefone = $_POST['CliTelefone'];

$NumItens = $_POST['NumItens'];

 

// Gravando Dados

 

if ($StatusTransacao == 'Completo' || $StatusTransacao == 'Aprovado') {

 

 

 

 

$grav = mysql_query("INSERT into pagsegurotransacoes SET

TransacaoID='$TransacaoID',

VendedorEmail='$VendedorEmail',

Referencia='$Referencia',

TipoFrete='$TipoFrete',

ValorFrete='$ValorFrete',

Extras='$Extras',

Anotacao='$Anotacao',

TipoPagamento='$TipoPagamento',

StatusTransacao='$StatusTransacao',

CliNome='$CliNome',

CliEmail='$CliEmail',

CliEndereco='$CliEndereco',

CliNumero='$CliNumero',

CliComplemento='$CliComplemento',

CliBairro='$CliBairro',

CliCidade='$CliCidade',

CliEstado='$CliEstado',

CliCEP='$CliCEP',

CliTelefone='$CliTelefone',

NumItens='$NumItens',

ok='1',

Data=now();");

 

 

 

$atualiz = mysql_query("update compras set status_compra='PAGO' where referencia='$Referencia' and status_compra!='PAGO'") or print(mysql_error());

 

if($atualiz){

$pegdados = mysql_query("select * from compras left join usuarios on (compras.idusuario=usuarios.idusuarios) where compras.referencia='$Referencia'");

$dds = mysql_fetch_array($pegdados);

AvisaCompraPaga($dds['idcompras']);

CriaCupons("iddacompra",$dds['idcompras']);

$updOkpg = mysql_query("update pagsegurotransacoes set ok='1' where Referencia='$Referencia'") or print(mysql_error());

}

 

}else{

 

 

$grav = mysql_query("INSERT into pagsegurotransacoes SET

TransacaoID='$TransacaoID',

VendedorEmail='$VendedorEmail',

Referencia='$Referencia',

TipoFrete='$TipoFrete',

ValorFrete='$ValorFrete',

Extras='$Extras',

Anotacao='$Anotacao',

TipoPagamento='$TipoPagamento',

StatusTransacao='$StatusTransacao',

CliNome='$CliNome',

CliEmail='$CliEmail',

CliEndereco='$CliEndereco',

CliNumero='$CliNumero',

CliComplemento='$CliComplemento',

CliBairro='$CliBairro',

CliCidade='$CliCidade',

CliEstado='$CliEstado',

CliCEP='$CliCEP',

CliTelefone='$CliTelefone',

NumItens='$NumItens',

ok='1',

Data=now();");

 

 

$updOkpg = mysql_query("update pagsegurotransacoes set ok='1' where Referencia='$Referencia'") or print(mysql_error());

}

 

 

 

}

mysql_close();

 

Header("Location: $retorno_site"); exit();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Temos um tópico criado a muito tempo atras, com inumeras discursões problemas e soluções sobre o retorno automático. Veja o link: http://forum.imasters.com.br/topic/295416-retorno-automatico-pagseguro/

Tente pesquisar um pouco antes de perguntar...

 

Caso queira migrar para a API de notificação, aconselho você dar uma olhada nesse tutorial.

http://sounoob.com.br/2011/09/06/recebendo-notificacoes-do-pagseguro-usando-php-sem-utilizar-a-biblioteca-oficial/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.