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

 

Olá Daniel. Você consegui pegar o post do Pagseguro? Estou usando drupal+ubercart e mesmo usando o arquivo de retorno que o pagseguro disponibiliza, o POST sem simplesmente vazio...

 

if ($_POST) {
  RetornoPagSeguro::verifica($_POST);
  die();
}

Não entra nunca neste código acima!

 

Abs!

Douglas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que o retorno automatico funcione eu devo enviar alguma informação junto com o nome do produto e o preço?

 

tentei utilizar o codigo mais não insere nada no db

 

<?php
define ('TOKEN', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
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","xxxxx","xxxxxxx"); 
mysql_select_db("xxxxxxxxxxx");
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);  
}
require_once("retorno.php");


?>

Não funciona... o banco de dados foi criado assim não sei se está correto vejam:

 

CREATE TABLE `PagSeguroTransacoes` (
  `TransacaoID` varchar(36) NOT NULL,
  `VendedorEmail` varchar(200) NOT NULL,
  `Referencia` varchar(200) default NULL,
  `TipoFrete` char(2) default NULL,
  `ValorFrete` decimal(10,2) default NULL,
  `Extras` decimal(10,2) default NULL,
  `Anotacao` text,
  `TipoPagamento` varchar(50) NOT NULL,
  `StatusTransacao` varchar(50) NOT NULL,
  `CliNome` varchar(200) NOT NULL,
  `CliEmail` varchar(200) NOT NULL,
  `CliEndereco` varchar(200) NOT NULL,
  `CliNumero` varchar(10) default NULL,
  `CliComplemento` varchar(100) default NULL,
  `CliBairro` varchar(100) NOT NULL,
  `CliCidade` varchar(100) NOT NULL,
  `CliEstado` char(2) NOT NULL,
  `CliCEP` varchar(9) NOT NULL,
  `CliTelefone` varchar(14) default NULL,
  `NumItens` int(11) NOT NULL,
  `Data` datetime NOT NULL,
  `status` tinyint(1) unsigned NOT NULL default '0',
  UNIQUE KEY `TransacaoID` (`TransacaoID`,`StatusTransacao`),
  KEY `Referencia` (`Referencia`),
  KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

no arquivo pagseguro.log vem assim

 

'Recebeu o post, verificando junto ao PagSeguro'
array (
)
---------

'Recebeu o post, verificando junto ao PagSeguro'
array (
)
---------

no arquivo error_log ta assim

 

[11-Mar-2010 03:33:49] PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20060613/mssql.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20060613/mssql.so: invalid ELF header in Unknown on line 0
[11-Mar-2010 03:35:14] PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20060613/mssql.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20060613/mssql.so: invalid ELF header in Unknown on line 0

me ajudem por favor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Galera,

 

estou iniciando em PHP e acho q estou confundindo alguma coisa. Estou fazendo um site de congressos e o meu cliente pediu que o usuario cadastrasse seus dados no site. No final do cadastro ele seria redirecionado para o pagseguro e pagaria a conta da inscrição do congresso. Mas se o usuario é pós-graduado, ele paga uma quantia diferente de um Formando por exemplo. Alguém me dá uma guiada?

 

O formulário básico da inscrição está abaixo. Depois pra onde eu mando o usuário quando ele aperta Submit?

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title></title>
	<link rel="stylesheet" href="insc2.css" media="screen" />
	</head>
	<body>
		<fieldset id="form">
			<form method="post" action="">
				
						<label for="nome">Nome:</label>
						<input type="text" name="nome" id="nome" /><br />
						
						<label></label>
					
					<select name="">
						<option value="profissional">Profissional</option>
						<option value="pos">Pós-Graduando</option>
						<option value="academico">Acadêmico</option>
					</select>
					
						<label></label>
					
						<br />
					
						<label for="instituicao">Instituição:</label>
						<input type="text" name="instituicao" id="instituicao" />
						
						<br />
				
						<span>Sócio do CBCTB? <span class="info">(Colegio Brasileiro de Cirurgia e Traumatologia Buco-Maxilo-Facial)</span></span>
					
						<input type="radio" value="s" name="socio" class="radio" id="s" /> <label for="s" class="radio">Sim</label>
						<input type="radio" value="n" name="socio" class="radio" id="n" /> <label for="n" class="radio">Não</label>
						
						<br />
					
						<label for="cpf">CPF:</label>
						<input type="text" name="cpf" id="cpf" />
						
						<br />
					
						<label for="rg">RG:</label>
						<input type="text" name="rg" id="rg" />
						
						<br />
					
						<label for="end">Endereço:</label> 
						<input type="text" name="end" id="end" />
						
						<br />
				
						<label for="cep">CEP:</label> 
						<input type="text" name="cep" id="cep" />
						
						<br />
					
						<label for="cidade">Cidade:</label>
						<input type="text" name="cidade" id="cidade" />
						
						<br />
					
						<span>UF:</span> <select name="uf">
								<option value="acre">AC</option>
								<option value="alagoas">AL</option>
								<option value="amapá">AP</option>
								<option value="amazonas">AM</option>
								<option value="bahia">BA</option>
								<option value="ceara">CE</option>
								<option value="distrito_federal">DF</option>
								<option value="espirito_santo">ES</option>
								<option value="goias">GO</option>
								<option value="maranhao">MA</option>
								<option value="mato_grosso">MT</option>
								<option value="mato_grosso_sul">MS</option>
								<option value="minas_gerais">MG</option>
								<option value="para">PA</option>
								<option value="paraiba">PB</option>
								<option value="parana">PR</option>
								<option value="pernambuco">PE</option>
								<option value="piaui">PI</option>
								<option value="rio_janeiro">RJ</option>
								<option value="rio_grande_norte">RN</option>
								<option value="rio_grande_sul">RS</option>
								<option value="rondonia">RO</option>
								<option value="roraima">RR</option>
								<option value="santa_catarina">SC</option>
								<option value="sao_paulo">SP</option>
								<option value="sergipe">SE</option>
								<option value="tocantins">TO</option>
							</select>
							
						<br />
					
						<label for="tel1">Telefone:</label> <input type="text" name="tel1" id="tel1" /><br />
						<label></label> <input type="text" name="tel2" />
							 
						<br /> 
							
						<input type="submit" value="Concluir" />
			</form>
		</fieldset>
	</body>
</html>

Grato,

 

Edie

 

esquece essa mensagem ai de cima.

 

Mas estou com outra duvida. Se no caso o pagseguro me mandar um post "PENDENTE" e dpois q o user pagar ele me mandar outro escrito "PGTO CONFIRMADO", eu faco um if($TransacaoID == TransacaoID(do DB) ) UPDATE bla bla bla?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Geooo, bom dia! Estou com o mesmo problema que você teve (inserir mais de um produto no Banco de Dados) e não consigo resolver de forma alguma... você poderia me informar como conseguiu resolver essa questão? Já tentei o looping que você postou abaixo, mas só grava o 1º produto...

 

Pode me dar essa força?

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Estou implementando o arquivo de Retorno do PagSeguro e estou com dificuldades para ler o PagSeguro envia no retorno.

Os dados recebidos do PagSeguro estão sendo gravados no LOG e as informações estão retornando com todos os dados que preciso, e ai vem a minha dificuldade... que é ler estas informações....

 

Segue o Código que foi adaptado:

 

<?
	include "cabecalho1.php";
	require_once("con_mysql.php");
	require_once("funcoes.php");
			
	$scod = RetiraChar(utf8($_GET['id']));
	
	$query_info=mysql_query("SELECT * FROM Configuracao WHERE id ='$scod' ");
	
		while($dados=mysql_fetch_array($query_info)) 
			{
				extract($dados);
				// modifique abaixo a exibição dos dados como necessário	
				$sToken = $Token;
			}

pgs_log('Inicio da Validacao');

function pgs_log($msg)
{
  $msg = date('[d/m/Y H:i:s] ') . $msg;
  $sql = "INSERT INTO Log (Mensagem) VALUES ('$msg')";		
  $sql = mysql_query($sql) or die(mysql_error()); //Verifica se os registros foram alterados
}
if ($_POST) {
  pgs_log('Recebendo dados via POST, estes dados serão verificados pelo PagSeguro: '.print_r($_POST, true));
}

// Aqui vai seu Token
define('TOKEN', $sToken);

// Incluindo o arquivo da biblioteca
include "retorno.php";

// Função que captura os dados do retorno
function retorno_automatico ( $VendedorEmail, $TransacaoID,
  $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao,
  $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail,
  $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) 
  {
	
	$data = func_get_args();
    pgs_log('Dados verificados com sucesso! Dados formatados no retorno: '.print_r($data, true));
	
	$MyArray = array($data);
	
	foreach ($MyArray as $key => $DadosArray) 
		{ // Inicio Foreach
		$sTransacaoID = $MyArray["1"];
		    $sReferencia = $MyArray["2"];
		    $sDataTransacao = $MyArray["6"];
		    $sTipoPagamento = $MyArray["7"];
		    $sStatusTransacao = $MyArray["8"];
		    $sCliEmail = $MyArray["10"];
		    $sProdValor = $MyArray["ProdValor"];
		} // Percorre Toda a Array - Fim Foreach
	
	$msg = "Exporta Variavel Array";
	$msg .= $sStatusTransacao; 
	  $sql = "INSERT INTO Log (Mensagem) VALUES ('$msg')";		
	  $sql = mysql_query($sql) or die(mysql_error()); //Verifica se os registros foram alterados
	
	//####################################################
switch ($StatusTransacao) {
      case "Completo": // 1
	  	  $sql = "UPDATE Tabela1 Set Transacao = '$sTransacaoID', DataTransacao = '$sDataTransacao', TipoPagamento = '$sTipoPagamento', StatusTransacao = '1'  Where Email = '$sCliEmail' and ChaveEmpresa = '$sChaveEmpresa' and ChaveRegistro = '$Referencia' ";			          return "Pagamento completado";
      break;
      case "Aguardando Pagto": //2
	  	  $sql = "UPDATE Tabela1 Set Transacao = '$sTransacaoID', DataTransacao = '$sDataTransacao', TipoPagamento = '$sTipoPagamento', StatusTransacao = '2'  Where Email = '$sCliEmail' and ChaveEmpresa = '$sChaveEmpresa' and ChaveRegistro = '$Referencia' ";			
          return "Aguardando pagamento";
      break;
      case "Aprovado": // 3
	  	  $sql = "UPDATE Tabela1 Set Transacao = '$sTransacaoID', DataTransacao = '$sDataTransacao', TipoPagamento = '$sTipoPagamento', StatusTransacao = '3'  Where Email = '$sCliEmail' and ChaveEmpresa = '$sChaveEmpresa' and ChaveRegistro = '$Referencia' ";
          return "Pagamento aprovado, aguardando compensação";
      break;
      case "Em Análise": // 4
	  	  $sql = "UPDATE Tabela1 Set Transacao = '$sTransacaoID', DataTransacao = '$sDataTransacao', TipoPagamento = '$sTipoPagamento', StatusTransacao = '4'  Where Email = '$sCliEmail' and ChaveEmpresa = '$sChaveEmpresa' and ChaveRegistro = '$Referencia' ";
          return "Pagamento aprovado, em análise.";
      break;
      case "Cancelado": // 5
	  	  $sql = "UPDATE Tabela1 Set Transacao = '$sTransacaoID', DataTransacao = '$sDataTransacao', TipoPagamento = '$sTipoPagamento', StatusTransacao = '5'  Where Email = '$sCliEmail' and ChaveEmpresa = '$sChaveEmpresa' and ChaveRegistro = '$Referencia' ";
          return "Pagamento cancelado";
      break;
  }
	// Atualiza as Informações no Banco de Dados
	$sql = mysql_query($sql) or die(mysql_error()); 
	
	//#################################################### 

}

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
</head>
<body>

<? echo "$sToken, $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade, $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens\n"; ?>

</body>
</html>

Já tentei fazer o print das variaveis do retorno automatico, mas as variaveis vem todas em branco, por isso criei a leitura da Array do início ao fim...

 

Agradeço a colaboração na solução desta situação.

 

Obrigado

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!

 

Ola Michael!

Desculpe minha ousadia, sei que muito ocupado, mas gostaria que pudesse me ajudar, estou tentando implantar o sistema de pagamento do pagseguro em meu site, o que preciso é uma caixa de texto onde o cliente digite o valor até os centavos, e consiga ir para o checkoutestou utilizando esse codigo :-

<form action="https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx" method="post" target="pagseguro">

<div class="pay">

<div>

<label for="item_quant1">Quantidade</label>

<input type="text" name="item_quant" id="item_quant1" value="01" class="textbox" />

<input type="hidden" value="suporte@lojamodelo.com.br" name="email_cobranca"/>

<input type="hidden" value="cbr" name="tipo"/>

<input type="hidden" value="brl" name="moeda"/>

<input type="hidden" value="0001" name="item_id"/>

<input type="hidden" value="Pagamento" name="item_descr"/>

<input type="hidden" value="001" name="item_valor"/>

<input type="hidden" value="0" name="peso"/>

<input type="hidden" value="0" name="extras"/>

<input type="hidden" name="encoding" value="UTF-8" />

</div>

<input type="submit" name="submit_01" id="submit_01" class="btpay" value="" />

</div>

</form>

Mas não aceita acima de três digitos na caixa de texto, tem como resolver isto?

obrigado, e mais uma vez desculpe minha ousadia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Achei interessante compartilhar minha experiência com o código que foi repassado aqui, pois as partes de retorno com múltiplos produtos não estão integradas!

 

Segue abaixo o código completo e aproveito para agradecer ao Michael pela iniciativa!

 

<?php

define ('TOKEN', 'Seu 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("host","user","password");

mysql_select_db("data_base");

mysql_query("INSERT INTO PagSeguroTransacoes (TransacaoID, Referencia, TipoFrete, ValorFrete, TipoPagamento, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, Data, StatusTransacao) VALUES ('$TransacaoID','$Referencia','$TipoFrete','$ValorFrete','$TipoPagamento','$CliNome', '$CliEmail', '$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '".date("Y-m-d H:i:s")."','$StatusTransacao')");

 

for ($i=1;$i<=$NumItens;$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("data_base");

$query_rsVendas = "INSERT INTO PagSeguroProdutosVendas (prod_id, prod_transacao, prod_descricao, prod_valor, prod_quantidade) VALUES ('$ProdID', '$TransacaoID', '$ProdDescricao', '$ProdValor', '$ProdQuantidade')";

$rsVendas = mysql_query($query_rsVendas) 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, "\nSQL: INSERT INTO PagSeguroTransacoes (TransacaoID, Referencia, TipoFrete, ValorFrete, TipoPagamento, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, Data, StatusTransacao) VALUES ('$TransacaoID','$Referencia','$TipoFrete','$ValorFrete','$TipoPagamento','$CliNome','$CliEmail','$CliEndereco', '$CliNumero', '$CliComplemento', '$CliBairro', '$CliCidade', '$CliEstado', '$CliCEP', '$CliTelefone', '".date("Y-m-d H:i:s")."','$StatusTransacao')\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>

<h3>Obrigado por efetuar a compra.</h3>

</body>

</html>

 

Simples Assim.... valeu!

@danielsdelima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite a todos, estou com um problemão aqui, fiz uma mudança de servidor e nessa mudança meu retorno automatico do pag seguro parou de funcionar, sem nenhum motivo aparente, coloquei as informações do novo banco na página mas não consigo descobrir de maneira alguma onde está o erro, na página que precisa voltar os dados, aparece erro de sql, dizendo que não foi possivel a conexão.

 

Enfim, vou postar aqui o PHP do pagseguro, qualquer idéia já é um começo pra mim.

 

<?php
 // Token PagSeguro
 define('TOKEN','meutoken'); 

 // Incluindo o arquivo da biblioteca
 //include('moip/retorno.php');
 include('pagseguro/retorno.php');

 // FunÁ„o que captura os dados do retorno
 function retorno_automatico( $VendedorEmail, $TransacaoID, 
  $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao,
  $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, 
  $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens, $Time) {

  $ConnLocal    = "W08DNN0130";
  $ConnLogin    = "loginbd";
  $ConnSenha    = "senhabd";
  $ConnDatabase = "bd";
  $Conn = mssql_connect($ConnLocal, $ConnLogin, $ConnSenha) or print ('N„o foi possÌvel conectar<br />' . mssql_error());
  $db2  = mssql_select_db($ConnDatabase, $Conn) or print(mssql_error());


  $SQL = "INSERT INTO PagSeguroTransacoes (" .
		  "TransacaoID, " .
		  "Referencia, " .
		  "StatusTransacao, " .
		  "CliNome, " .
		  "NumItens, " .
		  "VendedorEmail, " .
		  "TipoFrete, " .
		  "ValorFrete, " .
	      "Extras, " .
		  "Anotacao, " .
		  "TipoPagamento, " .
		  "CliEmail, " .
		  "CliEndereco, " .
		  "CliNumero, " .
		  "CliComplemento, " .
		  "CliBairro, " .
		  "CliCidade, " .
		  "CliEstado, " .
		  "CliCEP, " .
		  "Time, " .
		  "CliTelefone " .
		  ") VALUES (" .
		  "" .
		  "'" . $TransacaoID . "', " .
		  "'" . $Referencia . "', " .
		  "'" . $StatusTransacao . "', " .
		  "'" . $CliNome . "', " .
		  "'" . $NumItens . "', " .
		  "'" . $VendedorEmail . "', " .
		  "'" . $TipoFrete . "', " .
		  "'" . $ValorFrete . "', " .
	      "'" . $produtos . "', " .
		  "'" . $Anotacao . "', " .
		  "'" . $TipoPagamento . "', " .
		  "'" . $CliEmail . "', " .
		  "'" . $CliEndereco . "', " .
		  "'" . $CliNumero . "', " .
		  "'" . $CliComplemento . "', " .
		  "'" . $CliBairro . "', " .
		  "'" . $CliCidade . "', " .
		  "'" . $CliEstado . "', " .
		  "'" . $CliCEP . "', " .
		  "'" . time() . "', " .
		  "'" . $CliTelefone . "'" .
		  ")";

  $Executa = mssql_query($SQL);

	//echo $SQL;

  //Verifica status
  $SQL = "SELECT * FROM PagSeguroTransacoesStatus WHERE TransacaoID = '" . $TransacaoID . "'";
  $Executa = mssql_query($SQL);
  $valor = mssql_fetch_array($Executa);
  $ObrigadoEnviado = 0;
  $SenhaEnviada    = 0;

  //Envia E-mail
  $headers  = "Content-Type: text/html; charset=iso-8859-1\n"; 
  $headers .= "From: teste@teste.com.br\n";
  $assunto  = "Compra";

  if(($StatusTransacao!='Cancelado')and($StatusTransacao!='Devolvido')) {
  //if(($Referencia)and($StatusTransacao!='Cancelado')and($StatusTransacao!='Devolvido')) {
	  //E-mails para compra de Manual
	  //$exp = explode('vvv',$Referencia);
	  //if(($exp[1]=='-')and($exp[0])) {
	  $exp[0] = 'falar';

		  if((($StatusTransacao=='Completo')or($StatusTransacao=='Aprovado'))and(!$valor['SenhaEnviada'])) {
			  $SenhaEnviada    = 1;
			  $ObrigadoEnviado = 1;
			  $html     = file_get_contents('emails/email_1.php');
			  if(trim($CliNome)!='') {
			      $html = str_replace('[[nome]]', $CliNome, $html);
			  }
			  $html     = str_replace('[[email]]', $CliEmail, $html);
			  $html     = str_replace('[[senha]]', $exp[0], $html);
			  $senha    = $exp[0];
			  $arquivo  = 'email_1';

			  $sql = "Select * from tabela
			          WHERE tabela_dado like '" . $CliEmail . "%'";
			  $res = mssql_query($sql);
			  if(mssql_num_rows($res)) {

				  $valor_para_nome = mssql_fetch_array($res);
				  $html = str_replace('[[nome]]', $valor_para_nome['Participante_Nome'], $html);
				  $CliNome = $valor_para_nome['Participante_Nome'];

				  $SQL = "UPDATE participante SET 
						  Login          = '" . $CliEmail . "' 
						  WHERE Login like '" . $CliEmail . "%'";
			  } else {

				  $html = str_replace('[[nome]]', '', $html);

				  $szNome     = $CliNome;
				  $vcLogin    = $CliEmail;
				  $vcSenha    = 'falar';
				  $szEndereco = $CliEndereco.', '.$CliNumero.($CliComplemento?' - '.$CliComplemento:'');
				  $szSkype    = '';   
				  $szBairro   = $CliBairro;
				  $szUf       = $CliEstado;	
				  $szCidade   = $CliCidade;	
				  $szCep      = $CliCEP;	
				  $szCpf      = '';	
				  $szDataNasc = '';
				  $szLiga1    = '';
				  $szLiga2    = '';
				  $szIdade    = '';

				  $SQL = "sp_IParticipanteOn 8, 54, 5, 1, 'L',  
						 '". $szNome . "', '" . $szEmail . "', '" . $szSkype . "', '" . $vcLogin . "', '" . $vcSenha . "', 4461, 
						 '". $szApelido . "', '" . $szHomePage . "', 'N', 1, '" . $szEndereco . "',  
						 '". $szBairro . "','" . $szCidade . "', '" . $szUf . "' , '" . $szCep . "', '" . $szRg . "', 
						 '". $szDataNasc . "', '" . $szIdade . "', '" . $szEstCivil . "', '" . $szCpf . "' , '" . $szSexo . "',  
						 '". $szLiga1 . "', '" . $szLiga2 . "', '" . $szLiga3 . "', '0', '" . $szRetHorario . "', 13, 5, 'N'";
			  }
			  mssql_query($SQL); //Ativa login

		  } elseif((!$valor['ObrigadoEnviado'])and(!$valor['SenhaEnviada'])) {
			  $ObrigadoEnviado = 1;
			  $html     = file_get_contents('emails/email_2.php');
			  //$html     = str_replace('[[nome]]', $CliNome, $html);
			  $html     = str_replace('[[email]]', $CliEmail, $html);
			  $arquivo  = 'email_2';

			  $SQL = "Select * from tabela
			          WHERE tabela_Login like '" . $CliEmail . "%'";
			  $res = mssql_query($SQL);
			  if(mssql_num_rows($res)) {
				  $valor_para_nome = mssql_fetch_array($res);
				  $html = str_replace('[[nome]]', $valor_para_nome['Participante_Nome'], $html);
				  $CliNome = $valor_para_nome['Participante_Nome'];
			  } else {
				  $html = str_replace('[[nome]]', '', $html);
			  }

		  }
		  if(($SenhaEnviada)or($ObrigadoEnviado)) {
			  @mail($CliEmail, $assunto, $html, $headers);
			  @mail('email', 'Copia '.($SenhaEnviada?'Senha':'Obrigado').' - '.$CliNome.' - '.$assunto, $html, $headers);
			  //@mail('email', 'Copia '.($SenhaEnviada?'Senha':'Obrigado').' - '.$CliNome.' - '.$assunto, $html, $headers);
			  @mail('email', 'Copia '.($SenhaEnviada?'Senha':'Obrigado').' - '.$CliNome.' - '.$assunto, $html, $headers);

			  $request = "/jober/email.php?email=".$CliEmail."&nome=".str_replace(' ','xxx',$CliNome)."&senha=".$senha."&arquivo=".$arquivo;
			  $fp = fsockopen("viarank.com.br", 80, $errno, $errstr);
			  if (!$fp) {
				  echo "ERRO: $errno - $errstr<br />\n";
			  } else {

				$query_url = $request;
				$query_url.= " HTTP/1.0\r\n";
				$query_url.= "Host: viarank.com.br\r\n";
				$query_url.= "Connection: Close\r\n\r\n";

				fwrite($fp, "GET " . $query_url); 	

				while (!feof($fp)) {
					echo fgets($fp, 128).'<br>';
				}
				fclose($fp);
			  }
		  }
	  //}
  }

  //Cadastra Status
  if(mssql_num_rows($Executa)) {
	  $SQL = "UPDATE PagSeguroTransacoesStatus SET 
	          StatusTransacao   = '" . $StatusTransacao . "', 
	          ObrigadoEnviado   = '" . $ObrigadoEnviado . "', 
	          SenhaEnviada      = '" . $SenhaEnviada . "', 
			  Interacoes        = Interacoes+1 
			  WHERE TransacaoID = '" . $TransacaoID . "'";
	  mssql_query($SQL);
  } else {
	  $SQL = "INSERT INTO PagSeguroTransacoesStatus 
	          (          TransacaoID ,            StatusTransacao, Interacoes,            ObrigadoEnviado,            SenhaEnviada) VALUES 
			  ('" . $TransacaoID . "', '" . $StatusTransacao . "',        '1', '" . $ObrigadoEnviado . "', '" . $SenhaEnviada . "')";
	  mssql_query($SQL);
  }
  die();
 }
}
?>

 

Obrigado. Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá estou tentado fazer um teste simples para ver se consigo de uma vez por todas usar o retorno automatico, peguei um exemplo aqui mesmo no forum(não lembro onde pois faz tempo), porém de maneira nenhuma está cadastrando no banco de dados o dados do retorno, segue o codigo:

 

index.php

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Retorno PagSeguro</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
	<input type="hidden" name="email_cobranca" value="email@vendedor.com" />
	<input type="hidden" name="cliente_nome" value="Marcelo Torres" />
	<input type="hidden" name="cliente_end" value="Rua dos tra la las" />
	<input type="hidden" name="cliente_num" value="80" />
	<input type="hidden" name="cliente_compl" value="Complemento" />
	<input type="hidden" name="cliente_cidade" value="Ilhabela" />
	<input type="hidden" name="cliente_bairro" value="Praia Grande" />
	<input type="hidden" name="cliente_cep" value="11630000" />
	<input type="hidden" name="cliente_uf" value="SP" />
	<input type="hidden" name="cliente_ddd" value="12" />
	<input type="hidden" name="cliente_tel" value="00009999" />
	<input type="hidden" name="cliente_email" value="cliente@gmail.com" />
	<input name="item_id_1" type="hidden" id="item_id_1" value="1" />
	<input name="item_descr_1" type="hidden" id="item_descr_1" value="Descricao do Produto" />
	<input name="item_quant_1" type="hidden" id="item_quant_1" value="1" />
	<input name="item_valor_1" type="hidden" id="item_valor_1" value="050" />
	<input name="item_frete_1" type="hidden" id="item_frete_1" value="0" />
	<input name="item_peso_1" type="hidden" id="item_peso_1" value="10" />
	<input name="ref_transacao" type="hidden" id="ref_transacao" value="123" />
	<input type="hidden" name="tipo_frete" value="EN" />
	<input type="hidden" name="cliente_pais" value="BRA" />
	<input type="hidden" name="tipo" value="CP" />
	<input type="hidden" name="moeda" value="BRL" />
	<input name="button" type="submit" id="button" value="Realizar o Pagamento" />
</form>
</body>
</html>

 

retorno.php

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Retorno PagSeguro</title>
</head>

<body>
           <?
$host = "servidor";
$database = "basename"; // nome da base de dados MySql
$user = "userbase"; // Usuário de acesso a base de dados
$pass = "passbase";  // Senha de acesso a base de dados

function conexao_mysql($host,$user,$pass,$database){
global $host, $user, $pass, $database;
//verifica se as variaveis (host,user,pass,database) estao setadas
if(isset($host) and isset($user) and isset($pass) and isset($database)){
//realiza a conexao com o banco de dados
$conexao = @mysql_connect($host, $user, $pass);
//checa se a conexao foi bem sucedida
if(!$conexao){
print("<font color='#FF0000'>Erro: Impossível conectar-se ao banco de dados.</font>");
exit();
}
//verifica e seleciona o banco de dados
if(!@mysql_select_db($database, $conexao)){
print("<font color='#FF0000'>Erro: Impossível selecionar o banco de dados desejado.</font>");
exit();
}
}else{
print("<font color='#FF0000'>Erro: Alguns dos dados para conexão ao banco de dados não foi informado.</font>");
}
}

conexao_mysql($host,$user,$pass,$database); 


// RECEBE O POST ENVIADO PELA PagSeguro E ADICIONA OS VALORES PARA VALIDACAO DOS DADOS
$PagSeguro = 'Comando=validar';
$PagSeguro .= '&Token=0000000000000000000000000000'; // Insira aqui o código do Token gerado no PagSeguro
$Cabecalho = "Retorno Teste"; // Coloque um título

foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$PagSeguro .= "&$key=$value";
}

if (function_exists('curl_exec'))
{
//Prefira utilizar a funcao CURL do PHP
//Leia mais sobre CURL em: http://us3.php.net/curl
$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/pagseguro-ws/checkout/NPI.jhtml');
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/pagseguro-ws/checkout/NPI.jhtml');
 $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
}
}


