Ir para conteúdo

POWERED BY:

Arquivado

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

Michael Granados

[Resolvido] Retorno automático do PagSeguro + implementação em PH

Recommended Posts

Grande Michael!

 

Pois é cara...ainda ta dando zica :(

não sei qual é a desse servidor que não funciona CURL. Pior que eu não posso fazer nada, pq é da universidade...

 

Bom...vou tentando me ajeitar aqui por enquanto...fiz um outro esquema de "segurança" nesse meio tempo...até arrumar um jeito do retorno funcionar por completo...

 

Brigadão pela atenção, Michael!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Michael!

 

cara, o retorno funcionou agora...era coisa do servidor mesmo, ao que me disseram, a função curl estava desabilitada...ja foi corrigido e ta tudo ok :)

 

mas agora surgiu outro problema.

 

Sempre que o cliente termina a compra no pagseguro, os dados vão certinhos pro Banco de Dados. Mas quando o cliente paga o boleto e o status muda de "Aguardando Pagto" para "Aprovado" o retorno atualiza o status de todas as compras para "Aprovado" o__O.

 

o meu código era algo assim...(não lembro de cabeça, vou fazer meio portugol)

 

if(status=="Completo" || status=="Aprovado")
{
	$sql = "select * from tabelaPagSeguro where TransacaoID = '$TransacaoID'"
	$res = mysql_query($sql);

			if($res){
					update tabelaPagseguro set Status = StatusNovo
			}
}
else{
 (INSERE OS NOVOS DADOS NA TABELA);
}

você tem alguma ideia de como fazer isso funcionar direito? :(

 

VALEU!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá todos!

 

Pessoal estou com um problema, toda vez que recebo um post através do "Retorno Automatico" e envio o mesmo para validação por meio do torken. As variavés retornam vazias.

 

Peço a ajuda de vocês para descobrir o que está acontecendo.

 

Segue a parte do código que reenvia os dados a 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;
}

// ENVIA DE VOLTA PARA A PagSeguro OS DADOS PARA VALIDAÇÃO
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;
       // Verifica se o status da transação está VERIFICADO
       if (strcmp ($res, "VERIFICADO") == 0)
       {
          $confirma=true;
          break;
       }
    }
    fclose ($fp);
 }
 else
 {
    echo "$errstr ($errno)<br />\n";
    // ERRO HTTP
 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Michael!

Estou tentando fazer um esquema em um site que estou desenvolvendo, e pelo que vi, você é a pessoa mais do que indicada para me ajudar!

O que eu preciso fazer na verdade, acho que é bem simples, mas estou me enrolando aqui.

Eu estou utilizando o carrinho do PagSeguro, e o que preciso fazer é o seguinte: quando a pessoa comprar, eu utilizar o retorno automático para poder apenas tirar a quantidade de unidades que a pessoa comprou da tabela 'produtos' que existe, e que é a que exibe os produtos no site.

Por ex:

No site tem uma guitarra à venda, e ela só tem 1 unidade. Quando a pessoa comprar, automaticamente, retirar 1 unidade do estoque, e ficar zero, não exibindo mais tal guitarra no site, evitando que outra pessoa compre em seguida e acontecer problemas de estoque.

Se eu receber apenas o Prod_ID, já poderia fazer o update em minha tabela, mas não consigo chegar a uma solução!

você poderia me ajudar?

Obrigado e um grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu preciso fazer é mais ou menos o código abaixo (que não funciona, obviamente, só postei para ilustrar melhor o que preciso fazer):

<?php
define ('TOKEN', 'numero_do_token');
if (isset($_POST)) {
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Recebeu o post, verificando junto ao PagSeguro'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export( $_POST, true)); # imprime os dados no arquivo de log
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);  
}
function retorno_automatico (
$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
mysql_connect("localhost","user_db","senha_db"); 
mysql_select_db("nome_db");
mysql_query("UPDATE produtos SET estoque = -'{$produtos[]['ProdQuantidade']}' WHERE cod_prod = '{$produtos[]['ProdID']}'");
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Dados Verificados! Agora minha função funciona normalmente.'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export(array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
        $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
        $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
        $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
        $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
  ), true)); # imprime os dados no arquivo de log
  fwrite($f, "\nSQL: UPDATE produtos SET estoque = -'{$produtos[]['ProdQuantidade']}' WHERE cod_prod = '{$produtos[]['ProdID']}'\n");
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);  
}
require_once("retorno.php");


?>

