Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Dica enviada por Dennis Ferreira, Gerente do PagSeguro.
A URL de retorno tem duas funções distintas. Uma é redirecionar o usuário após terminar a transação no PagSeguro para o site da loja, apenas redirecionando à página, sem nenhum dado de POST. A outra é enviar os dados da transação e alteração de status da transação via POST.
O POST é automático, enviado ao final da transação e quando ocorre alteração do status, ambos em background, abrindo uma nova sessão no seu web site. Não é possível a exibição imediata no seu web site dos dados do post (echo, print, Response.Write, etc).
Alguns desenvolvedores enfrentam situações em que não conseguem receber o POST. Seguem abaixo os principais motivos e dicas para resolução do problema:
Bons negócios!
Boa Tarde
Legal saber essas informações primeiramente, elas não constam no próprio site do PagSeguro
Em segundo, se possível,
gostaria de saber as codificações
em coldFusion no PagSeguro, está tudo totalmente errado
o código é bem diferente e bem mais simples do que eles fizeram
entretanto há um grande problema.... qual é o CHARSET??
Se você recebe os dados, meu servidor trata tudo como UFT-8
Mas no PagSeguro, não sei como retornar isso
Não há nenhum FAQ,
nem area de teste
você nem sabe como receber, nem como retornar.
Torna-se dificil
Primeiro Tentei Encoders
na variavel tipopagamento passei da seguinte maneira
1 - Cartão de Crédito
2 - Cart%40a de Cre%29dito
Nenhuma das alternativas....
Em PHP, como não programo, apenas copiei o código
mesmo assim, o bando de dados (table) gerada por eles
é bem diferente da que eles usaram no código para inserir.
Queria algumas respostas, já que no site, nem os atendentes conseguem passar...
Estou comercializando um código feito em C#.NET e PHP do retorno automatico do PagSeguro.
Caso haja interesse.
http://www.reginaldonoronha.net/produtos.aspx
Abraço
>
Boa Tarde
Legal saber essas informações primeiramente, elas não constam no próprio site do PagSeguro
Em segundo, se possível,
gostaria de saber as codificações
em coldFusion no PagSeguro, está tudo totalmente errado
o código é bem diferente e bem mais simples do que eles fizeram
entretanto há um grande problema.... qual é o CHARSET??
Se você recebe os dados, meu servidor trata tudo como UFT-8
Mas no PagSeguro, não sei como retornar isso
Não há nenhum FAQ,
nem area de teste
você nem sabe como receber, nem como retornar.
Torna-se dificil
Primeiro Tentei Encoders
na variavel tipopagamento passei da seguinte maneira
1 - Cartão de Crédito
2 - Cart%40a de Cre%29dito
Nenhuma das alternativas....
Em PHP, como não programo, apenas copiei o código
mesmo assim, o bando de dados (table) gerada por eles
é bem diferente da que eles usaram no código para inserir.
Queria algumas respostas, já que no site, nem os atendentes conseguem passar...
Segui todas as indicações, mas não deu certo, não dá nenhum erro, nada. simplesmente não acontece nada. Segue abaixo o código da pagina de retorno. Se puder me ajudar,
// ENVIA DE VOLTA PARA O PAGSEGURO OS DADOS PARA VALIDAÇÃO
$PagSeguro = 'Comando=validar';
$PagSeguro .= "&Token=65937252FE57C81FC5E62A49581577BB";
foreach ($_POST as $key => $value) $value = urlencode(stripslashes($value));
$PagSeguro .= "&$key=$value";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
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);
$resp = curl_exec($ch);
echo curl_errno($ch);
curl_close($ch);
$confirma = (strcmp ($resp, "VERIFICADO") == 0);
if($confirma){
$TransacaoID = $_POST['TransacaoID'];
$Referencia = $_POST['Referencia'];
$StatusTransacao = $_POST['StatusTransacao'];
$CliNome = $_POST['CliNome'];
$NumItens = $_POST['NumItens'];
$ProdValor = $_POST['ProdValor_1'];
$SQL = "INSERT INTO TransacoesPagSeguro (" .
"TransacaoID, " .
"Referencia, " .
"StatusTransacao, " .
"CliNome, " .
"NumItens" .
") VALUES (" .
"" .
"'" . $TransacaoID . "', " .
"'" . $Referencia . "', " .
"'" . $StatusTransacao . "', " .
"'" . $CliNome . "', " .
"'" . $NumItens . "'" .
")";
//$Executa = mysql_query($SQL) or print(mysql_error());
$id_pedido=$Referencia;
$sql_pedido="update pedido set pagamento='$TipoPagamento', status='$StatusTransacao' where id_pedido='$Referencia'";
$exe = mysql_query($sql_pedido);
$id_pedido=$Referencia;
$sql_data="select data_pedido from pedido where id_pedido='$id_pedido'";
$res_data=mysql_query($sql_data) or die (mysql_error());
$l_data=mysql_fetch_row($res_data);
$data_pedido=$l_data[0];
}}
Grato
GUilherme
Pessoal,
Disponibilizei em meu website um código COMPLETO desenvolvido em .NET com muitos comentários, excelente para aprendizado e inserção direta no seu website.
Os códigos estão disponíveis em C#.net (http://www.oticasnet.com.br/Downloads/NPIPagSeguroCS.zip) e em VB.net (http://www.oticasnet.com.br/Downloads/NPIPagSeguroVB.zip)
Os próprios projetos são auto-explicativos, ou seja, não há documentação para os mesmos.
Mesmo sendo desenvolvido em .NET, pode ser facilmente traduzido para outra linguagem, visto que o código está muito detalhado.
Qualquer dúvida, postar aqui.
[]'s
Então cara, estou com um problema parecido com o seu, apesar de meu código ser em FLASH. No retorno do Carrinho do PAGSEGURO, não aparece o botão de CONTINUAR COMPRANDO. Mas o incrível é que ele só não aparece no INTERNET EXPLORER, pois no MOZILA acontece tudo como deveria, como você disse, o bendito botão que não aparece no EXPLORER aparece no MOZILA! Pelo que entendi, não somos apenas nós que tropeçamos neste problema do PAGSEGURo que aliás, já fiz infinitos contatos através do site deles e o atendente responde algo sem nexo, ainda dizendo que desconhece o problema, mesmo eu enviando o endereço do meu site para ele testar "in loco". O safado diz que testou e deu TUDO CERTO! É mole??? Bom, em vista de nosso problema em comum, gostaria de saber se você conseguiu resolvê-lo e se pode me ajudar. Um abraço!
>
Pessoal,
Disponibilizei em meu website um código COMPLETO desenvolvido em .NET com muitos comentários, excelente para aprendizado e inserção direta no seu website.
Os códigos estão disponíveis em C#.net (http://www.oticasnet.com.br/Downloads/NPIPagSeguroCS.zip) e em VB.net (http://www.oticasnet.com.br/Downloads/NPIPagSeguroVB.zip)
Os próprios projetos são auto-explicativos, ou seja, não há documentação para os mesmos.
Mesmo sendo desenvolvido em .NET, pode ser facilmente traduzido para outra linguagem, visto que o código está muito detalhado.
Qualquer dúvida, postar aqui.
[]'s
SOLUÇÃO DA PÁGINA DE RETORNO PAGSEGURO
Link do Post: http://forum.imasters.com.br/index.php?showtopic=319915
Você também pode usar a solução (grátis e livre) da biblioteca de auxilio disponibilizada pelo próprio PagSeguro.
Escrevi dois tópicos que explicam bem como usar tanto o retorno automático como a biblioteca de auxilio à criação de inputs para o PagSeguro.
Implementando PagSeguro com PHP, Tutorial de como implementar a biblioteca PHP de PagSeguro
Senhores,
Me esclareçam uma dúvida.
Estou usando o Joomla 1.5 com virtuemart.
Primeiramente instalei o código do pagseguro forncido pela Visie, ao realizar a compra sou direcionado para o site do pagseguro para cadastro e emissão do boleto.
Até aí normal.
Qual seria a função do código de retorno utilizando o Virtuemart?
O status da negociação mudaria automaticamente, tipo sairia de pendente para completa após o comprador efetuar o pagamento para o pagseguro, ou este tipo de controle deverá ser feito manualmente pelo administrador do virtuemart após receber o e-mail de pagamento realizado.
Meu caro @F_Castel
exatamente isso. O retorno automático converte compras "pendentes" para "completa" assim você não precisa entrar no sistema PagSeguro e no seu admin para saber o que está acontecendo. Bote em tese que você tenha uma média de 500 compras por dia, você não iria achar legal ter que cadastrar na mão o que está pendente ou não.
>
Meu caro @F_Castel
exatamente isso. O retorno automático converte compras "pendentes" para "completa" assim você não precisa entrar no sistema PagSeguro e no seu admin para saber o que está acontecendo. Bote em tese que você tenha uma média de 500 compras por dia, você não iria achar legal ter que cadastrar na mão o que está pendente ou não.
Michael Granados,
Você acha viável adaptar o sistema do Paypal para o PagSeguro,
Mudando as variáveis para que se adequem a este, tipo, incluir o Token, comando Validar.
Depois alterar o Notify.php do paypal para pagseguro...
Alterar o ps_paypal.cfg.php, ps_paypal.php e notyfy.php
Vou fazer uns testes o posto para teus comentários.
Então @F_Castel,
O código fornecido pela Visie já está predefinido para você trabalhar já com o retorno automático, não precisa usar o do PayPall, até porque os sistemas são diferentes. Por exemplo, o pagseguro usa a mesma url de retorno para o envio de confirmação, já o PayPall não.
- Retorne os dados para validação sem nenhuma conversão, exatamente da maneira como recebeu (verifique se a sua string está sendo enviada com Encode, por exemplo: “%20” ou o sinal de adição “+” substituindo o espaço, etc).
Estou com um problema com o Retorno Automático.
Minha aplicação está em Java(JSP/Servlet) e meu retorno automático SEMPRE retorna "Falso".
Lendo na internet, vi que os possíveis problemas são:
- Token incorreto;
- Encode;
Bom, os dois ítens estão sendo seguidos à risca. Não encontro nenhum problema no código, entretanto não consigo fazer funcionar.
Receio que seja o velho problema de encode.
Em Java, não simplesmente faz-se encode, como nas outras linguagens.
Antigamente, usava-se "URLEncoder.encode(String);" para fazero encode, entretanto, por motivos de, digamos, "variações de um servidor para outro", que poderia ora fazer o decode de uma forma ora de outra, este método foi depreciado (tornou-se obsoleto).
Hoje, o usado é URLEncoder.encode(String, "UTF-8");
Entretanto, ainda retorna Falso para minha confirmação.
Não importa qual codificação eu utilizo (seja UTF-8, que é o padrão, seja ISO-8859-1, que é o usado no encod do envio no formulário ao pagseguro).
Bom, talvez o erro nem esteja neste ponto, entretanto, posso ver meu log e minha URL está montada perfeitamente, mas não é autenticado nunca.
Gostaria de saber se alguém tem alguma noção de como eu posso resolver este problema.
Grato,
McLuck
Existe um erro no script do envio do POST do PagSeguro! (Ou pelo menos falta de aviso da parte de vocês na hora de configuração da URL de retorno).
O script de vocês não consegue retornar para urls que contêm QUERY_STRING. Por exemplo:
http://www.bijuonline.com/BijuOnline/teste.php ENVIA COM SUCESSO!
http://www.bijuonline.com/BijuOnline/?act=retorno NÂO ENVIA COM SUCESSO!
Configurei conforme o código do Michael mas o retorno vem vazio! O logo ta vazio, vazio!
E agora quem poderá me ajudar?
// Aqui vai seu Token
define('TOKEN','9999999999999999999999');
// 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) {
$f=fopen ('pagseguro.log', 'w'); # 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, $_POST['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);
}
// Incluindo o arquivo da biblioteca
include('retorno.php');
if (isset($_POST)) 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);
}Impressionante... será que um dia irá voltar a funcionar???
>
Dica enviada por Dennis Ferreira, Gerente do PagSeguro.
A URL de retorno tem duas funções distintas. Uma é redirecionar o usuário após terminar a transação no PagSeguro para o site da loja, apenas redirecionando à página, sem nenhum dado de POST. A outra é enviar os dados da transação e alteração de status da transação via POST.
O POST é automático, enviado ao final da transação e quando ocorre alteração do status, ambos em background, abrindo uma nova sessão no seu web site. Não é possível a exibição imediata no seu web site dos dados do post (echo, print, Response.Write, etc).
Alguns desenvolvedores enfrentam situações em que não conseguem receber o POST. Seguem abaixo os principais motivos e dicas para resolução do problema:
Bons negócios!
Estou tendo um problema, tenho recebido retorno de operação concluida pelo token, mas quando vou ao pagseguro, observo que a transação não foi concretizada, isso tem ocorrido constantemente, como acabar com essa mensagemm falsa?
Hi
I am not able to download . its saying page not found .
JAYASON
>
Personal
Made available in my website a code developed in FULL. NET with many comments excellent for learning and direct insertion on your website.
The codes are available in C #. Net ([url = "[http://www.oticasnet.com.br/Downloads/NPIPagSeguroCS.zip"]](http://www.oticasnet.com.br/Downloads/NPIPagSeguroCS.zip%22%5D) http://www.oticasnet.com.br/Downloads/NPIPagSeguroCS.zip [ / url]) and in VB.net ([url = "[http://www.oticasnet.com.br/Downloads/NPIPagSeguroVB.zip"]](http://www.oticasnet.com.br/Downloads/NPIPagSeguroVB.zip%22%5D) http://www.oticasnet.com.br/Downloads/NPIPagSeguroVB.zip [/ url])
The projects themselves are self-explanatory, ie, there is no documentation for them.
Even being developed. NET can be easily translated into another language, since the code is very detailed.
Any questions, post here.
[] 's
[/ quote]
Hi
Can you tell me how we can redirect to our site . How will this paypal know where to return . Can we pass some return URL while posting the data .
Thanks
JAYASON
>
I am selling a code written in C #. NET and PHP automatic return of PayPal.
In the event of interest.
[url = "[http://www.reginaldonoronha.net/produtos.aspx"]](http://www.reginaldonoronha.net/produtos.aspx%22%5D) http://www.reginaldonoronha.net/produtos.aspx [/ url]
Abraço
Good Afternoon
Nice to know this information first, they do not appear on the site of PayPal
Second, if possible,
would like to know the encodings
ColdFusion in the PayPal, it's totally wrong
the code is quite different and much simpler than they did
however there is a big problem .... what is the charset?
If you receive the data, my server treats everything as UTF-8
But in PayPal, I do not know how to return it
There is no FAQ,
or test area
you do not know how to get or how to return.
It is difficult
First I tried Encoders
the variable tipopagamento spent as follows
1 - Credit Cards
2 - Cart 40th Cre% 29dito%
None of the ....
In PHP, like do not write code, just copied the code
anyway, the band of data (table) generated by them
is quite different from what they used to insert the code.
He wanted some answers, since the site, nor the attendants can pass ...[/ quote]
[/ quote]
Pessoal,
Tenho algumas dúvidas que eu não consegui sanar em minhas pesquisas na web.
O que acontecerá quando meu site por alguma razão (restart de servidor, manutencao de aplicacao, etc) perder o POST de confirmação do PagSeguro?
O PagSeguro tentará fazer uma novo post após alguns minutos? Se sim, qual o número máximo de tentativas que ele fará? Com que frequencia será essas tentativas?
Existe outra alternativa para consultar o status de uma transação no PagSeguro? Digo uma consulta direta do meu site => pagSeguro e não o inverso como é feito pelos componentes .NET feitos pela VISIE.
A minha preocupação é em ter usuários que PAGARAM e não receberam o pedido, pois em meu sistema o pagamento não está confirmado.
Mandei um e-mail para o PagSeguro. Enquanto aguardo gostaria de saber se vocês ainda não tiveram essa preocupação e se tiveram poderiam me indicar algum link para o material para eu ler?
Procurei no site do PagSeguro e não encontrei nada falando a respeito.
Um abraço.
Olá amigos, estou com o seguinte problema:
Usando a aplicação local com o Servidor de teste do PagSeguro (feito pelo Teoni), o retorno automático envia o post e minha aplicação grava os dados retornados. Quanto publico minha aplicação no servidor o retorno automático não dá erro, mas também não grava nada na base.
alguém sabo que que pode ser o problema? A aplicação está em .NET
Segue o código:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PGSRetorno.UrlNPI = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml"
End Sub
Protected Sub PGSRetorno_VendaEfetuada(ByVal retornoVenda As UOL.PagSeguro.RetornoVenda) Handles PGSRetorno.VendaEfetuada
Dim formapgto As String = retornoVenda.TipoPagamento.ToString
status = retornoVenda.StatusTransacao.ToString
'grava venda
End Sub
>
Olá amigos, estou com o seguinte problema:
Usando a aplicação local com o Servidor de teste do PagSeguro (feito pelo Teoni), o retorno automático envia o post e minha aplicação grava os dados retornados. Quanto publico minha aplicação no servidor o retorno automático não dá erro, mas também não grava nada na base.
alguém sabo que que pode ser o problema? A aplicação está em .NET
Segue o código:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PGSRetorno.UrlNPI = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml"
End Sub
Protected Sub PGSRetorno_VendaEfetuada(ByVal retornoVenda As UOL.PagSeguro.RetornoVenda) Handles PGSRetorno.VendaEfetuada
Dim formapgto As String = retornoVenda.TipoPagamento.ToString
status = retornoVenda.StatusTransacao.ToString
'grava venda
End Sub
Moleza ... você ta fazendo alguma m***. E essa m*** da pau só na producao. Como o post é entre o servidor do pagseguro e o seu servidor quem verá o erro é o servidor do pagseguro e nao você =). Tente fazer logar todo e qualquer erro em arquivo texto em algum local e verá o problema. =)
Coloquei um log, e acredite se quiser, ele não escreve nada nele. hehehe.. Sinistro
Alguem poderia me informar como configurar o retorno automático em asp. Fiz alguns testes e sempre me retorna falso na verificação.
Obrigado.
Alguém por favor poderia me ajudar criei 3 páginas venda0.php, venda1.php e venda2.php para as compras do meu produto. Onde venda0.php é para cadastrar a quantidades desejada onde chama o venda1.php que envia os dados necessários para o pagseguro. Muito bem funcionou e inclusive o cliente já até pagou e o status do pagseguro esta como pago. Mas quando acesso venda2.php aparece a mesma mensagem anterior "Obrigado por efetuar a compra" e não estou conseguindo chamar o "StatusTransacao" atual do retorno automático. poderia me ajudar. Qual quer coisa meu e-mail é edinaldoprof@comerciovirtual.pro.br - peço por favor que me ajudem... estou enviando os dados abaixo:
venda0.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">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body> <form action="venda1.php" method="post" onSubmit="return ValidaSemPreenchimento(this)">
<table width="699" border="0" align="center" widt=100%>
<tr>
<td width="13"><span class="style1">*</span></td>
<td width="202">E-mail do comprador:<td width="470"><input type="text" size="80" maxlength="100" name="email" obrigatorio="1"></td>
</tr>
<tr>
<td><span class="style1">*</span></td>
<td>Senha:</td><td><input type="password" size="8" maxlength="8" name="senha" id="Senha" obrigatorio="1"></td>
</tr>
<tr>
<td><span class="style1">*</span></td>
<td>Quantidade de Cupons:</td><td><input type="text" size="3" maxlength="3" name="quant" id="Quantidade de Cupons" obrigatorio="1"></td>
</tr>
<tr>
<td><span class="style1">*</span></td>
<td>Usuário 1:</td>
<td><input type="text" size="50" maxlength="80" name="usuario_cupom" id="Usuario do Cupom 1" obrigatorio="1"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="login" value="Login" id="Login"></td><td> </td>
</tr>
</table>
</form></body>
</html><!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">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
include "connect.php";
$hoje=date("Y-m-d");
$senha=$_POST["senha"];
$email=$_POST["email"];
$quantunit=$_POST["quant"];
$usuario_cupom=$_POST["usuario_cupom"];
$sql="select * from bdclientes where email='$email'";
$res=mysql_query($sql);
$cad=mysql_fetch_assoc($res);
$nome2=$cad["nome"];
$email2=$cad["email"];
$senha2=$cad["senha"];
if ($email2==""){
?>
<script>
alert("E-mail não cadastrado!!!");
location.href=("cadastro.php")
</script>
<?php
}
if ($senha2<>$senha){
?>
<script>
alert("Senha não confere!");
location.href=("compra_pagseguro.php")
</script>
<?php
}
/*if ($quantunit>2){
?>
<script>
alert("No máximo 2 cupons!!!");
location.href=("compra_pagseguro.php")
</script>
<?php$sql="select * from ofertas where ativo='S'";
$res=mysql_query($sql);
$cad=mysql_fetch_assoc($res);
$id_oferta=$cad["id_oferta"];
$descricao=$cad["descricao"];
//variável $quantunit
$preco=$cad["preco"];
$ativo=$cad["ativo"];
//variável $usuario_cupom
$pagou="N";
//variável $email
$endereco=$cad["endereco"];
$referencia=$cad["referencia"];
$valor_original=$cad["valor_original"];
$validade=$cad["validade"];
$regra1=$cad["regra1"];
$regra2=$cad["regra2"];
$regra3=$cad["regra3"];
$regra4=$cad["regra4"];
$regra5=$cad["regra5"];
$regra6=$cad["regra6"];
$regra7=$cad["regra7"];
$total = $quantunit * $preco;
$insere="insert into descontos(descricao,quant,preco,ativo,usuario,pagou,email,endereco,referencia,valor_original,validade,regra1,regra2,regra3,regra4,regra5,regra6,regra7,presente,data_compra) values ('$descricao','$quantunit','$preco','$ativo','$usuario_cupom','$pagou','$email','$endereco','$referencia','$valor_original','$validade','$regra1','$regra2','$regra3','$regra4','$regra5','$regra6','$regra7','$presente','$hoje')";
mysql_query($insere) or die ("Ocorreu um erro!");
$sql="select * from descontos where email='$email' and data_compra='$hoje'";
$res=mysql_query($sql);
$cad=mysql_fetch_assoc($res);
$ref_transacao=$cad["id_desconto"];
?>
<form target="pagseguro" method="post" action="[https://pagseguro.uol.com.br/checkout/checkout.jhtml">](https://pagseguro.uol.com.br/checkout/checkout.jhtml)
<input type="hidden" name="email_cobranca" value="g.libonati@hotmail.com">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">
<input type="hidden" name="ref_transacao" value="<?php echo $ref_transacao; ?>">
<input type="hidden" name="encoding" value="UTF-8">
<input type="hidden" name="item_id_1" value="<?php echo $id_oferta; ?>">
<input type="hidden" name="item_descr_1" value="<?php echo $descricao; ?>">
<input type="hidden" name="item_quant_1" value="<?php echo $quantunit; ?>">
<input type="hidden" name="item_valor_1" value="<?php echo $total; ?>">
<input type="hidden" name="item_frete_1" value="0">
<input type="hidden" name="item_peso_1" value="0">
<!-- Caso queira mais itens no carrinho
<input type="hidden" name="item_id_2" value="67890">
<input type="hidden" name="item_descr_2" value="Descrição do item 2 a ser vendido">
<input type="hidden" name="item_quant_2" value="1">
<input type="hidden" name="item_valor_2" value="199">
<input type="hidden" name="item_frete_2" value="0">
<input type="hidden" name="item_peso_2" value="0">
-->
<input type="hidden" name="tipo_frete" value="EN">
<input type="image" src="images/botao.gif" height="150" name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form>
</body>
</html>
venda2.php ==============================================================================
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
define('TOKEN', '221E233A241741F297604486DC11DA81q');
class PagSeguroNpi {
private $timeout = 20; // Timeout em segundos
public function notificationPost() {
$postdata = 'Comando=validar&Token='.TOKEN;
foreach ($_POST as $key => $value) {
$valued = $this->clearStr($value);
$postdata .= "&$key=$valued";
}
return $this->verify($postdata);
}
private function clearStr($str) {
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
return $str;
}
private function verify($data) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "[https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml"](https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = trim(curl_exec($curl));
curl_close($curl);
return $result;
}
}
if (count($_POST) > 0) {
// POST recebido, indica que é a requisição do NPI.
$npi = new PagSeguroNpi();
$result = $npi->notificationPost();
$transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';
if ($result == "VERIFICADO") {
//O post foi validado pelo PagSeguro.
} else if ($result == "FALSO") {
//O post não foi validado pelo PagSeguro.
} else {
//Erro na integração com o PagSeguro.
}
} else {
// POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
// No término do checkout o usuário é redirecionado para este bloco.
?>
<h3>Obrigado por efetuar a compra.</h3>
<?php
}
?>
Muito bom.