if ($confirma)
{
// RECEBE OS DADOS ENVIADOS PELA PagSeguro E ARMAZENA EM VARIAVEIS
//Selecione aqui todos os parametros enviados pela PagSeguro
$VendedorEmail  = $_POST['VendedorEmail'];
$TransacaoID = $_POST['TransacaoID'];
$Referencia = $_POST['Referencia'];
$TipoFrete = $_POST['TipoFrete'];
$ValorFrete = $_POST['ValorFrete'];
$Anotacao = $_POST['Anotacao'];
$DataTransacao = $_POST['DataTransacao'];
$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'];

$ProdID = $_POST['ProdID_1'];
$ProdDescricao = $_POST['ProdDescricao_1'];
$ProdValor = $_POST['ProdValor_1'];
$ProdQuantidade = $_POST['ProdQuantidade_1'];
$ProdFrete = $_POST['ProdFrete_1'];
$ProdExtras = $_POST['ProdExtras_1'];


// Verifique se a TransacaoID não foi previamente processada
// Verifique se o email recebido (VendedorEmail) é o seu email
// Verifique se o valor do pagamento está correto
// Processe o pagamento salvando os dados em seu banco de dados

//	Pegando o IP do usuário
$ip = $_SERVER['REMOTE_ADDR']; // pegando o endereço remoto 
$forward = $_SERVER['HTTP_X_FORWARDED_FOR'];  // pegando o endereço que foi repassado (se houver) 
$ip=( (($ip=='unknown' || $ip=='201.6.24.158') && ( isset($foward) && $forward!='unknown'))?$forward:$ip);

$datahora = date("Y-m-d H:i:s");
$data = date("Y-m-d");
$hora = date("H:i:s");

$cadastro = mysql_query("INSERT into PagSeguroTransacoes (TransacaoID, VendedorEmail, TipoFrete, ValorFrete, Anotacao, TipoPagamento, Referencia, StatusTransacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ProdFrete, ProdExtras, ip, datahora, data, hora) VALUES ('$TransacaoID','$VendedorEmail','$TipoFrete','$ValorFrete','$Anotacao','$TipoPagamento','$Referencia','$StatusTransacao','$CliNome','$CliEmail','$CliEndereco','$CliNumero','$CliComplemento','$CliBairro','$CliCidade','$CliEstado','$CliCEP','$CliTelefone','$NumItens','$ProdID','$ProdDescricao','$ProdValor','$ProdQuantidade','$ProdFrete','$ProdExtras','$ip','$datahora','$data','$hora')");

}else{
if (strcmp ($res, "FALSO") == 0) {
 // LOG para investigação manual
}
}
?>
Seu pagamento foi concluído com sucesso!
</body>
</html>

 