Seria mais ou menos isso, mas ele deverá buscar todos os produtos vendidos, e em cada registro, procurar pelo ID do produto e atualizar na tabela 'produtos' a quantidade.

 

Se alguém puder ajudar, fico eternamente agradecido!!!

 

Um abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variável "StatusTransacao" pode receber as seguintes variáveis:

 

Completo: Pagamento completo

Aguardando Pagto: Aguardando pagamento do cliente

Aprovado: Pagamento aprovado, aguardando compensação

Em Análise: Pagamento aprovado, em análise pelo PagSeguro

Cancelado: Pagamento cancelado pelo PagSeguro

 

Ai pergunto:

 

Se o cliente escolheu por exemplo realizar o pagamento via boleto bancário o "StatusTransacao" inicial será "Aguardando Pagto", correto?

Quando o cliente realizar o pagamento e o status mudar para "Completo" o PagSeguro enviará para minha URL de retorno outro POST com esta informação? Se sim terei que retornar novamente uma verificação com o TOKEN ? Como funciona essa "atualização" do status da transação?

Sim, o PagSeguro enviará outro POST informando que a transação agora é "Completo", um POST igual ao anterior, só que com o "StatusTransacao" como "Completo".

 

Particularmente eu uso apenas os StatusTransacao do tipo Completo e Aprovado, que são os únicos que me interessam. Daí vale a regra de negócio de cada um.

 

Em PHP ficaria assim...

 

if (in_array($StatusTranacao, array('Completo', 'Aprovado'))) {
  $db->update(...)
}

Olá galera, diante da citação acima, surge a dúvida:

 

1. Ao atualizar o Status da Transação, o PagSeguro muda a $TransacaoID?

2. Qual a melhor prática para atualizar o status? efetuar um outro registro ou tratar pela $Referencia?

 

Vou ilustrar a situação para esclarecer melhor (desculpem a tamanha ignorância!rsrs):

 

O cliente compra um produto no boleto e seu status fica "Aguardando Pgto". Até ai ok, consigo gravar no banco certinho. Quando esse cliente paga o boleto, o pagSeguro me envia um outro POST me atualizando o status da transação, certo? Já verifiquei através de log e realmente ele envia um retorno. O problema: A $TransacaoID veio diferente daquela gravada no banco, quando o cliente efetuou a compra. Ou seja, da forma que eu to tratando, o script não encontrou a transação e tratou a nova $TransacaoID como se fosse uma nova compra.

 

Galera, agradeço e muito qualquer ajuda, pois não consegui obter essa resposta junto ao atendimento do pagseguro.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai galera, se alguem puder dar um help agradeço.

Com o cod do amigo Retuko, fiz o meu, ele gera o arquivo log corretamente, porem, nada de escrever os dados na base.

 

 

<?php
define ('TOKEN', 'xxxxx');
//DEFINE O LOGIN E SENHA PARA CONEXÃO COM O BANCO DE DADOS
$ConnLocal = "xxxxx";
$ConnLogin = "xxxxx"; 
$ConnSenha = "xxxxx";
$ConnDatabase = "xxxxx";
if (isset($_POST)) {
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Recebeu o post, verificando junto ao PagSeguro'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export( $_POST, true)); # imprime os dados no arquivo de log
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);
}
function retorno_automatico (
$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
// CONECTA-SE COM O BANCO DE DADOS MySQL
$Conn = mysql_connect($ConnLocal, $ConnLogin, $ConnSenha) or print ('Não foi possível conectar<br />' . mysql_error());
$db2 = mysql_select_db($ConnDatabase, $Conn) or print(mysql_error());
mysql_query("INSERT INTO PagSeguroTransacoes (TransacaoID, VendedorEmail, Referencia, TipoPagamento, StatusTansacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ) VALUES ('$TransacaoID', '$VendedorEmail', '$Referencia', '$TipoPagamento', '$StatusTansacao', '$CliNome', '$CliEmail', '$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '$NumItens', '$ProdID', '{$produtos[0]['ProdDescricao']}', '{$produtos[0]['ProdValor']}', '$ProdQuantidade'");
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Dados Verificados! Agora minha função funciona normalmente.'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export(array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
  $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
  $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
  $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
  ), true)); # imprime os dados no arquivo de log
  fwrite($f, "\nSQL: INSERT INTO PagSeguroTransacoes (TransacaoID, VendedorEmail, Referencia, TipoPagamento, StatusTansacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ) VALUES ('$TransacaoID', '$VendedorEmail', '$Referencia', '$TipoPagamento', '$StatusTansacao', '$CliNome', '$CliEmail', '$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '$NumItens', '$ProdID', '{$produtos[0]['ProdDescricao']}', '{$produtos[0]['ProdValor']}', '$ProdQuantidade')\n");
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);
}
require_once("retorno.php");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite estou com uma probleminha com pagSeguro você pode me ajudar? Coloquei o Token fiz tudo direitinho, ele roda sem dar error + os valores das veriaveis nao veem? estão todas vazias você sabe o que esta ocorrendo?

 

