Enfim, como prometido a nova versão do Retorno de dados do Pagseguro. As maiores novidades ficaram por conta da utilização a nova URL do PagSeguro para validação e a captura completa dos produtos.
Agora ficou mais fácil a instalação do mesmo, basta baixar o script abaixo, descompactar e editar o PagSeguroRetornoConfig.php inserindo os dados solicitados. Depois basta configurar o banco de dados Mysql e utilizar o arquivo SQL disponível para criar as tabelas.
Download do script de Retorno de Dados Automatico do Pagseguro 2.0
Você deve configurar a sua conta no PagSeguro para ativar o Retorno Automático de dados, para isso, entre no seu PagSeguro, nas opcao Preferencias > Retorno Automatico de Dados. Basta ativar a URL de retorno e colocar o endereço completo da URL do arquivo. Neste mesmo local é onde você vai gerar o seu Token, solicitada no arquivo de configurações.
Feito isso, o seu Retorno já esta funcional.
Para testar seu script não é preciso fazer um pagamento, basta abrir o arquivo TestarCompra.php colocar o seu e-mail e enviar para o seu FTP. Feito isso, é so acessar o arquivo, gerar uma compra aleatoria e escolher BOLETO BANCARIO para pagamento. Depois de confirmar a compra por boleto e aguardar o tempo solicitado, as suas tabelas já terão os dados da compra, bem como os produtos gerados.
Ps: Se você não é programador, não faça perguntas, peça um orçamento atraves do contato.
É isso ae! La pergunta?

