Ir para conteúdo

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

Aprovado -> O Pagamento foi efetuado com sucesso pelo cliente e

Completo -> O Pagamento foi efetuado com sucesso pelo cliente e além disso o PagSeguro já liberou este valor na sua conta (isso vale também para devoluções e estornos).

"Aprovado" ta incompleta a frase, cade o resto.??? ou é só isso mesmo e esse "E" ta sobrando?

 

Falow abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aprovado -> O Pagamento foi efetuado com sucesso pelo cliente e

Completo -> O Pagamento foi efetuado com sucesso pelo cliente e além disso o PagSeguro já liberou este valor na sua conta (isso vale também para devoluções e estornos).

"Aprovado" ta incompleta a frase, cade o resto.??? ou é só isso mesmo e esse "E" ta sobrando?

 

Falow abraços

 

acho que aquele "e" indica é a deixa para o "Completo"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Michael e demais, primeiro quero agradecer a todos por todas as dicas aqui... realmente ajuda e muitissimo.

 

O motivo do meu contato é o seguinte: eu gostaria de saber como eu faço para gravar todos os produtos vindos no post já que não há como prever a quantidade de produtos; ou seja, na minha tabela tenho:

 

ProdID / ProdDescricao / ProdValor / ProdQuantidade / ProdFrete / ProdExtras

 

Acontece que quando eu recebo o post do Pagseguro recebo da seguinte forma:

 

'ProdID_1' => '',

'ProdDescricao_1' => '',

'ProdValor_1' => '',

'ProdQuantidade_1' => '',

'ProdFrete_1' => '',

'ProdExtras_1' => '',

 

'ProdID_2' => '',

'ProdDescricao_2' => '',

'ProdValor_2' => '',

'ProdQuantidade_2' => '',

'ProdFrete_2' => '',

'ProdExtras_2' => '',

 

ProdID_3...

 

ProdID_4...

 

Enfim, posso receber muitos produtos no mesmo post. Eu gostaria de saber como vou tratar e armazenar no banco estas informações; poderiam me sugerir alguma coisa? Se possível disponibilizar o código para que eu possa estudar?

 

O objetivo é que depois de armazenados no banco eu vou precisar disponibilizar para consulta todos os registros dos produtos "pela referência (recebida pelo post)" e também calcular a soma de todos os produtos e exibir o resultado em uma área restrita.

 

Eu estou sentindo dificuldades quanto a gravar os produtos no banco por conta da quantidade que é imprevisível.

 

Obrigado desde já à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resposta muito rápida!

 

Você sabe como fazer referencias com bancos de dados?

 

Não?!

 

Experimente isto: Inseriu no banco de dados uma nova compra, ok? Então você pega esse ID. (last_insert_id, last_id, insert_id, dá uma procurada no google pra ver como você deve implementar isso com seu banco de dados). E então você aloca em outra tabela um produto com referencia a esta compra. Entendeu? Se não, eu desenho.

 

Eis as tabelas:

 

tabela de compras:
	ID_COMPRA, NOME_USUARIO, EMAIL, TRANSACAO_ID
tabela de produtos
	ID_PRODUTO, ID_COMPRA, PRODUTO, PESO, VALOR

Agora, populando...

ID_COMPRA, NOME_USUARIO, EMAIL, TRANSACAO_ID
			1			  Michael			 ...		598-23097-32

	ID_PRODUTO, ID_COMPRA, PRODUTO, PESO,  VALOR
		   1					1			  café		  100	 150
		   2					1			  leite		  200	 298
		   3					1		   manteiga	  200	 570

Perceba que, ao popular, você indica de qual compra aquele produto faz parte. Logo, quando você fizer um select na segunda tabela com um where ID_COMPRA igual a 1 você terá todos os produtos da compra numero 1. :D

 

Experimente fazer isso com JOINs você vai gostar do que é possivel.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Michael, ok, mas e quanto "a gravar os produtos no banco por conta da quantidade que é imprevisível"? Já tentei de tudo e não consigo um meio de fazer isso.

 

Eu recebo o post com n produtos, exemplo abaixo:

 

ID_PRODUTO, ID_COMPRA, PRODUTO, PESO, VALOR

1 1 café 100 150

2 1 leite 200 298

3 1 manteiga 200 570

 