Roda perfeitamente aparece a mensagem em html dizendo que a compra foi realizada + os valores das variáveis não aparece!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou guardando no banco de dados os dados da transação. Recebí um post do sistema do pagseguro com o status da transação "Em análise", então minha dúvida é: Quando a transação for aprovada eu receberei outro post com os dados? Como ficarei sabendo do fim da transação?

 

Outra coisa que tenho dúvida é como posso testar o sistema de pagamento sem necessitar efetuar um pagamento real? Pois no momento estou tendo que pagar 0,01 real para poder testar se meu sistema recebe os dados corretamente e etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

desculpa por minha ausência no fórum, estive alocado em um cliente onde me consumiu muitas horas de serviço, prometo que vou ler todos os posts com calma e tentar responder todo mundo o mais breve possível. Por enquanto desejo a vocês um ótimo final de semana e assim que possível irei responder todo mundo sobre PagSeguro. Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Eu já tentei de tudo, mas o pior que nem estou recebendo a atualização do pagseguro.log

 

Sendo que meu Token está correto e tal..

 

Segue o código aiii

 

<?php
	session_start();
	include "config.php";
	include "classes/engine.php";
	$engine = Engine::getInstance();
	$mySQL = $engine->loadObject('mySQL');
	$g_linkResource['site'] = $mySQL->connect('site');
	$g_linkResource['server1'] = $mySQL->connect('server1');
	$g_linkResource['server2'] = $mySQL->connect('server2');
	$DB = $engine->loadObject('DB');
	$tools = $engine->loadObject('tools');
	$login = $engine->loadObject('login');
	$poll = $engine->loadObject('poll');
	$eHTML = $engine->loadObject('elementHTML');

connect_db();
define ('TOKEN', 'XXXXXXXXX');