junho 9th, 2011 at 21:24
[...] ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, clique aqui. [...]
junho 10th, 2011 at 21:16
Muito bom Diogo, parabéns!
Extremamente bem montado e de fácil manuseio.
gde abç
junho 11th, 2011 at 02:01
Valeu Fábio, agora ficou completinho! So não usa o retorno quem não quer. :)
junho 19th, 2011 at 00:38
Parabéns, entra em contato com o PagSeguro o seu script é MUITO melhor que o deles. Valeu.
junho 21st, 2011 at 12:55
Fala ai Diogo! Tu é o cara :P
Ve se consegue me ajudar:
Ao testar o pagamento por boleto bancário, retorno para ou PagSeguroRetorno.php e em seguida sou redirecionado através do Header(), comentei ele e adicionei em cima um echo count($_POST); só para verificar se há algum $_POST sendo passado já que não está adicionando nada no banco de dadas e eis a supresa, está retornado 0, ou seja, não está sendo passado nenhum $_POST, sabe me dizer o porque?
Valeu e melhoras para ti!
junho 24th, 2011 at 18:22
Boa Diogo!
Só tive um probleminha no bluehost (serv de hosp).
Qdo fui testar deram os seguintes erros:
————————————————————————————————————
Warning: Cannot modify header information – headers already sent by (output started at /beta/PagSeguroRetorno.php:1) in /beta/PagSeguroRetorno.php on line 14
?
Warning: Cannot modify header information – headers already sent by (output started at /beta/PagSeguroRetorno.php:1) in /beta/PagSeguroRetorno.php on line 115
————————————————————————————————————
Mas coloquei o charset com tag html simples mesmo () fora do php.
E troquei o
header(“Location: $retorno_site”)
por
echo “window.location=\”$retorno_site\”";
Aí funcionou numa boa.
Mas vlw cara!!
Te amo! (lol)
junho 26th, 2011 at 15:15
Olá Dourado, parabéns pela iniciativa, estou tentando testar em localhost, mas não está guardando no banco de dados, estou usando o PagSeguro Server (http://code.google.com/p/pagsegurodotnet/) para simular o robo do PagSeguro em localhost, os dados estão sendo enviado para o PagSeguro Server perfeitamente, porém no banco não está guardando nada e o mais curioso é que não há nenhuma mensagem de erro de conexão com o banco de dados. Alguma ideia sobre o que pode estar acontecendo?
junho 26th, 2011 at 18:50
Valew Dourado, o melhor tutorial de retorno automático da net, o pagseguro deveria referência-lo. Abs
junho 26th, 2011 at 22:28
Bruno, entrar em contato com eles? hehehe.. eu fiz para ajudar mesmo, mas é uma possibilidade sim, quem sabe! :)
junho 26th, 2011 at 22:29
Gustavo, voce ta fazendo uma confusao, uma vez ele retorna com post, mas no neste caso seu, é apenas o redirecionamento mesmo, sem o post. Para testar o funcionamento é simples, basta realizar um pagamento teste por boleto bancario, não é necessário pagar, apenas gerar o boleto, ok?
junho 26th, 2011 at 22:31
Daniel, este erro, com certeza é porque voce editou o arquivo e deixou algo imprimindo antes do Header, ae da erro mesmo. ;)
E este eu te amo ae? Impolgou? ui ui!!
junho 26th, 2011 at 22:33
Marcelo, quer uma dica? Desiste do PagSeguro teste. A melhor maneira de testar é na pratica. Para isso, gere um pagamento e selecione a opção de pagar por boleto bancário. Apos gerar o boleto e aguardar alguns segundos, o retorno irá gravar os dados da compra. No proprio arquivo de download eu coloquei um teste facil lá, da uma olhada.
junho 26th, 2011 at 22:34
Fabio, ja disseram isso ae em cima. Valeu mesmo! vai la e da uma buzinada neles. :)
junho 27th, 2011 at 00:45
Caros amigos, tentei de tudo, nao alterei em nada, e mesmo assim, nao fui capaz de gravar os dados no meu banco de dados! Alguma ajuda?
julho 1st, 2011 at 11:54
Ótimo codigo, facilitando o trabalho de muita gente. Bom saber que ainda existem pessoas dispostas a ajudar. Parabéns!
julho 7th, 2011 at 03:06
Muito bom esse código. Parabéns.
julho 7th, 2011 at 15:39
Apenas um detalhe.
No arquivo PagSeguroRetorno.php no INSERT into PagSeguroTransacoes. Tem um campo que não existe no SQL DataTransacao, apenas troquei ele para data, e o DATA para DATAHORA.
Funcionou perfeitamente!
julho 7th, 2011 at 15:43
Por favor, ignore o último comment, na verdade deve ter ocorrido algum problema no meu mysql ao gerar a tabela. O Arquivo para download está correto.
=)
julho 7th, 2011 at 23:09
Felipe, deve ser erro de conexao com o BD, confira as senhas e permissoes.
julho 14th, 2011 at 20:13
Muito bom o script, porem aconteceu o mesmo problema, ele retorna mostra a página de concluido o pagamento porem não grava no banco, tentei dar um echo em alguma variavel que iria gravar no banco e realmente ele não esta passando esse dado, estou executando em meu computador porem com meu ip e não como localhost.
Será que é alguma permissão que tenho que dar ao pag seguro?
Muito obrigado pelo código, de longe foi o melhor e o mais limpo que eu ja peguei, melhor até doque eu tinha feito que por sinal não funcionou.
Abraço;
julho 14th, 2011 at 20:15
Esqueci de informar que quando dou um “echo” ele retorna este erro.:
( ! ) Notice: Undefined variable: TipoPagamento in D:\site\loja\retornopg\PagSeguroRetorno.php on line 111
julho 15th, 2011 at 02:23
Tenho a solução para quem quer testar o retorno do pagSeguro emservidores caseiros, oque acontece é que o pagseguro nao se comunica com localhost, pq ele utiliza um ip próprio que deve ser setado no servidor de hospedagem para realizar o comando POST. logo, nós não temos essa opção disponivel e tambem temos, Modem, Roteador, Firewall, etc….
O retorno dos dados é em BRANCO justamente pelo fato do PagSeguro não conseguir se comunicar com o nosso servidor caseiro.
Então oque fazer?
Simples, depois de muito pesquisar achei um site MAGNIFICO! La eles fornecem um programa chamado PagSeguro TestServer para rodar “fingir” ser o servidor do pagseguro recebendo os dados e enviando devolta com POST. Muito facil de usar e configurar, no próprio site tem explicando como utilizar, o site é: http://code.google.com/p/pagsegurodotnet/
No próprio programa na tela principal exibe os dados da transação que vc enviou ao finalizar a compra de produtos em sua loja, ou seja em vez de mandar os dados para o pagseguro real, vc altera o seu OsComerce para enviar o pedido final para algo como: http://localhost:9090/checkout/checkout.jhtml que é o servidor de “mentirinha” que você baixou la no site. Então por fim o programa retorna os dados dda transação realizada, e no meu caso como utilizo pra incluir no BD essas informações, ele incluiu corretamente.
Lembrando que o programa é free, mas logo acima do site tem um botão de DOAÇÃO, acredito que de tanto sofrer, pelejar e arrancar os cabelos, para testar esse maldito retorno do pag seguro, não seria dificil realizar uma doação. Afinal, a ferramenta que eles desenvolveram é simplesmente SENSACIONAL e totalmente FREE. Quero deixar claro que não faço parte da equipe deste site, só estou divulgando a ferramenta para ajudar, e como eu fiz, pedindo a Doação, afinal ja que vamos pagar comissão para o PagSeguro para utlizar os serviços deles, que por sinal são péssimos com realação ao código de retorno totalmente mal feito e que não te dão suporte para este fim, não custaria nada fazer uma doação para aqueles que realmente resolveram nossos problemas.
Desculpe pelo texto muito comprido.
Abraços
julho 15th, 2011 at 17:39
Configurei tudo corretamente, porem seu scrip não consegue gravar nada no banco.
E o acesso ao banco está perfeito, fis teste.
Seu scrip é que não funciona, não salva na tabela.
julho 15th, 2011 at 18:57
Tem um problema aqui,
Qual pagina devo informar no site do PagSeguro como sendo a pagina de retorno?
julho 19th, 2011 at 04:08
Olá diogo, primeiro de tudo, parabéns pelo script.
Estou tendo um probleminha, o pagseguro retorna e o script grava as informações no BD sem problema, o que significa que ele entrou na condição que confirma a verificação dos dados “if ($result == “VERIFICADO”) {” Mas mesmo assim ele entra no else la em baixo, como se o valor da variável result não fosse verificado. O que fazer para resolver este problema ?
julho 19th, 2011 at 14:12
sobre alterar o status do pedido. o pagseguro retorna blz tb?
quando altera status ele manda outro post para mesmo canto né isso?
entao tenho que verificar se o TransacaoID já existe registrado e apenas altera o status?
é isso!?
julho 21st, 2011 at 10:23
Marko, o melhor jeito de testar o script é gerando um boleto bancario. Não é necessário pagar, pois quando gera o boleto ele ativa o retorno do pagseguro.
julho 21st, 2011 at 10:24
Erivando, Grava na tabela sim, ja fiz vários testes e todo mundo consegue.
O pessoal deve ter o minimo de senso de programação para colocar o retorno para funcionar e adaptar ao seu sistema. Não basta colocar o script no ar, tem que gerar o TOKEN e informar a URL onde o script esta hospedado.
julho 21st, 2011 at 10:25
Erivando, este é o verdadeiro motivo de não gravar dados na sua tabela. Voce deve informar a URL onde voce hospedou o script.
julho 21st, 2011 at 10:26
Leonardo, é porque o PagSeguro envia via POST e o usuário não. Como os dois usam a mesma URL tem essa condição para diferenciar qual o tipo de acesso. Mas você pode modificar ao seu critério.
julho 21st, 2011 at 10:28
Rogerio, para a didatica ficar melhor, eu optei por não fazer UPDATE na tabela. Assim você terá acesso a todos os POSTs do Retorno do PagSeguro. É so filtrar depois pelo campo do Status. Mas você pode modificar o script ao seu modo se desejar.
julho 29th, 2011 at 10:36
Cmg funcionou perfeitamente… Inclusive com o servidor de Testes feito em NET…
Parabéns!
julho 29th, 2011 at 10:36
quer dizer, modifiquei a parte do banco pra se adequar ao meu sist.
;)
agosto 10th, 2011 at 11:48
Boa, Diogo!
Teu script ficou ótimo, pouco diferente do que eu uso. Só duas dúvidas: Quais são os status (o nome certinho, pra criar os if’s de um sistema aqui? Só sei o “Aguardando Pagto”.
Pq tem um campo “Status” na tabela? Foi erro na criação?
Abraços.
agosto 10th, 2011 at 13:54
Willian,
O Status eu uso sempre como uma flag, nada demais. Os registros possiveis em StatusTransacao são:
Completo
Aguardando Pagto
Aprovado
Em Análise
Cancelado
agosto 12th, 2011 at 12:43
Diogo, estou tendo um problema com o código.
Armazeno dados numa session, para na página de finalização eu saber qual é o pedido.
Mas toda vez em que é feita a primeira compra, a sessão se perde… Nas outras compras isso não acontece. Saberia como eu poderia recuperar o pedido?
agosto 13th, 2011 at 14:09
Diogo, já tem um tempinho que trabalho com o retorno do PagSeguro, porém todas as vezes que eu utilizava não havi necessidade do uso do carrinho. Até ai blz, meu carrinho funciona 100%, envia os dados para o carrinho do pagseguro 100% faz os cálculos blz, só que por exemplo: No meu carrinho coloco 2 produtoX e 1 produtoY, ambos de 1 centavo, faço o pagamento online via Banco do Brasil e o status de aprovado é instântaneo, porém quando o retorno entra em ação ele grava 2 vezes o produtoX e 1 vez o produtoY, sendo que o produtoX era pra ser gravado apenas uma vez com a quantidade 2. Não estou identificando o motivo disto. Help me please.
agosto 14th, 2011 at 21:23
Dourado, coloquei no server da locaweb, com PHP 5.2 e apareceu o seguinte erro
Warning: Cannot modify header information – headers already sent by (output started at E:\vhosts\xxxxxx.com.br\httpdocs\pagseguro\retorno.php:1) in E:\vhosts\xxxxxx.com.br\httpdocs\pagseguro\retorno.php on line 3
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in E:\vhosts\xxxxxx.com.br\httpdocs\pagseguro\PagSeguroRetornoFuncoes.php on line 15
tem ideia do que pode ser? abração
agosto 16th, 2011 at 09:58
Seu script está realmente muito bom, porém estou com problemas, não estou recebendo em meu SQL os dados. Já entrei em contato com o pagseguro e eles informacao que está sendo enviado o post porém não está recebendo o String de validação do meu site.
Estou utilizando este script ai que por sinal está bom, e pelo comentários está funcionando, porém o meu não sei oque está acontecendo. Ele não mostra nenhum erro de sql nada, apenas não está indo para a database.
Obrigado se alguem puder me ajudar.
agosto 17th, 2011 at 12:36
Diogo, parabéns pelo seu site! Já ganhou uma fã!
Bom configurei tudo direitinho banco de dados e páginas, mas quando vou testar a compra e clico no botão “Gerar”, a página é redirecionada para o pagseguro onde é exibida a seguinte mensagem: “Erro 100 – O E-MAIL não está no formato correto.” Faltou alguma instrução?
agosto 17th, 2011 at 15:12
Bom acabei descobrindo que o campo onde eu devo inserir o email fica no arquivo TestarCompra.php, apesar dos testes de conexão o meu bd exibe que está conectado, mas nao está recebendo nenhuma informação. O q poderia ser?
agosto 17th, 2011 at 15:17
Diogo nem sei como te agradecer!!! A loira aqui tinha esquecido de ativar a url de retorno…. pois bem eu ativei a url de retorno e está tudo redondinho!!!!!!!
Obrigado mesmo pela ajuda!!!
setembro 1st, 2011 at 11:22
Pessoal… acho q descobri o problema de muitos aqui que não conseguem o retorno.
Não mecham em nada no scrip apenas as informações necessárias de conexão do banco e da loja…
No pagseguro:
Em Integração>Página de redirecionamento.
Ative a página fixa de redirecionamento e coloque a URL da sua loja
http://www.sua loja.com.br/compra_concluida.php – essa pagina só tem uma msg “Compra Concluida”
Após isso vá em Integração>Retorno Automático de Dados
Ative o retorno e coloque a URL com o arquivo q tem no download:
http://www.sualoja.com.br/PagSeguroRetorno.php
Pronto!
setembro 6th, 2011 at 15:40
Dourado, parabéns pelo script, funcionou de primeira, bem diferente qualquer outro código ou tutorial que encontrei pela internet.
Já estava desistindo do pag-seguro, achei o suporte deles pífio, tutoriais fajutos e módulos que simplesmente não funcionam…
Novamente parabéns pela iniciativa, o código é tão bom que as adaptações que fiz para minha loja virtual também funcionaram.
Obrigado!
setembro 12th, 2011 at 11:09
Rodrigo, isso deve ser feito por você mesmo. Se eu colocar session, fica complicado para quem nao vai utilizar. Recomendo voce colocar a URL de retorno na mesma pasta do site, pode ser isso.
setembro 12th, 2011 at 11:10
Thiago, mas você esta utilizando o meu script ou o seu? Verifique que no meu script ele confere se ja gravou os dados do produto antes, isso porque ele envia a cada atualização os produtos.
setembro 12th, 2011 at 11:12
Milani, erro no cabeçalho do arquivo. Você com certeza colocou algum espaço vazio ou caractere antes da sessão, e na configuração voce “comeu” alguma aspa.
setembro 12th, 2011 at 11:13
Alex, leia o post atentamente. Você deve configurar 2 URL, a de retorno e a de redirecionamento. Alem do token e fazer corretamente a sua conexao mysql.
setembro 12th, 2011 at 11:15
Exatamente Felipe!! Isso ae, so configurar o mysql corretamente, a URL de redirecionamento e URL de Retorno. Nada mais! :)
setembro 12th, 2011 at 11:18
Tatiani, so configurar o e-mail corretamente! ;) isso é erro no seu carrinho.
setembro 12th, 2011 at 11:19
Assim como a Tatiani, a maioria esquece da URL de redirecionamento de de retorno, vamos ler pessoal!!!! ;)
setembro 12th, 2011 at 11:20
Que bom Gabriel, estou a disposição! :)
setembro 21st, 2011 at 22:08
Olá Diogo!
Muito bom seu script! Parabéns pela iniciativa.
Me surgiu uma dúvida: Ao iniciar uma compra e finalizar o pedido junto ao pagseguro, o script grava perfeitamente no banco, mas quando o pagamento é efetivado, o pagseguro envia informações atualizada (status de pagamento) ao script de retorno e o mesmo grana novamente no banco?
Não sei se fui claro, mas se não entendeu tentarei ser mais claro.
Continue nessa labuta com os códigos opensource….
setembro 23rd, 2011 at 16:41
Funciona para receber notificações na alteração de transações para poder alterar o status de pagamento?
setembro 23rd, 2011 at 17:30
Havia ativado “Redirecionamento com o código da transação” no pagseguro, estava inconformado em não funcionar comigo rsrs.
Abs
setembro 24th, 2011 at 23:26
Não sou programador, nao entendi quase nada do seu script, mas parabéns, pq fui no site do pagseguro e lá nao entendi nada mesmo!
Sou pobre, tive que fazer um download do clone de compras coletivas e agora estou tentando colocar a integracao com esse retorno. Já ativei tudo, gerei o token, mas ainda nao deu certo. Peguei teu script agora, vou tentar estudá-lo.
MAs…
Quanto vc cobraria para colocar o codigo adaptado no meu site? Já tem algumas paginas (order/pagseguro/return.php, notify.php, pay.php, …). Como o clone é de março, deve ter mudado algumas coisas.
Obs e obrigado
setembro 28th, 2011 at 06:01
Diogo, belo script e raro de se encontrar neh?! axo que isso que te motivou a faze-lo e publica-lo hahaha.
Agora nao sei se e culpa da area de testes do .net ou o Script eh mesmo assim,
Mas o Script esta dando INSERT em todas as informacoes… ele seria para dar UPDATE confome a TransacaoID?
Abracos ai e parabens denovo.
setembro 28th, 2011 at 10:25
Seyr, o script grava a cada atualização do Status. Valeu pela força! :)
setembro 28th, 2011 at 10:29
Marcel, exatamente.
setembro 28th, 2011 at 10:31
JVogell, faz bem. Este script é para PROGRAMADORES. Um leigo pode até usar, mas certamente não estará seguro da implementação e do funcionamento. Não recomendo. Já realizo muitas consultorias na implantação do mesmo. Te enviarei um e-mail com maiores informações.
setembro 28th, 2011 at 10:32
DacianoBenini, você pode alterar para um INSERT/UPDATE se quiser, mas eu coloquei intencionalmente o INSERT por questões de registro, para saber passo a passo todas as interações e horarios da transação.
setembro 29th, 2011 at 08:34
Já fiz de tudo e o mesmo não grava no banco.
Coloquei certo a url de retorno, redirecionamento, a conexão com o banco, token.
Poderia ser algum problema na conta do PS ?
setembro 29th, 2011 at 21:20
Muito bom cara.
Em uma hora resolvi o problema que o PagSeguro não conseguiu responder em um dia todo.
Parabéns
setembro 30th, 2011 at 22:58
Meu caro, pode me dar uma simples ajuda?
Nao estou conseguindo retornar o valor “VERIFICADO” pelo POST.
Aí eu copiei a lista do postfields para uma tabela , montei a url completa (com os parametros) e enviei por GET mesmo, e retornou “verificado” certinho. Infelizmente o $result retorna nulo! Isso ta me deixando perplexo… Tentei imprimir os fields com o curl_getinfo mas parece que nao existe essa possibilidade.
Tem alguma ideia em que estou vacilando?
Abc
Carlos
outubro 19th, 2011 at 20:25
Diogo, estava tentando fazer esta alteração com o update e nunca funcionava. Sempre adicionava uma nova compra na tabela. A solucao foi remover os “-” do ID da transação com esta função.
$TID = ereg_replace(‘-’, ”, $TransacaoID);
E salvar na database como TransacaoID,$TID…
outubro 22nd, 2011 at 17:55
Ótimo código, funciona certinho. Única coisa que adicionei foi este switch, pra controlar as tabelas do meu sistema sem alterar as tabelas do seu código.
switch($StatusTransacao){
case ‘Completo’:
{
break;
}
case ‘Aguardando Pagto’:
{
break;
}
case ‘Aprovado’:
{
break;
}
case ‘Em Análise’:
{
break;
}
case ‘Cancelado’:
{
break;
}
}
outubro 24th, 2011 at 12:26
Bom, pode ser N coisas. Mas tente os passos novamente, principalmente a URL de retorno, que em 99% dos casos é o motivo.
outubro 24th, 2011 at 12:26
Rafael, que bom! Qualquer coisa, estou a disposição.
outubro 24th, 2011 at 12:27
Ele retorna NULL apenas no redirecionamento. Ele não da POST junto com o usuário, e sim em background, ok? Na hora que ele te envia (redirecionando) ele apenas segue o link informado nas configurações.
outubro 24th, 2011 at 12:34
Coimbra, beleza! É uma boa ideia para o filtro sim. Mas não coloquei para deixar em aberto para cada programador realizar as ações da forma que desejar. Mas ta ae… #fikadica
outubro 27th, 2011 at 14:48
excelente artigo cara, mas é o seguinte, quando gera o boleto a tabela recebe todas as informações direitinho, mas quando o status do pagSeguro é alterado a tabela não recebe nenhuma informação..
o que será?.
novembro 20th, 2011 at 11:27
Dourado,
foi erro meu ou não tem o campo valor do produto no banco de dados? (só taxa e frete)
novembro 20th, 2011 at 11:49
Ah certo, está na outra tabela!!!
novembro 23rd, 2011 at 13:16
Olá, sou programador júnior em php, nossa Diogo me salvou ! No trabalho estava me matando pra conseguir retornar o POST e encontrei seu tutorial. VLW mesmo e que continue assim.
Agora uma coisa.
Eu estou precisando em dar o UPDATE na tabela quando o STATUS alterar.
Eu usei isso:
if ($StatusTransacao == “Aguardando Pagto”){
// Gravando Dados
mysql_query(“INSERT into PagSeguroTransacoes SET
VendedorEmail=’$VendedorEmail’,
TransacaoID=’$TransacaoID’,
Referencia=’$Referencia’,
Extras=’$Extras’,
TipoFrete=’$TipoFrete’,
ValorFrete=’$ValorFrete’,
DataTransacao=’$DataTransacao’,
Anotacao=’$Anotacao’,
TipoPagamento=’$TipoPagamento’,
StatusTransacao=’$StatusTransacao’,
CliNome=’$CliNome’,
CliEmail=’$CliEmail’,
CliEndereco=’$CliEndereco’,
CliNumero=’$CliNumero’,
CliComplemento=’$CliComplemento’,
CliBairro=’$CliBairro’,
CliCidade=’$CliCidade’,
CliEstado=’$CliEstado’,
CliCEP=’$CliCEP’,
CliTelefone=’$CliTelefone’,
NumItens=’$NumItens’,
Data=now();”);
// Recebendo e gravando produtos
$Processo = mysql_query(“SELECT VendedorEmail FROM PagSeguroProdutos WHERE VendedorEmail=’$VendedorEmail’ AND TransacaoID=’$TransacaoID’”);
if (mysql_num_rows($Processo)==0) {
for($i=1;$i<=$NumItens;$i++) {
$ProdID = $_POST["ProdID_{$i}"];
$ProdDescricao = $_POST["ProdDescricao_{$i}"];
$ProdValor = MoedaBR($_POST["ProdValor_{$i}"]);
$ProdQuantidade = $_POST["ProdQuantidade_{$i}"];
$ProdFrete = MoedaBR($_POST["ProdFrete_{$i}"]);
mysql_query("INSERT into PagSeguroProdutos SET
VendedorEmail='$VendedorEmail',
TransacaoID='$TransacaoID',
Ordem='$i',
ProdID='$ProdID',
ProdDescricao='$ProdDescricao',
ProdValor='$ProdValor',
ProdQuantidade='$ProdQuantidade',
ProdFrete='$ProdFrete'");
}//for
}//if
}else {
mysql_query("UPDATE `PagSeguroTransacoes` SET
StatusTransacao = '$StatusTransacao' where `TransacaoID`= '$TransacaoID';");
}//else
Verifiquei se o Status é diferente de Aguardando Pgto., pois o primeiro post é sempre Aguardando Pgto. então conclui que o POST diferente de Aguardando Pgto deve ser alterado de acordo com a TransacaoID.
Se estiver errado, por favor alguém me avisa. Meu email é : webicefire@hotmail.com < MSN tbm
Agradeço e abraços para todos.
novembro 25th, 2011 at 18:42
Wesley, esta certo, mas desse jeito ele não ira guardar todo o historico da transação, apenas o ultimo, se funcionar para você, beleza. Eu recomendo voce utilizar um INSERT com DUPLICATE KEY UPDATE, em vez de usar o IF.
novembro 30th, 2011 at 01:37
Preciso de ajuda para instalar o seu retorno automatico no meu site.
quanto vc cobraria, entre em contato.
grato.
dezembro 4th, 2011 at 09:12
Testei aqui, ta funcionando mais quando os status do pagamento atualiza la no pagseguro, no DATABASE nao atualiza , fica somente no Aguardar Pgt.
dezembro 6th, 2011 at 20:55
Ola o banco de dados tem que ser separado ou junto com o da loja,
faço o upload para a raiz da loja com o nome que esta pagseguro_retorno2.0
ou tem que editar e depois precisa configurá-lo na admin.
Desculpe tantas perguntas.
Grato.
dezembro 8th, 2011 at 16:08
Ótimo tutorial, me ajudou muito, mas percebi uma coisa que pode ser importante!!
O campo TransacaoID das 2 tabelas (pagseguroprodutos e pagsegurotransacoes) está como varchar 32.
Só que o ID da Transacao suporta até 36 caracteres ! Por isso ninguém estava conseguindo fazer update caso a transacao já existisse. Eu alterei o campo para varChar 38 e consegui dar Update.
Isso é muito importante pq se alguém tivesse querendo comparar os IDs da transacao do PagSeguro com os IDs da transacao que foram inseridos no banco, não iriam conseguir.
Tentem aí galera. Valew
dezembro 11th, 2011 at 21:56
Então, eu consegui mesmo com os IF. Depois eu busquei cada status do POST que vinha do pagseguro e ia tratando e inserindo na base e alterando de acordo com os POSTs.
Quem quiser o pagseguro com alteração e tudo pode contar comigo.
e Diogo .. meu vc é o cara …
dezembro 13th, 2011 at 02:54
olá, esta inserindo normalmente os dados nas tabelas. agora gostaria de saber se quando o boleto for pago se vai haver alguma alteração (insert ou update ) na tabela. para eu saber se foi pago o nao aguele produto. parabens pelo script.
dezembro 13th, 2011 at 17:24
Valeu Diogo, quebrou um galhão.
Abraços
dezembro 16th, 2011 at 14:16
Cara, parabéns pelo script. Funcionou de cara.
Notei que o script apenas dá INSERT no banco de dados, e entendi que a cada mudança de status, eu terei um registro de data/hora que ocorreu. Muito bom!!
Porém, o script está duplicando os produtos na tabela pagseguroprodutos. Se o status muda, ele insere na tabela de transacoes o novo registro com a atualização de data, hora e status, e também insere novamente os produtos. o que será que pode estar acontecendo?
dezembro 28th, 2011 at 13:38
wandenberg, me envia um email para mais detalhes, ok?
dezembro 28th, 2011 at 13:44
Claudio, se voce vai fazer uma integração, é bom ser junto com o da loja, ok? O upload fica a seu criterio, na raiz, pasta, etc. É bom editar antes de enviar para o ar, como escrito no post.
dezembro 28th, 2011 at 13:48
Pablo Karzin, acho que você esta equivocado, de acordo com o próprio manual do PagSeguro o campo tem 32 caracteres, veja em: https://pagseguro.uol.com.br/desenvolvedor/retorno_automatico_de_dados.jhtml
Você tem alguma transacao com o ID de 36 caracteres? pode me enviar?
dezembro 28th, 2011 at 13:50
Obrigado, estou a disposição! :)
dezembro 28th, 2011 at 13:51
Hugo, este script é apenas de LOG, ou seja, é apenas INSERT. A cada alteração no STATUS ele vai dar um novo INSERT no banco de dados, ok?
dezembro 28th, 2011 at 13:52
Gabriel, valeu! Que bom que funcionou perfeitamente.
No caso dos produtos, eu acho que você se confundiu. Os produtos se repetem, mas são de transações diferentes. Confira! ;)
dezembro 28th, 2011 at 14:44
Em relação a quantidade de caracteres, isso que vc falou é verdade. Na própria documentação deles, eles dizem que esse campo é de 32 caracteres e fazendo um teste com o servidor deles de verdade, realmente é isso que acontece. Ou seja, não deu problemas.
Porém, eu tava utilizando o servidor de teste do Teoni Valois, que criou um em .Net para Windows. No servidor dele, na hora de gerar uma key para a TransacaoID, eu acho q ele tava gerando também os hífens, que tavam contando como caracteres também. Por isso tava sempre ultrapassando o limite.
janeiro 1st, 2012 at 15:01
Muito bom o script ajudou muito
Parabéns
janeiro 7th, 2012 at 23:45
Olá, Belo tutorial, foi o mais perto que cheguei, mas há um problema: depois de tudo feito, o boleto gerado ele retorna ao arquivo e redireciona para a página de de teste que você colocou. Até aí tudo bem, mas não grava nada na tabela, a conexão e as permissões estão ok. Se puder me dar um luz agradeceria.
Parabéns pelo belo trabalho.
janeiro 9th, 2012 at 11:31
Fala Diogo, beleza?
Vê se consegue me ajudar. O script roda tudo certinho, retorna pra URL e tudo mais…Não dá nenhum erro…
Porém não popula o banco…Sabe oque pode ser?
Vlw.
janeiro 9th, 2012 at 15:29
Rafael, gere um log no script para ver se ta tudo certo realmente. Você configurou o retorno e o token na pagina do PagSeguro? :)
janeiro 9th, 2012 at 15:30
Felipe, geralmente é erro no usuario e senha do mysql ou você nao configurou o token no painel do pagseguro
janeiro 10th, 2012 at 17:03
Diego, primeiramente quero agradecer o script.
Estou com um problema que preciso de uma ajuda.
Adicionei apenas uma query para liberar PagSeguroRetorno.php // Liberar
http://pastebin.com/rcQqrzx5
O problema é o seguinte, oque eu adicionei ele executa, porem a parte onde ele deveria salvar a Transação e adicionar os Produtos não é executado.
Isso talvez tenha ocorrido pois antigamente utilizava o xampp (Windows) e agora estou utilizando Apache2+PHP5+Mysql ?
Já tentei fazer varios testes sem resultado.
Obrigado
janeiro 10th, 2012 at 18:37
[Sun Jan 08 23:58:55 2012]PHP Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /var/www/pag/PagSeguroRetorno.php on line 87
janeiro 12th, 2012 at 15:36
Diogo, parabéns!!! Perfeito.
janeiro 12th, 2012 at 22:02
Dourado, primeiramente parabéns pelo script.
Fiz os testes e os dados salvam no banco de dados, entretanto ele não está redirecionando para a página CompraConcluida.html.
Assim que conclui o pagamento, a página mostrada continua sendo a do PagSeguro informando que a compra foi concluida e não redireciona a página personalizada do meu site.
Poderia me ajudar?o script está instalado no endereço
site: http://www.redewebshop.com.br/pagseguro_retorno/
janeiro 12th, 2012 at 23:35
Dourado, depois de ler os posts da galera percebi que são DUAS COISAS A SEREM FEITAS:
URL de Retorno Automático de Dados e URL da Página de Redirecionamento.
Tinha configurado somente a URL DE RETORNO AUTOMÁTICO e não estava voltando para meu site, após concluir a compra.
Soltei fogos aqui até perceber mais um problema:
Na hora de pupular no bd, ele tá inserindo caracteres com acentos e cedilhas vindos do TestarCompra.php em caracteres especiais. Por exemplo: O endereço do cliente no formulário é Rua José Antônio. No bd insere Josï Ant£ino.
No cabeçalho do arquivo de retorno tá codificado assim:
header(‘Content-Type: text/html; charset=ISO-8859-1′);
Quebra esta pra mim amigo! Obrigado
janeiro 12th, 2012 at 23:40
Dourado, eu dnovo!!
Só passando pra informar que também consegui resolver o problema dos acentos no BD. O arquivo TestarCompra.php estava com a codificação UTF-8, então eu alterei o cabeçalho para:
e está salvando corretamente agora, com os devidos acentos e cedilhas.
AGORA SIM!!
Magnífico!!
Salve Salve Dourado! Vc é o kra!
Obrigado
janeiro 16th, 2012 at 18:01
Heber Holanda, vai no mysql_query acima do mysql_num_rows e coloca no final antes do ; assim “or die (mysql_error())” ( sem parenteses )
janeiro 16th, 2012 at 18:04
Deixa eu ser mais coreto Heber Holanda, nesta parte
$Processo = mysql_query(“SELECT VendedorEmail FROM PagSeguroProdutos WHERE VendedorEmail=’$VendedorEmail’ AND TransacaoID=’$TransacaoID’”);
Você vai deixar assim
$Processo = mysql_query(“SELECT VendedorEmail FROM PagSeguroProdutos WHERE VendedorEmail=’$VendedorEmail’ AND TransacaoID=’$TransacaoID’”) or die (mysql_error());
janeiro 16th, 2012 at 23:36
Junior, obrigado pela ajuda.
O erro irá ficar salvo no arquivo de log do apache correto ?
janeiro 18th, 2012 at 01:30
Olá amigo, parabéns pelo script! Perfeito!
Eu fiz os testes localmente com o server de testes do Windows e deu tudo certo, depois coloquei na Web e deu um probleminha, fiz uma série de depurações e percebi que o NPI $Result está igual a “FALSO”.
Já tentei de tudo mas não consigo validar para $result == “VERIFICADO”, tem alguma ideia?
Muito obrigado!
janeiro 18th, 2012 at 11:31
Opa,
Vim aqui somente para mostrar a solução do problema acima, em minha conta pagseguro eu tinha apenas colocado a URL de retono no link “Notificações de Transações” e não tinha mudado a URL no outro link “Retorno Automático de dados”.
Obrigado e boa sorte a todos!
janeiro 18th, 2012 at 13:39
Alquem pode me ajugar ? configurei tudo certinho enviei a hospedagem criei o BD
na hora de testar
(Na pagina do pagseguro)
Checkout
Mensagem:
Transação inválida. Sempre inicie transações a partir de sites confiáveis.
janeiro 27th, 2012 at 13:13
Alex, valeu!! :)
janeiro 27th, 2012 at 13:14
Marcelo, o redirecionamento voce tem que fazer na configuracao do PagSeguro
janeiro 27th, 2012 at 13:15
Marcelo, é so colocar codificação que você usa, então deve ser UTF8
janeiro 27th, 2012 at 13:15
Marcelo, que bom que conseguiu então! Boa sorte no projeto. Precisando de ajuda, estou a disposição. :)
janeiro 27th, 2012 at 13:17
Leo, este erro é porque você nao consegue verificar a URL do PagSeguro, pode remover a proteção se quiser, não recomendo. ;)
janeiro 27th, 2012 at 13:20
Leo, esse é o problema da GRANDE maioria. O pessoal so pega o script e não le o artigo. ;) #ficaadica
janeiro 27th, 2012 at 13:21
Willain, É erro na configuração do script apenas.
fevereiro 14th, 2012 at 15:06
Diogo,
Queria te dizer uma coisa. Você é o cara.
Muito bem escrito esse seu script, fácil, rápido e prático.
Tive umas dores de cabeça apenas para adequar no meu sistema. Porem tive melhorias no meu banco de dados, pois estou buscando todas as informações para montar o carrinho, do banco de dados.
Ficou muito Show.
Parabéns pela iniciativa. E meu muitíssimo OBRIGADO.
fevereiro 29th, 2012 at 11:30
Diego, estou com o erro que o POST do Pag seguro sempre vem vazio, nao consegui achar onde pode ser o erro. será que vc nao teria uma solução para isso?
Att,
Vlwzz
rsrs
março 10th, 2012 at 11:51
Bom dia Diogo, ótimo trabalho, me ajudou bastante, porém tenho uma pequena dúvida se você não se importar…
Eu preciso enviar uma “anotação” para o pagseguro e guardar no banco, já tá tudo pronto, porém o campo sempre fica em branco.
estou enviando dessa forma a informação…
isso tá certo ou o “name” do campo não está correto?
Obrigado!
março 10th, 2012 at 11:53
Bom dia Diogo, ótimo trabalho, me ajudou bastante, porém tenho uma pequena dúvida se você não se importar…
Eu preciso enviar uma “anotação” para o pagseguro e guardar no banco, já tá tudo pronto, porém o campo sempre fica em branco.
estou enviando dessa forma a informação dentro de um hidden…
name=”item_anotacao_1″ value=”teste”
isso tá certo ou o “name” do campo não está correto?
Obrigado!
março 15th, 2012 at 10:45
Tudo bem Diogo Dourado?
Bom estava pesquisando sobre o retorno automático do pagseguro e encontrei seu site, baixei seus arquivos e implementei conforme minha necessidade no meu projeto, porém não tive sucesso na gravação no banco dados. Não sei se teria que atualiza a biblioteca ou algo do tipo, se você pudesse me me ajuda ficaria muito grato fera ;)
Flw abrass
março 15th, 2012 at 14:21
Consegui resolver o problema, Script funciona Perfeitamente!
março 15th, 2012 at 15:44
Consegui resolver o problema, realmente funcionou perfeitamente, só tenho a agradecer pela força que você me deu, pois os exemplos que tem no PagSeguro são meio complicados de entender.
Muito Obrigado fera ;)
março 19th, 2012 at 17:40
Gabriel, valeu demais! :)
março 19th, 2012 at 17:42
Isaque, Leia atentamente a postagem. Voce nao deve ter ativado o retorno do PagSeguro.
março 19th, 2012 at 17:51
Isso ae pessoal. Antes de postarem as duvidas, leiam atentamente o POST. Não tem erro, ta funcionando 100%.
março 21st, 2012 at 23:16
Estou tentando implementar este sistema..
Coloquei todos os arquivos no servidor e entrei neles via web e o ÚNICO que está dando erro é o PagSeguroRetornoFuncoes.php
Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) in /home/meusite/public_html/PagSeguroRetornoFuncoes.php on line 64
Nao foi possível conectar ao MySql: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
Alguem pode me ajudar?
março 23rd, 2012 at 14:01
Alaor, para implementar o script vc tem que ter o minimo de noção de programação. Isso é erro de conexão com o banco. :)