No exemplo acima todos os produtos pertencem a mesma compra. Poderia me ajudar com o código para inseir no banco? Desculpe incomodar é que estou aprendendo agora e vejo que é bem experiente. Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resposta muito rápida!

 

Você sabe como fazer referencias com bancos de dados?

 

Não?!

 

Experimente isto: Inseriu no banco de dados uma nova compra, ok? Então você pega esse ID. (last_insert_id, last_id, insert_id, dá uma procurada no google pra ver como você deve implementar isso com seu banco de dados). E então você aloca em outra tabela um produto com referencia a esta compra. Entendeu? Se não, eu desenho.

 

Eis as tabelas:

 

tabela de compras:
	ID_COMPRA, NOME_USUARIO, EMAIL, TRANSACAO_ID
tabela de produtos
	ID_PRODUTO, ID_COMPRA, PRODUTO, PESO, VALOR

Agora, populando...

ID_COMPRA, NOME_USUARIO, EMAIL, TRANSACAO_ID
			1			  Michael			 ...		598-23097-32

	ID_PRODUTO, ID_COMPRA, PRODUTO, PESO,  VALOR
		   1					1			  café		  100	 150
		   2					1			  leite		  200	 298
		   3					1		   manteiga	  200	 570

Perceba que, ao popular, você indica de qual compra aquele produto faz parte. Logo, quando você fizer um select na segunda tabela com um where ID_COMPRA igual a 1 você terá todos os produtos da compra numero 1. :D

 

Experimente fazer isso com JOINs você vai gostar do que é possivel.

 

 

Michael, eu poderia no caso utilizar a transação id para fazer essa relação? Não seria mais fácil fazer assim? E como recebo tudo no post então não teria que utilizar outras instruções... o que acha???

 

Para fazer o looping eu usei o código abaixo:

for ($i=1;isset($_POST["ProdID_1"]);$i++) {	
		
		$produto = $_POST["ProdID_{$i}"];
		
				if($produto != ''){	
				
				$ProdID = $_POST["ProdID_{$i}"];
				$ProdDescricao = $_POST["ProdDescricao_{$i}"];
				$ProdValor = $_POST["ProdValor_{$i}"];
				$ProdQuantidade = $_POST["ProdQuantidade_{$i}"];		 
						
				mysql_select_db($database_cursosemaudio_con, $cursosemaudio_con);
				$query_rsVendas = "INSERT INTO vendas (prod_id, prod_descricao, prod_valor, prod_quantidade) VALUES ('$ProdID', '$ProdDescricao', '$ProdValor', '$ProdQuantidade')";	
				$rsVendas = mysql_query($query_rsVendas, $cursosemaudio_con) or die(mysql_error());	
				
				}
		
		}

Quebrei a cabeça hoje até as 03:00 da manhã, mas consegui chegar onde queria, falta agora implementar a outra tabela com os dados do cliente e depois dazer a relação de uma para outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite!

 

Estou montando uma página de venda de um único produto(ebook) que será entregue por e-mail e gostaria de uma integração assim:

 

Quando o status estiver aprovado, o retorno automáticamente envia um email para o cliente avisando que o produto já etá liberado , e

neste e-mail já coloco o link para download.

Não precisa guardar nenhuma informação no Banco de dados, só fazer o retorno e disparar o e-mail.

 

Como ficaria o script?

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite DG,

 

Talvez a minha dúvida seja a de muitos que já leram esse tópico. Liberar junto com o produto, ou curso, ou download, um email informando que isso foi feito para um determinado produto.

 

Exemplo: vendo cursos e cada curso tem um código de inscrição. Gostaria de mandar esse código para o curso comprado.

 

Como não consegui com fazer isso com o Código do produto, já que esta em Array... defini um valor de frete para cada curso. Tem outra solução?

 

 

if (($StatusTransacao == 'Completo' OR $StatusTransacao == 'Aprovado') AND ($ValorFrete == '2.00'))

 

Gilvan Marques

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi a pergunta. Você pretende enviar um e-mail para o curso (pessoal do curso) a qual aquele produto pertence? É isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite!

 

Estou montando uma página de venda de um único produto(ebook) que será entregue por e-mail e gostaria de uma integração assim:

 