function retorno_automatico 
(
	$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
	$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
	$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
	$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
	$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
)
{
	if (isset($_POST))
	{
		$f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
		fwrite($f, "'Recebeu o post, verificando junto ao PagSeguro'\n"); # escrevendo a mensagem, mais uma quebra de linha
		fwrite($f, var_export( $_POST, true)); # imprime os dados no arquivo de log
		fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
		fclose($f);  
	}
	
	$query = mysql_query("SELECT * from `pagsegurotransacoes` WHERE `TransacaoID` = '".$TransacaoID."'") or die(mysql_error());

	$newEx = explode("-", $Referencia);
	
	$world = $newEx[1];
	$account = $engine->loadObject('account');
	$account->loadByName($newEx[0]);
	$account->load($newEx[1]);	
		
	if(mysql_num_rows($query) == 0)
	{
		mysql_query("INSERT INTO `PagSeguroTransacoes` (TransacaoID, Referencia, CliNome, CliEmail, datahora, StatusTransacao, ProdDescricao, ProdValor) VALUES ($TransacaoID, $Referencia, $CliNome, $CliEmail, $DataTransacao, $StatusTransacao, '".$produtos[0]['ProdDescricao']."', '".$produtos[0]['ProdValor']."')") or die(mysql_error());
	}
	
	$query = mysql_query("SELECT * from `pagsegurotransacoes` WHERE `TransacaoID` = '".$TransacaoID."'") or die(mysql_error());	
		if ($StatusTransacao == 'Completo' OR $StatusTransacao == 'Aprovado')
		{
			$DB->query("SELECT * FROM `global_reg_value` WHERE `str` = '#CASHPOINTS' and `type` = '2' and `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");
			if($DB->num_rows() > 0)
			{
				$fetch = $DB->fetch();
				
				for($i = 1; $i < $NumItens; $i++)
				{
					foreach($produtos as $p)
					{
						if($tools->getTipoByID($ProdID_.$i) == 1)
						{
							$newValor = $tools->getRecebeByID($ProdID_.$i) + $fetch->value;
							$DB->query("UPDATE `global_reg_value` set value = ".$newValor." WHERE `str` = '#CASHPOINTS' and `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");						
						}
						else
						{
							$newValor = $tools->getRecebeByID($ProdID_.$i) + $fetch->diasvip;
							$DB->query("UPDATE `login` set level = 3, `diasvip` = '".$newValor."' WHERE `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");
						}
					}
				}
			}
			else
			{
				$DB->query("INSERT INTO `global_reg_value` VALUES(0,'#CASHPOINTS',0,'2','".$account->getInfo("account_id")."')", "server".$world."");
			
				$DB->query("SELECT * FROM `global_reg_value` WHERE `str` = '#CASHPOINTS' and `type` = '2' and `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");
				$fetch = $DB->fetch();
				
				for($i = 1; $i < $NumItens; $i++)
				{
					foreach($produtos as $p)
					{
						if($tools->getTipoByID($ProdID_.$i) == 1)
						{
							$newValor = $tools->getRecebeByID($ProdID_.$i) + $fetch->value;
							$DB->query("UPDATE `global_reg_value` set value = ".$newValor." WHERE `str` = '#CASHPOINTS' and `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");						
						}
						else
						{
							$newValor = $tools->getRecebeByID($ProdID_.$i) + $fetch->diasvip;
							$DB->query("UPDATE `login` set level = 3, `diasvip` = '".$newValor."' WHERE `account_id` = '".$account->getInfo("account_id")."'", "server".$world."");
						}
					}
				}
			}		
		}
		mysql_query("UPDATE `PagSeguroTransacoes` set StatusTransacao='".$StatusTransacao."' WHERE `TransacaoID` = '".$TransacaoID."'") or die(mysql_error());

		 $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
		fwrite($f, "'Dados Verificados! Agora minha função funciona normalmente.'\n"); # escrevendo a mensagem, mais uma quebra de linha
		fwrite($f, var_export(array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
        $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
        $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
        $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
        $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
		), true)); # imprime os dados no arquivo de log
		fwrite($f, "\nValor Inserido no SQL\n");
		fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
		fclose($f);  
}
require_once("retorno.php");
?>
<html>
  <head>
        <title>Obrigado!</title>
  </head>
  <body>
        <h1>Obrigado, falta muito pouco para liberar seu produto...</h1>
        <p>O pagamento será feito pelo pagseguro e assim que recebermos a confirmação de pagamento, você receberá um e-mail.</p>
  </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem eu estou com 1 duvida que eu reluto em acreditar que não seja ridicula.

Porem como não achei a solução decidi expor aqui ela e saber mais sobre o assunto.

 

 

Bem eu trabalho com o botaão de doação do pagseguro.

 

Queria saber se existe um modo de eu salvar o que o USUARIO esta doando para quando a transação for aprovada eu automaticamente agradeça ou libere algum produto ao mesmo.

 

O problema que a parte de valor fica fora do meu site e não sei como posso fazer para recuperar isso. Tal como usuario e senha do meu usuario.

 

Alguem entendeu o que eu quiz dizer? kkkkkk

 

Se alguem puder responder aguardo ansiosamente.

 

att demondark@hotmail.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava tentando usar o seu script e acabei vrificando que há erros na instrução sql que você está passando, estou passando logo abaixo a instrução correta.

abraços.

 

INSERT INTO PagSeguroTransacoes (TransacaoID, VendedorEmail, Referencia, TipoPagamento, StatusTransacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens) VALUES ('B1A585F7297343BEB7C6D0CDE0E6D81B', 'abscampinas@abs-campinas.com.br', '', 'Boleto', 'Aguardando Pagto', 'jefferson bernardino', 'jefferson@netbuzz.com.br', 'RUA PROFESSOR ADRIANO BOUCAULT', '626', '', 'Vila Lemos', 'CAMPINAS', 'SP', '13100497', '19 32950999', '1');

 

INSERT INTO PagSeguroTransacoesProdutos (ProdID, ProdDescricao, ProdValor, ProdQuantidade ) VALUES ('112', 'Netbuzz', '1', '1');

 

 

Ai galera, se alguem puder dar um help agradeço.

Com o cod do amigo Retuko, fiz o meu, ele gera o arquivo log corretamente, porem, nada de escrever os dados na base.

 

 