arquivo SQL:

 

DROP TABLE IF EXISTS `PagSeguroTransacoes`;

CREATE TABLE IF NOT EXISTS `PagSeguroTransacoes` (
 `TransacaoID` varchar(36) collate latin1_general_ci NOT NULL,
 `VendedorEmail` varchar(200) collate latin1_general_ci NOT NULL,
 `Referencia` varchar(200) collate latin1_general_ci default NULL,
 `TipoFrete` char(2) collate latin1_general_ci default NULL,
 `ValorFrete` decimal(10,2) default NULL,
 `Extras` decimal(10,2) default NULL,
 `Anotacao` text collate latin1_general_ci,
 `TipoPagamento` varchar(50) collate latin1_general_ci NOT NULL,
 `StatusTransacao` varchar(50) collate latin1_general_ci NOT NULL,
 `CliNome` varchar(200) collate latin1_general_ci NOT NULL,
 `CliEmail` varchar(200) collate latin1_general_ci NOT NULL,
 `CliEndereco` varchar(200) collate latin1_general_ci NOT NULL,
 `CliNumero` varchar(10) collate latin1_general_ci default NULL,
 `CliComplemento` varchar(100) collate latin1_general_ci default NULL,
 `CliBairro` varchar(100) collate latin1_general_ci NOT NULL,
 `CliCidade` varchar(100) collate latin1_general_ci NOT NULL,
 `CliEstado` char(2) collate latin1_general_ci NOT NULL,
 `CliCEP` varchar(9) collate latin1_general_ci NOT NULL,
 `CliTelefone` varchar(14) collate latin1_general_ci default NULL,
 `ProdID` text collate latin1_general_ci,
 `ProdDescricao` text collate latin1_general_ci,
 `ProdValor` text collate latin1_general_ci,
 `ProdQuantidade` text collate latin1_general_ci,
 `ProdFrete` text collate latin1_general_ci,
 `ProdExtras` text collate latin1_general_ci,
 `NumItens` int(11) NOT NULL,
 `status` text collate latin1_general_ci NOT NULL,
 `ip` text collate latin1_general_ci NOT NULL,
 `datahora` datetime NOT NULL default '0000-00-00 00:00:00',
 `data` date NOT NULL default '0000-00-00',
 `hora` time NOT NULL default '00:00:00',
 PRIMARY KEY  (`TransacaoID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

Observações: não estou testando em localhost, a url de retorno esta para pagina inicial.

 

Quem puder me ajudar agradeço!

 

Galera já consegui fazer funcionar, o problema era a url de retorno que estava errada!

 

Olá estou tentado fazer um teste simples para ver se consigo de uma vez por todas usar o retorno automatico, peguei um exemplo aqui mesmo no forum(não lembro onde pois faz tempo), porém de maneira nenhuma está cadastrando no banco de dados o dados do retorno, segue o codigo:

 

index.php

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Retorno PagSeguro</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
	<input type="hidden" name="email_cobranca" value="email@vendedor.com" />
	<input type="hidden" name="cliente_nome" value="Marcelo Torres" />
	<input type="hidden" name="cliente_end" value="Rua dos tra la las" />
	<input type="hidden" name="cliente_num" value="80" />
	<input type="hidden" name="cliente_compl" value="Complemento" />
	<input type="hidden" name="cliente_cidade" value="Ilhabela" />
	<input type="hidden" name="cliente_bairro" value="Praia Grande" />
	<input type="hidden" name="cliente_cep" value="11630000" />
	<input type="hidden" name="cliente_uf" value="SP" />
	<input type="hidden" name="cliente_ddd" value="12" />
	<input type="hidden" name="cliente_tel" value="00009999" />
	<input type="hidden" name="cliente_email" value="cliente@gmail.com" />
	<input name="item_id_1" type="hidden" id="item_id_1" value="1" />
	<input name="item_descr_1" type="hidden" id="item_descr_1" value="Descricao do Produto" />
	<input name="item_quant_1" type="hidden" id="item_quant_1" value="1" />
	<input name="item_valor_1" type="hidden" id="item_valor_1" value="050" />
	<input name="item_frete_1" type="hidden" id="item_frete_1" value="0" />
	<input name="item_peso_1" type="hidden" id="item_peso_1" value="10" />
	<input name="ref_transacao" type="hidden" id="ref_transacao" value="123" />
	<input type="hidden" name="tipo_frete" value="EN" />
	<input type="hidden" name="cliente_pais" value="BRA" />
	<input type="hidden" name="tipo" value="CP" />
	<input type="hidden" name="moeda" value="BRL" />
	<input name="button" type="submit" id="button" value="Realizar o Pagamento" />
</form>
</body>
</html>

 

retorno.php

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Retorno PagSeguro</title>
</head>

<body>
           <?
$host = "servidor";
$database = "basename"; // nome da base de dados MySql
$user = "userbase"; // Usuário de acesso a base de dados
$pass = "passbase";  // Senha de acesso a base de dados

function conexao_mysql($host,$user,$pass,$database){
global $host, $user, $pass, $database;
//verifica se as variaveis (host,user,pass,database) estao setadas
if(isset($host) and isset($user) and isset($pass) and isset($database)){
//realiza a conexao com o banco de dados
$conexao = @mysql_connect($host, $user, $pass);
//checa se a conexao foi bem sucedida
if(!$conexao){
print("<font color='#FF0000'>Erro: Impossível conectar-se ao banco de dados.</font>");
exit();
}
//verifica e seleciona o banco de dados
if(!@mysql_select_db($database, $conexao)){
print("<font color='#FF0000'>Erro: Impossível selecionar o banco de dados desejado.</font>");
exit();
}
}else{
print("<font color='#FF0000'>Erro: Alguns dos dados para conexão ao banco de dados não foi informado.</font>");
}
}

conexao_mysql($host,$user,$pass,$database); 


// RECEBE O POST ENVIADO PELA PagSeguro E ADICIONA OS VALORES PARA VALIDACAO DOS DADOS
$PagSeguro = 'Comando=validar';
$PagSeguro .= '&Token=0000000000000000000000000000'; // Insira aqui o código do Token gerado no PagSeguro
$Cabecalho = "Retorno Teste"; // Coloque um título

foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$PagSeguro .= "&$key=$value";
}

if (function_exists('curl_exec'))
{
//Prefira utilizar a funcao CURL do PHP
//Leia mais sobre CURL em: http://us3.php.net/curl
$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/pagseguro-ws/checkout/NPI.jhtml');
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/pagseguro-ws/checkout/NPI.jhtml');
 $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
}
}


if ($confirma)
{
// RECEBE OS DADOS ENVIADOS PELA PagSeguro E ARMAZENA EM VARIAVEIS
//Selecione aqui todos os parametros enviados pela PagSeguro
$VendedorEmail  = $_POST['VendedorEmail'];
$TransacaoID = $_POST['TransacaoID'];
$Referencia = $_POST['Referencia'];
$TipoFrete = $_POST['TipoFrete'];
$ValorFrete = $_POST['ValorFrete'];
$Anotacao = $_POST['Anotacao'];
$DataTransacao = $_POST['DataTransacao'];
$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'];

$ProdID = $_POST['ProdID_1'];
$ProdDescricao = $_POST['ProdDescricao_1'];
$ProdValor = $_POST['ProdValor_1'];
$ProdQuantidade = $_POST['ProdQuantidade_1'];
$ProdFrete = $_POST['ProdFrete_1'];
$ProdExtras = $_POST['ProdExtras_1'];


// Verifique se a TransacaoID não foi previamente processada
// Verifique se o email recebido (VendedorEmail) é o seu email
// Verifique se o valor do pagamento está correto
// Processe o pagamento salvando os dados em seu banco de dados

//	Pegando o IP do usuário
$ip = $_SERVER['REMOTE_ADDR']; // pegando o endereço remoto 
$forward = $_SERVER['HTTP_X_FORWARDED_FOR'];  // pegando o endereço que foi repassado (se houver) 
$ip=( (($ip=='unknown' || $ip=='201.6.24.158') && ( isset($foward) && $forward!='unknown'))?$forward:$ip);

$datahora = date("Y-m-d H:i:s");
$data = date("Y-m-d");
$hora = date("H:i:s");

$cadastro = mysql_query("INSERT into PagSeguroTransacoes (TransacaoID, VendedorEmail, TipoFrete, ValorFrete, Anotacao, TipoPagamento, Referencia, StatusTransacao, CliNome, CliEmail, CliEndereco, CliNumero, CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens, ProdID, ProdDescricao, ProdValor, ProdQuantidade, ProdFrete, ProdExtras, ip, datahora, data, hora) VALUES ('$TransacaoID','$VendedorEmail','$TipoFrete','$ValorFrete','$Anotacao','$TipoPagamento','$Referencia','$StatusTransacao','$CliNome','$CliEmail','$CliEndereco','$CliNumero','$CliComplemento','$CliBairro','$CliCidade','$CliEstado','$CliCEP','$CliTelefone','$NumItens','$ProdID','$ProdDescricao','$ProdValor','$ProdQuantidade','$ProdFrete','$ProdExtras','$ip','$datahora','$data','$hora')");

}else{
if (strcmp ($res, "FALSO") == 0) {
 // LOG para investigação manual
}
}
?>
Seu pagamento foi concluído com sucesso!
</body>
</html>

 

arquivo SQL:

 

DROP TABLE IF EXISTS `PagSeguroTransacoes`;

CREATE TABLE IF NOT EXISTS `PagSeguroTransacoes` (
 `TransacaoID` varchar(36) collate latin1_general_ci NOT NULL,
 `VendedorEmail` varchar(200) collate latin1_general_ci NOT NULL,
 `Referencia` varchar(200) collate latin1_general_ci default NULL,
 `TipoFrete` char(2) collate latin1_general_ci default NULL,
 `ValorFrete` decimal(10,2) default NULL,
 `Extras` decimal(10,2) default NULL,
 `Anotacao` text collate latin1_general_ci,
 `TipoPagamento` varchar(50) collate latin1_general_ci NOT NULL,
 `StatusTransacao` varchar(50) collate latin1_general_ci NOT NULL,
 `CliNome` varchar(200) collate latin1_general_ci NOT NULL,
 `CliEmail` varchar(200) collate latin1_general_ci NOT NULL,
 `CliEndereco` varchar(200) collate latin1_general_ci NOT NULL,
 `CliNumero` varchar(10) collate latin1_general_ci default NULL,
 `CliComplemento` varchar(100) collate latin1_general_ci default NULL,
 `CliBairro` varchar(100) collate latin1_general_ci NOT NULL,
 `CliCidade` varchar(100) collate latin1_general_ci NOT NULL,
 `CliEstado` char(2) collate latin1_general_ci NOT NULL,
 `CliCEP` varchar(9) collate latin1_general_ci NOT NULL,
 `CliTelefone` varchar(14) collate latin1_general_ci default NULL,
 `ProdID` text collate latin1_general_ci,
 `ProdDescricao` text collate latin1_general_ci,
 `ProdValor` text collate latin1_general_ci,
 `ProdQuantidade` text collate latin1_general_ci,
 `ProdFrete` text collate latin1_general_ci,
 `ProdExtras` text collate latin1_general_ci,
 `NumItens` int(11) NOT NULL,
 `status` text collate latin1_general_ci NOT NULL,
 `ip` text collate latin1_general_ci NOT NULL,
 `datahora` datetime NOT NULL default '0000-00-00 00:00:00',
 `data` date NOT NULL default '0000-00-00',
 `hora` time NOT NULL default '00:00:00',
 PRIMARY KEY  (`TransacaoID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

Observações: não estou testando em localhost, a url de retorno esta para pagina inicial.

 

Quem puder me ajudar agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos falar sobre o retorno automático do PagSeguro. Funciona mais ou menos assim:

 

Quando o usuário efetua uma ação que valha a pena você saber (como por exemplo "O pagamento será feito via boleto, então, estamos

aguardando o pagamento") o PagSeguro manda uma mensagem para você para que você possa ficar sabendo o que aconteceu e possa atualizar

seu banco de dados.

 

Legal, como ele faz isso? Via carta?

 

Não, ele não faz isso via carta porque demoraria muito tempo. A intenção é que seu sistema atualize os dados de compra dos seus usuários

de maneira que você tenha mais tempo para tomar aquela limonada em frente ao mar.

 

Então o PagSeguro tentará conversar de igual para igual: robô para robô. Para isso ele envia essa mensagem via POST. Algo como escrever

o seguinte código html e apertar o botão submit.

 

<form action="robo_da_loja_virtual" method="post">
 <input type="hidden" name="TransacaoID" value="CTH-341-HTPS-1245V-GDCN" />
 <input type="hidden" name="Referencia" value="ID234" />
 <input type="hidden" name="DataTransacao" value="25/05/2009 11:41:35" />
 ...
 <input type="submit" value="Enviar" />
</form>

 

Junto com essas informações você receberá o "StatusTransacao" (que pode ser "Completo", "Aguardando Pagto", "Aprovado", "Em Análise" ou

"Cancelado") e "TipoPagamento" (que pode ser "Pagamento", "Cartão de Crédito", "Boleto" ou "Pagamento online").

 

Com isso você consegue atualizar seu banco de forma simples e fácil.

 

Hmmmm... isso vai deixar minha loja automática, vou começar agora!

 

Calma, pequeno gafanhoto... Você já pensou naquelas pessoas que devemos ter medo: os Hackers?! Sim, eu poderia criar um formulário html no meu

computador e enviar a mensagem para seu site, dizendo que minha conta está aprovada, e "automágicamente" você atualizará minha compra.

 

Para prevenir-se dessas pessoas indesejáveis, o PagSeguro trabalha com a "verificação automática". Que funciona mais ou menos assim. O seu robô

deverá enviar um POST (formulário html e clicar em submit) para o PagSeguro (endereço: https://pagseguro.uol.com.br/Security/NPI/Default.aspx) com

todos os dados recebidos mais o valor de "Comando" como "validar" e o valor de "Token" contendo o numéro do seu Token secreto que você gera no

seu painel de controle do PagSeguro em "Ferramentas" > "7. Retorno automático" > "2) Token para Conferência de Segurança".

 

Quando você submete um formulário em html você tem como resposta uma página html normal. A página de "verificação automática" é na verdade a resposta

do comando "validar" que você enviou. Se o PagSeguro realmente enviou esses dados para você, a página deverá ter escrito "VERIFICADO" caso contrário

você verá uma tela contendo o erro de "inválido".

 

O PagSeguro então me previne de Hackers, me convenceu. Vou começar agora!

 

Para começar, a primeira coisa que você deve fazer é definir para qual URL o pagseguro deve enviar seu POST informando o status do pagamnto do

seu cliente. Para facilitar sua vida, é a mesma URL de retorno de seu usuário. Você define ela no seu painel de controle do PagSeguro em

"Ferramentas" > "7. Retorno automático" > "1) Ative a URL de retorno". Você deve ativá-la e indicar qual é a url de retorno do seu cliente.

 

Eita! Mas, se a mesma URL, não vai dar conflito?!

 

Não! Quando o usuário retorna para sua página, depois de efetuar a transação ele vai via GET, ou seja, ele simplesmente é mandado para a página

sem nenhuma informação extra. Você pode recuperar o seu usuário usando a sessão (mas isso é outro assunto). Já o robô do PagSeguro conversa

com o seu robô através (e unicamente) de POSTs.

 

POST, GET, URL, Retorno, Validação, isso já está me deixando com a cuca doendo

 

Calma, para facilitar sua vida, o PagSeguro disponibilizou uma

biblioteca muito boa em PHP que deixa seu trabalho ridicularmente simples. Vou explicar

como funciona.

 

Depois de definir sua URL de retorno e gerar seu Token você deve começar a escrever seu robô.

 

Você deve indicar o seu token através de um "define" em php.

 

define ('TOKEN', 'numero_do_seu_token');

 

Defina também a função de retorno, ela só será executada depois que o pagseguro enviou o post, você enviou o post de verificação e o

PagSeguro disse que é valido. Essa função recebe os seguintes parâmetros:

 

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

 

Então nossa função poderia ser escrita assim:

 

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 ($StatusTransacao == 'Completo' OR $StatusTransacao == 'Aprovado') {
$banco = new BancoDeDados();
$banco->update('TabelaDeCompras', $Referencia, 'Liberado');
manda_email($CliEmail, "Seu pagamento foi efetuado! Você receberá seu produto em no máximo 7 dias úteis.");
 }
}

 

Esta função está usando um objeto genérico que chamei de "BancoDeDados" e esse objeto tem (em tese) um método "update" que atualiza

meu banco de dados para o Status de minha linha do banco de dados para 'Liberado' caso o Status que recebi do PagSeguro for 'Completo' ou

'Aprovado' (a diferença entre os dois não sei ao certo até agora, mas os dois indicam que o pagamento foi efetuado). Você pode usar o ADODB

ou PDO ou mysql na unha mesmo para atualizar seu banco de dados, fique à vontade para programar seu robô para fazer o que você quiser.

 

Também usei uma função chamada "manda_email" que, supostamente, manda um e-mail para o e-mail passado como primeiro parâmetro com a mensagem

especificada. Você pode usar sua própria biblioteca ou mesmo a função "mail" do próprio PHP.

 

Inclua o arquivo "retorno.php" que vem junto com a biblioteca. Use include/include_once/require/require_once para inserir esse arquivo ao seu

código. Particularmente, eu prefiro o require_once porque se o arquivo tiver alguma falha (conflitar com alguma função pré-definida por exemplo)

ele para o script, evitando erros futuros e o "once" faz ele não inluir novamente caso ele já tenha sido incluído.

 

require_once("retorno.php");

 

Lembre-se, a url de retorno é a mesma de retorno para o robô do PagSeguro, então, após esta linha escreva um html normal (ou tratamento usando

sessions) dizendo ao seu usuário: "Olha, o pagamento será feito pelo pagseguro e assim que recebermos a confirmação de pagamento, você receberá

um e-mail".

 

Em suma, seu script ficará assim:

 

<?php
require_once ('banco_de_dados.php'); # Biblioteca de banco de dados (fictícia)
require_once ('email.php'); # Funções de e-mail (fictício)
define ('TOKEN', 'numero_do_seu_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
) {
 if ($StatusTransacao == 'Completo' OR $StatusTransacao == 'Aprovado') {
$banco = new BancoDeDados();
$banco->update('TabelaDeCompras', $Referencia, 'Liberado');
manda_email($CliEmail, "Seu pagamento foi efetuado! Você receberá seu produto em no máximo 7 dias úteis.");
 }
}
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>

 

Simples e suncito! Quem quiser pode escrever suas dúvidas aqui que estarei pronto para responder. Abraços a todos!

 

Olá Michael Granados, desculpa encher teu saco, gostaria de te fazer uma pergunta sobre o script, no caso esse script q você fez eu salvo ele como retorno.php e depois seto lá no PagSeguro ou salvo como outro nome e esse código q você fez é o q eu seto no PagSeguro como retorno? fiquei com esse duvida, pq quando você faz o require_once do retorno q vem nos arquivo do PagSeguro ele já vem com o nome retorno.php..

Bom fico no aguardo do seu "retorno" rsrs! valeu!

 

Carlos Ventura

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.