Quando o status estiver aprovado, o retorno automáticamente envia um email para o cliente avisando que o produto já etá liberado , e

neste e-mail já coloco o link para download.

Não precisa guardar nenhuma informação no Banco de dados, só fazer o retorno e disparar o e-mail.

 

Como ficaria o script?

 

Valeu!

Estou fazendo uma série de artigos para resolver essa questão, se quiser, pode acompanhar para ficar mais antenado ( http://dgmike.com.br/2009/04/phppagseguro-...l-de-downloads/ ). :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá RetuKo,

 

Vi que você conseguiu concluir o processo do retorno automático, estou utilizando o seu codigo - que foi inicialmente preparado pelo Michael. O arquivo log é criado sem problemas, no entanto não consigo armazenar os dados no DB. Mandei escrever o codigo SQL depois da função retorno_automatico. Apresenta a pagina com as variaveis em branco, enão armazena nada no DB.

 

Estou usando o PHP 5, será que isso pode ser um problema???

 

Meu conhecimento de PHP é médio.

 

Aguardo um retorno.

 

Segue abaixo meu cod:

 

if (!defined('TOKEN')) define ('TOKEN', 'meu_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($ConnLocal,$ConnLogin,$ConnSenha);
mysql_select_db($ConnDatabase);
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);  
}

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

require_once("retorno.php");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi a pergunta. Você pretende enviar um e-mail para o curso (pessoal do curso) a qual aquele produto pertence? É isso?

Exemplo: tenho vários cursos a venda e cada curso tem um código de acesso. Se o aluno compra o curso A, mando um código para ele se cadastrar, se compra o B, mandou um código diferente.

 

Pelo que testei nos códigos disponibilizados aqui, funciona tudo direitinho, mas somente para um produto (curso).

 

Se puder me deixe o msn ou me adicione gmarques@gmail.com se a explicação não foi bem detalhada.

 

Abração,

 

Gilvan.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Michael, estou com problemas no retorno automático, mas tipo, nem fiz nada disso dito acima, eu na verdade com os problemas que estava tendo, deletei tudo e coloquei somente o INSERT no banco.

 

E funcionou, porém nesta mesma página de retorno, eu tenho que verificar os COOKIEs salvos sobre o produto vendido (é venda de computadores, então este COOKIE recupera as peças deste computador) e com isso salvar em uma outra tabela, esses detalhes.

 

MAS o problema é, o $_POST['TransacaoID'] é salvo no primeiro INSERT (tabela do pagseguro), mas depois fica em branco quando está dentro do FOREACH para listar as peças deste computador.

 

E está duplicando o insert, ainda não sei pq, mas ele parace que está verificando a minha página 2 vezes.

 

vou postar o meu código abaixo.

 

<? session_start();
include("admin/conexao.php");

function Esquerda($str, $length) {
return substr($str, 12, $length);
}
$AleatorioPedido = rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999) . rand(100,999);