<?php
define ('TOKEN', 'xxxxx');
//DEFINE O LOGIN E SENHA PARA CONEXÃO COM O BANCO DE DADOS
$ConnLocal = "xxxxx";
$ConnLogin = "xxxxx"; 
$ConnSenha = "xxxxx";
$ConnDatabase = "xxxxx";
if (isset($_POST)) {
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Recebeu o post, verificando junto ao PagSeguro'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export( $_POST, true)); # imprime os dados no arquivo de log
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);
}
function retorno_automatico (
$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
// CONECTA-SE COM O BANCO DE DADOS MySQL
$Conn = mysql_connect($ConnLocal, $ConnLogin, $ConnSenha) or print ('Não foi possível conectar<br />' . mysql_error());
$db2 = mysql_select_db($ConnDatabase, $Conn) or print(mysql_error());
mysql_query("INSERT INTO PagSeguroTransacoes (TransacaoID, VendedorEmail, Referencia, TipoPagamento, StatusTansacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ) VALUES ('$TransacaoID', '$VendedorEmail', '$Referencia', '$TipoPagamento', '$StatusTansacao', '$CliNome', '$CliEmail', '$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '$NumItens', '$ProdID', '{$produtos[0]['ProdDescricao']}', '{$produtos[0]['ProdValor']}', '$ProdQuantidade'");
  $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
  fwrite($f, "'Dados Verificados! Agora minha função funciona normalmente.'\n"); # escrevendo a mensagem, mais uma quebra de linha
  fwrite($f, var_export(array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
  $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
  $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
  $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
  ), true)); # imprime os dados no arquivo de log
  fwrite($f, "\nSQL: INSERT INTO PagSeguroTransacoes (TransacaoID, VendedorEmail, Referencia, TipoPagamento, StatusTansacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ) VALUES ('$TransacaoID', '$VendedorEmail', '$Referencia', '$TipoPagamento', '$StatusTansacao', '$CliNome', '$CliEmail', '$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '$NumItens', '$ProdID', '{$produtos[0]['ProdDescricao']}', '{$produtos[0]['ProdValor']}', '$ProdQuantidade')\n");
  fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);
}
require_once("retorno.php");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve galera,

 

primeiramente, gostaria de agradecer ao grande suporte de vocês.

Dando uma olhada no fórum consegui fazer funcionar o pagseguro em um cliente, está salvando na base e etc.

 

Porém, a única coisa que ainda não consegui e não encontrei uma explicação em lugar nenhum é de como e onde passar a Referência da transação?

 

No fonte da pág, antes de enviar ao pagseguro, aparece a Referencia da transação:

<input type="hidden" name="Referencia" value="0452" />
Porém no post(do retorno da transação) o campo volta vazio. =/

 

Segue onde estou passando a referencia:

Obs.: Coloquei o cód. direto na refeferencia apenas para ver se o pagseguro me retornava, depois coloco a var com id do produto.

$pagseguro = new pgs(array(
                'Referencia' => "0452",
                'item_frete_1' => $frete,
                'item_peso_1'  => $peso
        ));

Já tentei passar a ref. pelo cliente e também não deu certo.

 

Alguém sabe me dizer se estou passando no lugar certo?

 

Fico no aguardo, falta apenas esta parte da referência para ficar legal a implantação.

 

E mais uma vez, parabéns pela ajuda que vocês dão!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom,

Depois de muito tentar e pesquisar, consegui achar uma solução!!! o/

 

O erro estava em na hora de passar a Referencia.

 

Troquei o post(de envio) da referencia para 'ref_transacao':

segue abaixo um exemplo (item_frete_1 e peso_1 são o calculo do total do frete e do peso do pedido):

$pagseguro = new pgs(array(
                'ref_transacao'   => $pedid,
                'item_frete_1' => $frete,
                'item_peso_1'  => $peso
        ));

O post de retorno, mantém-se o mesmo ou seja, 'Referencia'.

 

Bom, é isso aí, penei pra achar algo que era tão simples.

 

Abraços a todos, espero que ajude alguém =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, alguem pode me dar um help? To precisando meio urgente disso, vamo lá, meu código eu não alterei muito do que foi postado aqui, que era só com intenção de testar mesmo, criei a tabela, etc, ficou assim:

 

mysql_connect("localhost","XXX","XXX"); 
mysql_select_db("XXX");

define('TOKEN','XXX');
require_once("retorno.php");

if (isset($_POST)) {
 $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
 fwrite($f, "'Recebeu o post, verificando junto ao PagSeguro'\n"); # escrevendo a mensagem, mais uma quebra de linha
 fwrite($f, var_export( $_POST, true)); # imprime os dados no arquivo de log
 fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
 fclose($f); 
}