if ( isset($_COOKIE['computadores']) )
{
	foreach ( $_COOKIE['computadores'] as $NumeroPedido => $ValoresPedido )
	{
		$ContarPc = $ContarPc + 1;
		
		#echo ($NumeroPedido . "<Br>- " . $ValoresPedido . "<Br><Br><br>");
		$ListarA = split(",", $ValoresPedido); // [0] => Peças | [1] => Id Pc
		$TesteL = count($ListarA); // Contagem de grupos por virgula
		$CookiePecas = split(";", $ListarA[0]); //Separa os Ids das peças
		$Teste = count($CookiePecas); // Contagem de Peças
		$IdPc = Esquerda($NumeroPedido, 12);
		
		// Computador
		$QueryPc = mysql_query("SELECT * FROM computadores WHERE Id=".$IdPc."");
		$PC = mysql_fetch_array($QueryPc); 
		// Correios
		$QueryCorreioPc = mysql_query("SELECT * FROM correios WHERE peso='".$PC["peso"]."'");
		$FretePc = mysql_fetch_array($QueryCorreioPc);
		
		$SomandoA = 0;
		$FreteA = 0;
		foreach( $CookiePecas as $PecaEscolhas ){
			if ( $PecaEscolhas != "" ){
				$QuerySoma = mysql_query("SELECT * FROM pecas WHERE Id=".$PecaEscolhas."");
				$RsSoma = mysql_fetch_array($QuerySoma);
				
				if ( $RsSoma["peso"] != "" ){
				$QueryCorreio = mysql_query("SELECT * FROM correios WHERE peso='".$RsSoma["peso"]."'");
				$Frete = mysql_fetch_array($QueryCorreio);
				
				$FreteA = $FreteA + $Frete["".$UF_Frete.""];
				$MontagemFreteP .= $Frete["".$UF_Frete.""] . ";";
				}else{
				$FreteA = $FreteA + 0;
				$MontagemFreteP .= "0.00;";
				}
				$MontagemP .= $RsSoma["nome"] . ";";
				$SomandoA = $SomandoA + $RsSoma["preco"];
				$MontagemPrecoP .= $RsSoma["preco"] . ";";
			}
		}
		
		// <-- Table: pagseguroacmachines
		$ClienteID = $_SESSION["Cliente_Id"];
		# $TransacaoID
		$NomeProd = $PC["nome"];
		$TipoProd = "PC";
		$FreteProd = $FretePc["".$UF_Frete.""];
		$TaxaProd = $PC["valorextra"];
		$QuantosProd = $_POST["ProdQuantidade_".$ContarPc.""];
		$Montagem = $MontagemP;
		$MontagemPreco = $MontagemPrecoP;
		$MontagemFrete = $MontagemFreteP;
		$ValorTotal = $TaxaProd + $FreteProd + $SomandoA + $FreteA;
		// Table: pagseguroacmachines -->
		
		mysql_query("INSERT INTO pagseguroacmachines (" .
		"NumeroGerado, " .
		"ClienteID, " .
		"NomeProd, " .
		"TipoProd, " .
		"FreteProd, " .
		"TaxaProd, " .
		"QuantosProd, " .
		"Montagem, " .
		"MontagemPreco, " .
		"MontagemFrete, " .
		"ValorTotal" .
		") VALUES (" .
		"" .
		"'" . $AleatorioPedido . "', " .
		"'" . $ClienteID . "', " .
		"'" . $NomeProd . "', " .
		"'" . $TipoProd . "', " .
		"'" . $FreteProd . "', " .
		"'" . $TaxaProd . "', " .
		"'" . $QuantosProd . "', " .
		"'" . $Montagem . "', " .
		"'" . $MontagemPreco . "', " .
		"'" . $MontagemFrete . "', " .
		"'" . $ValorTotal . "'" .
		")");
		
		#if ( $_POST["Xquantos".$NumeroPedido.""] == "" ){
		#$QuantidadeA = 1; }else{ $QuantidadeA = $_POST["Xquantos".$NumeroPedido.""]; }
		#$ValorMultiA = $ValorTotal * $QuantidadeA;
		#$SomarPCA = $SomarPCA + $ValorMultiA;
	}
} 
if ( isset($_COOKIE['acessorios']) )
{
	foreach ( $_COOKIE['acessorios'] as $NumeroPedido => $ValoresPedido )
	{
		$Contando = $Contando + 1;
		$ContarAc = $Contando + $ContarPc;
		
		$QueryAc = mysql_query("SELECT * FROM acessorios WHERE Id=".$ValoresPedido."");
		$AC = mysql_fetch_array($QueryAc); 
		
			$QueryCorreio = mysql_query("SELECT * FROM correios WHERE peso='".$AC["peso"]."'");
			$Frete = mysql_fetch_array($QueryCorreio);
		
		// <-- Table: pagseguroacmachines
		$ClienteID = $_SESSION["Cliente_Id"];
		# $TransacaoID
		$NomeProd = $AC["nome"];
		$TipoProd = "AC";
		$FreteProd = $Frete["".$UF_Frete.""];
		$TaxaProd = $AC["preco"];
		$QuantosProd = $_POST["ProdQuantidade_".$ContarAc.""];
		$Montagem = $ValoresPedido;
		$MontagemPreco = "";
		$MontagemFrete = "";
		$ValorTotal = $TaxaProd + $FreteProd;
		// Table: pagseguroacmachines -->
		
		mysql_query("INSERT INTO pagseguroacmachines (" .
		"NumeroGerado, " .
		"ClienteID, " .
		"NomeProd, " .
		"TipoProd, " .
		"FreteProd, " .
		"TaxaProd, " .
		"QuantosProd, " .
		"Montagem, " .
		"MontagemPreco, " .
		"MontagemFrete, " .
		"ValorTotal" .
		") VALUES (" .
		"" .
		"'" . $AleatorioPedido . "', " .
		"'" . $ClienteID . "', " .
		"'" . $NomeProd . "', " .
		"'" . $TipoProd . "', " .
		"'" . $FreteProd . "', " .
		"'" . $TaxaProd . "', " .
		"'" . $QuantosProd . "', " .
		"'" . $Montagem . "', " .
		"'" . $MontagemPreco . "', " .
		"'" . $MontagemFrete . "', " .
		"'" . $ValorTotal . "'" .
		")");
		
		
		#if ( $_POST["Xquantos".$NumeroPedido.""] == "" ){
		#$QuantidadeB = 1; }else{ $QuantidadeB = $_POST["Xquantos".$NumeroPedido.""]; }
		#$ValorMultiB = $SomandoB * $QuantidadeB;
		#$SomarACB = $SomarACB + $ValorMultiB;
	}
}

 //Selecione aqui todos os parâmetros enviados pela PagSeguro
 $VendedorEmail = $_POST['VendedorEmail'];
 $TransacaoID = $_POST['TransacaoID'];
 $Referencia = $_POST['Referencia'];
 $Anotacao = $_POST['Anotacao'];
 $DataTransacao = $_POST['DataTransacao'];
 $TipoPagamento = $_POST['TipoPagamento'];
 $StatusTransacao = $_POST['StatusTransacao'];
 $CliNome = $_POST['CliNome'];
 $CliEmail = $_POST['CliEmail'];
 $CliCEP = $_POST['CliCEP'];
 $CliTelefone = $_POST['CliTelefone'];
 $NumItens = $_POST['NumItens'];

mysql_query("INSERT INTO pagsegurotransacoes 
(TransacaoID, NumeroGerado, Referencia, Anotacao, DataTransacao, TipoPagamento, StatusTransacao, CliNome, CliEmail, CliCEP, CliTelefone, NumItens) VALUES (".
"'" . $TransacaoID . "', " .
"'" . $AleatorioPedido . "', " .
"'" . $Referencia . "', " .
"'" . $Anotacao . "', " .
"'" . $DataTransacao . "', " .
"'" . $TipoPagamento . "', " .
"'" . $StatusTransacao . "', " .
"'" . $CliNome . "', " .
"'" . $CliEmail . "', " .
"'" . $CliCEP . "', " .
"'" . $CliTelefone . "', " .
"'" . $NumItens . "')");

# Deletando TODOS OS PEDIDOS !
if ( isset($_COOKIE['computadores']) ){
	foreach ( $_COOKIE['computadores'] as $CooPedidoA => $CooValorA )
	{
	setcookie("computadores[" . $CooPedidoA . "]", "", time() - 3600);
	}
}
if ( isset($_COOKIE['acessorios']) ){
	foreach ( $_COOKIE['acessorios'] as $CooPedidoB => $CooValorB )
	{
	setcookie("acessorios[" . $CooPedidoB . "]", "", time() - 3600);
	}
}

header("Location: finalizar.php");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

A algum tempo venho tentando fazer esse retorno automático, porém não consigo gravar os dados no banco de jeito nenhum... recorri ao suporte do PagSeguro, a esse tutorial, ao da Visie, busquei na web, mas nada... :/

Já conferi os campos, o nome da tabela, segui direitinho o tutorial, e nada!

Estou simulando todas as compras com boleto.

 

Segue o código:

 

<?php include(conexao.php'); ?>

<?php

define ('TOKEN', 'meu token');

 

function retorno_automatico (

$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,

$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,

$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,

$CliNumero, $CliComplemento, $CliBairro, $CliCidade,

$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens

) {

$SQL = "INSERT INTO pagsegurotransacoes (" .

"TransacaoID, " .

"Referencia, " .

"StatusTransacao, " .

"CliEmail, " .

"ValorFrete," .

"TipoPagamento," .

"NumItens" .

") VALUES (" .

"" .

"'" . $TransacaoID . "', " .

"'" . $Referencia . "', " .

"'" . $StatusTransacao . "', " .

"'" . $CliEmail . "', " .

"'" . $ValorFrete . "', " .

"'" . $TipoPagamento . "', " .

"'" . $NumItens . "'" .

")";

$Executa = mysql_query($SQL) or die(mysql_error());

 

for($i=0;$i=count($produtos); $i++){

 

$SQL2 = "INSERT INTO pagsegurotransacoesprodutos (" .

"TransacaoID, " .

"ProdID, " .

"ProdQuantidade " .

") VALUES (" .

"'" . $TransacaoID . "', " .

"'" . $produtos[$i]['ProdID'] . "', " .

"'" . $produtos[$i]['ProdQuantidade'] . "'" .

")";

$Executa2 = mysql_query($SQL2) or die(mysql_error());

}

}

 

 

require_once("retorno.php"); (modifiquei apenas o token dentro do arquivo)

 

?>

 

Depois segue o html, como no tutorial da Visie.

 

Tentei inserir primeiro os dados, depois os produtos para ter certeza de que o problema não era no for dos produtos.... sem sucesso :(

 

Já não sei mais o que fazer.

 

Aguardo resposta!

 

Obrigada,

 

Tamires

 

Edit: Tentei gerar um log. Colocando esse script:

 

if (isset($_POST)) {

$f = fopen('pagseguro.log', 'a');

fwrite ($f, var_export($_POST, true));

fclose ($f);

}

 

logo abaixo da chamada do arquivo retorno.php, ele gerou um log com isso:

array()

 

Quando tentei colocar dentro da funcao retorno_automatico, nao gerou nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando uma url dinâmica para o retorno automático.

 

Eu uso o wordpress com urls amigáveis (mod_rewrite) e dinâmicas, logo minha url de retorno é esta:

 

http://wwww.lilarte.com.br/retorno ou http://wwww.lilarte.com.br/index.php?page_id=204

 

Acontece que não estou recebendo o post enviado pelo robô do pagseguro.

 

Só funciona quando uso um arquivo direto, tipo: http://wwww.lilarte.com.br/retorno.php (arquivo localizado dentro do diretório raiz do wordpress)

 

Porém gostaria de usar as urls dinâmicas de forma a utilizar uma página criada no wordpress com uma "template" próprio, contendo os scripts e include da classe "retorno.php" que baixei no site da visie.

 

Como resolvo este contra tempo?

 

Será que a url de retorna não pode ser uma página criado no WP?

 

Grato,

Roberto Entringer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Estou tentando instalar o retorno automático no meu site, mas occore o seguinte erro:

 

Fatal error: Call to undefined function tep_not_null() ....

 

Como posso resolver esse problema?

 

Obrigado :)

Anderson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Estou tentando instalar o retorno automático no meu site, mas occore o seguinte erro:

 

Fatal error: Call to undefined function tep_not_null() ....

 

Como posso resolver esse problema?

 

Obrigado :)

Anderson

Essa implementação é a que o PagSeguro disponibiliza no site, ela foi feita não sei como, mas ela é especifica para o OsCommerce. tep_not_null é uma função do core do OsCommerce.

 

Não sei porque ainda está assim :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Michael,

 

tudo bem?

 

estou com um probleminha(ão) ao tentar implementar esse retorno automático...

 

primeiro: o servidor onde hospedo o site não possui a biblioteca CURL :(, mas mesmo assim decidi testar esse retorno...

segundo: quando o comprador finaliza a compra pelo site, os dados vão certinho para o banco de dados, o problema está quando o status da transação muda de "Aguardando Pagto" para outra qualquer...eu não consigo receber o POST do PagSeguro ...

 

eis o código:

 

<?

 

//DEFINE O LOGIN E SENHA PARA CONEXÃO COM O BANCO DE DADOS

$ConnLocal = "servidor";

$ConnLogin = "login";

$ConnSenha = "senha";

$ConnDatabase = "bd";

 

// 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());

 

// RECEBE O POST ENVIADO PELA PagSeguro E ADICIONA OS VALORES PARA VALIDAÇÃO DOS DADOS

$PagSeguro = 'Comando=validar';

$PagSeguro .= '&Token=token';

$Cabecalho = "";

 

foreach ($_POST as $key => $value)

{

$value = urlencode(stripslashes($value));

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

}

 

// RECEBE OS DADOS ENVIADOS PELA PagSeguro E ARMAZENA EM VARIÁVEIS

//Selecione aqui todos os parâmetros enviados pela PagSeguro

$TransacaoID = $_POST['TransacaoID'];

$Referencia = $_POST['Referencia'];

$StatusTransacao = $_POST['StatusTransacao'];

$CliNome = $_POST['CliNome'];

$CliEmail = $_POST['CliEmail'];

$NumItens = $_POST['NumItens'];

$TipoPagamento = $_POST['TipoPagamento'];

$ProdDescricao = $_POST['ProdDescricao'];

$VendedorEmail = $_POST['VendedorEmail'];

 

// Processe o pagamento salvando os dados em seu banco de dados

 

$sql = "insert into PagSeguroTransacoes values('$TransacaoID', '$VendedorEmail', '', '', '', '', '$ProdDescricao', '$TipoPagamento', '$StatusTransacao', '$CliNome', '$CliEmail', '', '', '', '', '', '', '', '', '')";

 

$Executa = mysql_query($sql) or print(mysql_error());

 

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

$sql2 = "update PagSeguroTransacoes set StatusTransacao='$StatusTransacao' ";

$res2 = mysql_query($sql2) or die("Erro ao inserir registro - dados".mysql_error());

}

 

// FECHA A CONEXÃO

mysql_close($Conn);

 

?>

 

<p align="center"><b><font face="Arial" size="4">Compra feita com sucesso!</font></b></p>

<p align="center"><font face="Arial" size="4">Sua inscrição será confirmada

assim que o pagamento for efetuado.</font></p>

 

Desde ja agradeço a ajuda :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande @CaioParazzi,

 

experimente usar a biblioteca de PHP para PagSeguro, ela vem com a implementação para CURL e para fsocket, ou seja, biblioteca padrão de conexão a "network" do PHP. Como você pode ver na página de requisitos da biblioteca, não é necessário nenhuma biblioteca extra para fazer funcionar. Isso quer dizer que não é necessário CURL especificamente.

 

Veja parte do código-fonte da biblioteca:

 

if ($tipoEnvio[0] === 'curl') {
	  $ch = curl_init();
	  curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]);
	  curl_setopt($ch, CURLOPT_POST, true);
	  curl_setopt($ch, CURLOPT_POSTFIELDS, $spost);
	  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);
	  $resp = curl_exec($ch);
	  if (!RetornoPagSeguro::not_null($resp)) {
		curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]);
		$resp = curl_exec($ch);
	  }
	  curl_close($ch);
	  $confirma = (strcmp ($resp, 'VERIFICADO') == 0);
	} elseif ($tipoEnvio[0] === 'fsocket') {
	  if (!$tipoEnvio[2]) {
		die ("{$_retPagSeguroErrStr} ($_retPagSeguroErrNo)");
	  } else {
		$cabecalho = "POST {$tipoEnvio[1]} HTTP/1.0\r\n";
		$cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n";
		$cabecalho .= "Content-Length: " . strlen($spost) . "\r\n\r\n";
		$resp = '';
		fwrite ($tipoEnvio[2], "{$cabecalho}{$spost}");
		while (!feof($tipoEnvio[2])) {
		  $resp = fgets ($tipoEnvio[2], 1024);
		  if (strcmp ($resp, 'VERIFICADO') == 0) {
			$confirma = (strcmp ($resp, 'VERIFICADO') == 0);
			$confirma=true;
			break;
		  }
		}
		fclose ($tipoEnvio[2]);
	  }
	}

Experimente e depois me conta se deu algum problema ou se solucionou. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Michael,

 

primeiramente, obrigado por ter respondido :D

 

bom...é que foi assim...primeiro eu tentei fazer meu código por conta própria.Não foi, depois tentei usar o código que o PagSeguro gera no próprio site...Não funcionou, depois eu tentei usar o seu código de exemplo, só mudando a conexão com o bd e tal. Também não deu... :(

 

Aí eu experimentei retirar a parte de "enviar de volta os dados para o PagSeguro". Aí funcionou o.o.

 

Vou testar novamente na segunda, aí eu respondo se funcionou :)

 

Valeu mesmo, cara!

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.