function retorno_automatico (
$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {

mysql_query("INSERT INTO PagSeguroTransacoes (TransacaoID, Referencia, CliNome, CliEmail, datahora, StatusTransacao, ProdDescricao, ProdValor) VALUES ('$TransacaoID','$Referencia','$CliNome', '$CliEmail','$DataTransacao','$StatusTransacao','{$produtos[0]['ProdDescricao']}','{$produtos[0]['ProdValor']}')");

 $f=fopen ('pagseguro.log', 'a'); # o "a" é para ele "appendar" o conteúdo, ou seja, colocar ao final
 fwrite($f, "'Dados Verificados! Agora minha função funciona normalmente.'\n"); # escrevendo a mensagem, mais uma quebra de linha
 fwrite($f, var_export(array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
 	$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
 	$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
 	$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
 	$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
 ), true)); # imprime os dados no arquivo de log
 
 fwrite($f, "\nSQL: INSERT INTO PagSeguroTransacoes (TransacaoID, Referencia, CliNome, CliEmail, datahora, StatusTransacao, ProdDescricao, ProdValor) VALUES ('$TransacaoID','$Referencia', '$CliNome','$CliEmail','$DataTransacao','$StatusTransacao','{$produtos[0]['ProdDescricao']}','{$produtos[0]['ProdValor']}')\n");
 fwrite($f, "\n---------\n\n"); # um espaço para separar as ocorrencias
 fclose($f); 
 
}

Na hora do log, ele me retorna um erro:

Warning: fopen(pagseguro.log) [function.fopen]: failed to open stream: Permission denied

 

Porem, la no phpinfo:

allow_url_fopen On

 

Se alguém puder me dar uma luz, pq não retorna o log e nem grava no banco.

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera,

 

estou com um problema no retorno automatico do pagseguro, abaixo está o codigo que estou usando, ta bem simples, eu recebo o post do pagseguro normalmente, meu token está correto, mas a minha função retorno_automatico não é chamada... Qual pode ser o problema?

 

obrigado e até mais


header('Content-Type: text/html; charset=ISO-8859-1');

require_once("Constantes.php");
require_once("classeConexao.php");

$banco = new banco($BD_LOCAL,$BD_NOME,$BD_USUARIO,$BD_SENHA);
$banco->conecta($BD_TIPO);

function logPagSeguro($msg)
{
	global $BD_LOCAL,$BD_NOME,$BD_USUARIO,$BD_SENHA,$BD_TIPO, $banco;
	$sql = "INSERT INTO LOGPAGSEGURO(DATLOG, DESLOG, HORLOG) VALUES(CURRENT_DATE, '".utf8_decode(str_replace("\'","",$msg))."', CURRENT_TIME)";
	$banco->execSQLSimples($BD_TIPO,$sql);
}

define('TOKEN', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

if($_POST)
{
	foreach($_POST as $key => $value)
	{
		$pagseguro .=  "$key: $value <br>";
	}
	logPagSeguro("Dados recebidos via post: <br>".$pagseguro);
}

function retorno_automatico ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,$CliNumero, $CliComplemento, $CliBairro, $CliCidade,$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens)
{
	foreach($produtos as $produto)
	{
		foreach($produto as $nome => $dados)
		{
			$listaProdutos .= "$nome: $dados <br>";
		}
	}
	logPagSeguro("Entrou na função retorno automático, dados passados como parametro para a função:<br> $VendedorEmail <br> $TransacaoID <br> $Referencia <br> $TipoFrete,$ValorFrete <br> $Anotacao <br> $DataTransacao <br> $TipoPagamento,$StatusTransacao <br> $CliNome <br> $CliEmail <br> $CliEndereco,$CliNumero <br> $CliComplemento <br> $CliBairro <br> $CliCidade <br> $CliEstado <br> $CliCEP <br> $CliTelefone <br> $NumItens <br> $listaProdutos");
}

require_once("retorno.php");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está definindo a função, mas não está chamando ela.

Falta isto.

 

Carlos Eduardo

 

Olá Carlos,

 

quando eu dou o require_once("retorno.php"); estou incluindo a biblioteca do pagseguro na página, a partir desta biblioteca o pagseguro recebe as informações e valida ou não, quando é validado a classe chama a função automaticamente!

 

isso já é definido na biblioteca retorno.php que o pagseguro disponibiliza.

 

O meu problema é que eu recebo todos os dados do pagseguro e defino meu token corretamente mas ele não consegue fazer essa validação e consequentemente não chama a função retorno_automatico

 

Grato pela atenção e até mais

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.