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

Pessoal,

 

Estou com uma dúvida.

 

Tenho minha loja virtual no UOL HOST que usa MAGENTO.

 

A integração funciona bem, mas queria que após o cliente concluir o pagamento o PagSeguro redirecionasse ele para uma página de agradecimento.

 

Só que se eu fizer isso, perco a integração da loja. Pensei em alguma coisa com frames, um frame faz o retorno usando o endereço de retorno que tenho hoje e o outro frame coloco o agradecimento, mas não funcionou.

 

Alguém tem uma solução mais interessante?

 

Abraço,

Alexandre

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta, você está testando isso onde? Online ou no seu localhost? Se for localhos o PagSeguro não tem como te enviar o POST.

 

Lembre que o status de "Aprovado" e "Completo" é quando o pagamento foi efetuado (cartão, boleto, transferencia online ou tranf. de pagseguro para pagseguro). O seu if pode estar barrando nesse sentido.

 

Lembre, também que não há essa variável $produtos[ProdQuantidade] e sim $produtos[0]['ProdQuantidade'] já que ele é um array de arrays.

 

O que eu posso te aconselhar é o seguinte: faça um log das informações. Mais ou menos assim:

 

<?php
if (isset($_POST)) {
  log('Recebeu o post, verificando junto ao PagSeguro', $_POST);
}
function retorno_automatico (
$VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
  log('Dados Verificados! Agora minha função funciona normalmente.', array ($VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
	$ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
	$StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
	$CliNumero, $CliComplemento, $CliBairro, $CliCidade,
	$CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
  ));
}

 

E a função log faz o seguinte:

 

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

Vale a pena lembrar que o arquivo tem que ter permissão de escrita (se você estiver trabalhando em sistema UNIX isso pode não vir como padrão).

 

Michael, boa tarde.

Eu sei que foi enviado há um ano, mas o meu código está dando erro.

O arquivo pagseguro.log vem com a array vazia:

 

'Recebeu o POST, verificando junto ao PagSeguro'

array (

)

---------

 

O código é igual ao do Retuko:

<?php
define ('TOKEN', 'xxxxxxxx');
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
) {
  $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, "\n---------\n\n"); # um espaço para separar as ocorrencias
  fclose($f);  
}
require_once("retorno.php");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Otimo tutorial, estava precisando de algo para entender o funcionamento do retorno. e esse material ajudou muito.

 

bom segui as explicações e fiz meu codigo porem não esta atualizando o banco de dados, preciso que so atualize o status, será que poderia me dar uma ajudinha? segue o meu codigo:

 

<?php

define ('TOKEN', 'xxxxxxxxxxxxxxxxxxxxxx');

// 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) {



}
// são codigos dos arquivos de configuração do banco

if(file_exists("init.php")) {
	require "init.php";		
} else {
	echo "Arquivo init.php nao foi encontrado";
	exit;
}

if(!function_exists("Abre_Conexao")) {
	echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
	exit;
}

// Acho que meu problema começa aqui

Abre_Conexao();
if(@mysql_query("UPDATE inscricao SET status_pag = '$StatusTransacao' WHERE email = '$CliEmail'")) 
{

	@mysql_close();
}
?>

ahhh sim, so para ter certeza, caso a ideia funcione ele vai atualizar sempre o meu banco né?, tipo do "Em analise" para "Aprovado" e isso de forma automatica certo?

 

Ja sou grato pela atenção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Michael...

 

agradeço mais uma vez pelo tutorial... andei fuçando melhor os comentarios e montei outro codigo segue abaixo:

<?php
define ('TOKEN', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
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
) {
	
// verifica arquivos de conexão	

if(file_exists("init.php")) {
	require "init.php";		
} else {
	echo "Arquivo init.php nao foi encontrado";
	exit;
}

if(!function_exists("Abre_Conexao")) {
	echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
	exit;
}

// conecta banco de dados

Abre_Conexao();
if(@mysql_query("UPDATE inscricao SET status_pag = '$StatusTransacao' WHERE email = '$CliEmail'")); 

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


// Incluindo o arquivo da biblioteca
include('retorno.php');
?>

ao testar ele me retornou o seguinte erro:

 

PHP Warning: fopen(pagseguro.log) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in confirmacao_final.php on line 4

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 5

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 6

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 7

PHP Warning: fclose(): supplied argument is not a valid stream resource in confirmacao_final.php on line 8

 

O que pode ser? onde esta o erro? ahhh outra coisa, eu preciso colocar o meu token no retorno.php tambem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

(...) ao testar ele me retornou o seguinte erro:

 

PHP Warning: fopen(pagseguro.log) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in confirmacao_final.php on line 4

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 5

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 6

PHP Warning: fwrite(): supplied argument is not a valid stream resource in confirmacao_final.php on line 7

PHP Warning: fclose(): supplied argument is not a valid stream resource in confirmacao_final.php on line 8

 

O que pode ser? onde esta o erro? ahhh outra coisa, eu preciso colocar o meu token no retorno.php tambem?

 

 

Meu caro, o seu problema não está no código e sim em permissões. A esmagadora maioria de servidores que rodam PHP com Apache são Linux. Em linux as coisas são um pouquinho diferentes de em windows (nada que você deva ter medo).

 

No windows, você cria um arquivo e normalmente qualquer usuário pode alterar seu conteúdo, mas existe uma opção que você define quais usuários da rede/máquina podem alterá-lo. Em linux isso é mais "chato" e correto. Os arquivos/pasta que você cria por padrão tem permissões de leitura e escrita para você e leitura (apenas leitura) para os outros usuários.

 

Normalmente quem roda cria os arquivos é o usuário do APACHE (ou www-data ou apache ou httpd ou outro qualquer) e sua pasta/arquivo pode não permitir que seja escrito/alterado/criado qualquer coisa nele. Veja o erro gerado: "Permission denied in confirmacao_final.php on line 4": Permissão negada. Os outros erros são erros em cascata "supplied argument is not a valid stream resource" já que ele não conseguiu criar o "link" para o arquivo em fopen("pagseguro.log")

 

Uma forma rápida (não é o ideal, mas é rápido) de resolver é criar o arquivo que você pretende escrever "pagseguro.log" e dar um (chmod 777) no FTP mesmo. Veja no seu programa de FTP sobre isso.

 

Alguns links de referencia que catei no google pra você não precisar ficar correndo atrás de informação :D

 

- http://www.vivaolinux.com.br/dica/Chmod-+-dicas/

- http://www.vivaolinux.com.br/dica/Utilizando-o-chmod-parar-mudar-permissoes-em-arquivos

 

---

 

Um pouco mais avançado, eu criaria o arquivo e alteraria o grupo para o grupo do apache/www-data e setaria escrita e leitura para o grupo e para o dono (eu).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal sou novo no forum.

 

Estou aprendendo PHP, e tenho uma dúvida que acho que todos devam saber.

 

Gostaria de saber como eu faço para coletar os dados de um cliente pelo formulário em PHP em meu site e já mandar os dados do cliente pronto para o Pagseguro Por exemplo tem esse código:

<?

// Incluindo o arquivo da biblioteca
include('pgs.php');

// Criando um novo carrinho
$pgs=new pgs(array('email_cobranca'=>'seu_email_no@pagseguro.com.br'));

// Adicionando um produto
$pgs->adicionar(array(
 array(
   "descricao"=>"Descrição do Produto",
   "valor"=>12.90,
   "peso"=>2,
   "quantidade"=>1,
   "id"=>"33"
 ),  
));

$pgs->cliente(
 array (
  'nome'   => 'José de Arruda',
  'cep'    => '12345678',
  'end'    => 'Rua dos Tupiniquins',
  'num'    => 37,
  'compl'  => 'apto 507',
  'bairro' => 'Sto Amaro',
  'cidade' => 'São Camilo',
  'uf'     => 'SC',
  'pais'   => 'Brasil',
  'ddd'    => '48',
  'tel'    => '55554877',
  'email'  => 'josearruda@teste.com',
 )
);



// Mostrando o botão de pagamento
$pgs->mostra();

?>

Gostaria de saber onde o <form> entra para coletar os dados do meu cliente.

 

Eu consegui fazer isso com um formulário em html, mas estou com dificuldades em php.

 

Se puderem me ajudar.

 

valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu estou com um grande problema com o retorno autmatico, pois ele não le sessões(dito no site do pagseguro) e cookies(percebi ao tentar utilisa-lo, pois este não é avisado no site, só avisam da sessão), pois bem estou fazend um site/sistema de aulas online e preciso saber que cliente comprou qual curso epara isso eu preciso ligar a matricula do cliente ao a id da transação porem não consigo fazer isso sem cookie e se sessão, então gostaria de pedir uma ideia do que fazer no lugar do cookie e da sessão pra resolver esse problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu adicionei a biblioteca "retorno.php" no meu site, ele está hospedado no uol. O retorno para o cliente nao inseriu nenhum dado na database, o código ficou assim:

 

<?php
include ('template/inicio.php');

define ('TOKEN', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
function retorno_automatico (
  $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
  $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
  $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
  $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
		$pucharNumeroPedido2 = mysql_query('SELECT * FROM historico WHERE pedido = "'.$produtos[ProdID].'" ') or die("Error, contate um atendente");
		$pucharNumeroPedido = mysql_fetch_array($pucharNumeroPedido2);
		if($pucharNumeroPedido["pedido"] == true){
			mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$_POST['ProdID_01'].'"') or die("Error, contate um atendente");
		}
		echo 'Confirmado!';
}
require_once("retorno.php");
echo '
        <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>
';
include ('template/final.php');
?>

nem mostrou isto:

echo 'Confirmado!';

oq está errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu adicionei a biblioteca "retorno.php" no meu site, ele está hospedado no uol. O retorno para o cliente nao inseriu nenhum dado na database, o código ficou assim:

 

<?php
include ('template/inicio.php');

define ('TOKEN', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
function retorno_automatico (
  $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
  $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
  $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
  $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
		$pucharNumeroPedido2 = mysql_query('SELECT * FROM historico WHERE pedido = "'.$produtos[ProdID].'" ') or die("Error, contate um atendente");
		$pucharNumeroPedido = mysql_fetch_array($pucharNumeroPedido2);
		if($pucharNumeroPedido["pedido"] == true){
			mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$_POST['ProdID_01'].'"') or die("Error, contate um atendente");
		}
		echo 'Confirmado!';
}
require_once("retorno.php");
echo '
        <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>
';
include ('template/final.php');
?>

nem mostrou isto:

echo 'Confirmado!';

oq está errado?

 

Olha só... quando você trata o retorno automático você está tratando os dados vindos de um robô do PagSeguro que envia o POST de retorno automático. Dessa forma, escrever echo para quando o PagSeguro enviar o POST não adiantará de nada, você não verá essa mensagem (com facilidade). Logo, você precisa encontrar outra forma de debuggar seus dados. O melhor conselho - pela praticidade e agilidade, é gravar um arquivo de log para cada ação que você faça, como receber o POST.

 

Eu escreve um monte de dicas sobre PagSeguro no meu blog ( http://dgmike.com.br/category/pagseguro/ ), dá uma olhada neste artigo, talvez você compreenda melhor do que estou falando...

 

http://dgmike.com.br/2009/06/19/pagseguro-faca-log-do-retorno-automatico/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim mais eu nao quero que crie um log quero que insira o resultado na database como no exemplo acima!

 

quero uma função simples que simplesmente pega o id de qualquer produto para atualizar o status da compra:

aguardando pagamento

finalizado

 

etc

 

 

tem como dar uma luz aí nao?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim mais eu nao quero que crie um log quero que insira o resultado na database como no exemplo acima!

 

quero uma função simples que simplesmente pega o id de qualquer produto para atualizar o status da compra:

aguardando pagamento

finalizado

 

etc

 

tem como dar uma luz aí nao?

 

Pois é, grave log com as seguintes informações: o POST puro, dai você sabe que realmente chegou o POST. no começo da sua função "retorno_automático" assim você sabe que a função está rodando (se não estiver pode ser problema no TOKEN ou configuração ou url de retorno) e sua query (banco de dados) e verifique se todo o processo está correto. Talvez um dos processos não esteja correto. Verifique esses itens e reporte onde o log não gravou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a função de log e deu certo:

 

[04/03/2010 10:10:17] Dados verificados com sucesso! Dados formatados no retorno: Array

(

[0] => alexsndf@hotmail.com

[1] => 18DA508152C24B6AAF22A38C1F680EB1

[2] =>

[3] => EN

[4] => 0.00

[5] =>

[6] => 04/03/2010 10:10:10

[7] => Boleto

[8] => Aguardando Pagto

[9] => Dragon Lord

[10] => dragonlordl@hotmail.com

[11] => rua conseição

[12] => 200

[13] =>

[14] => nova palestina

[15] => almeidao

[16] => PI

[17] => 12345678

[18] => 27 32535248

[19] => Array

(

[0] => Array

(

[ProdID] => 10053

[ProdDescricao] => Glacier Kilt

[ProdValor] => 4.9

[ProdQuantidade] => 1

[ProdFrete] => 0

[ProdExtras] => 0

)

 

)

 

[20] => 1

)

 

 

---

como como faço para eu mudar o status da compra no banco de dados.

1º eu quero pegar somente um dado do post que é o id do primeiro produto

[ProdID] => 10053

para que a database saiba onde alterar o status do pedido certo

 

por exemplo:

$pucharNumeroPedido2 = mysql_query('SELECT * FROM historico WHERE pedido = "'.$produtos[ProdID].'" ') or die("Error, contate um atendente");
                $pucharNumeroPedido = mysql_fetch_array($pucharNumeroPedido2);
                if($pucharNumeroPedido["pedido"] == true){
                        mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$_POST['ProdID_01'].'"') or die("Error, contate um atendente");
                }
                echo 'Confirmado!';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a função de log e deu certo:

 

...

como como faço para eu mudar o status da compra no banco de dados.

1º eu quero pegar somente um dado do post que é o id do primeiro produto

[ProdID] => 10053

para que a database saiba onde alterar o status do pedido certo

 

por exemplo:

$pucharNumeroPedido2 = mysql_query('SELECT * FROM historico WHERE pedido = "'.$produtos[ProdID].'" ') or die("Error, contate um atendente");
                $pucharNumeroPedido = mysql_fetch_array($pucharNumeroPedido2);
                if($pucharNumeroPedido["pedido"] == true){
                        mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$_POST['ProdID_01'].'"') or die("Error, contate um atendente");
                }
                echo 'Confirmado!';

Experimente usar o dado vindo na função retorno_automatico ($produtos) ele é um array com os produtos. Minha sugestão:

 

function retorno_automatico (
  $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete,
  $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento,
  $StatusTransacao, $CliNome, $CliEmail, $CliEndereco,
  $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens
) {
    $cod_pedido = $produtos[0]['ProdId'];
    $sql = 'SELECT * FROM historico WHERE pedido = "'.$cod_pedido.'" ';
    $result = mysql_query($sql) or loga("Error, nao encontrei o produto..." . $sql); // Logue isso também!!!

    $pucharNumeroPedido = mysql_fetch_array($result);
    if ($pucharNumeroPedido["pedido"] == true) {
      $sql = 'UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$_POST['ProdID_01'].'"') or die("Error, contate um atendente";
      loga ($sql); // Logue isto...
      mysql_query($sql);
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao deu certo o script está cheio de bugs, se você puder testar e se realmente funcionar, poste aqui uma que funcione, VLW

 

Então... acontece que eu não conheço o seu banco de dados nem o seu ambiente. O que estou tentando fazer é te dar o caminho das pedras, mas leia o código que passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Michael,

No caso do meu site, se no caso nao fosse para o retorno automatico, este codigo funcionaria:

$StatusTransacao = 'Aprovado';
              
$pucharNumeroPedido2 = mysql_query('SELECT * FROM historico WHERE pedido = "'.$produtos[0]['ProdId'].'" ') or die("Error, contate um atendente");
$pucharNumeroPedido = mysql_fetch_array($pucharNumeroPedido2);
if($pucharNumeroPedido["pedido"] == true){
     mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$produtos[0]['ProdId'].'"') or die("Error, contate um atendente");
}
eu testei esse código e funciona normalmente. Mais ao adicionalo na função de retorno do pagseguro ele nao fuinciona mais!

 

acho que nao estou conseguindo pegar o ID do primeiro produto.

entendido?

agora quero um solução, por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

VLW Michael Granados,

Fiz meu script e deu certo graças a ele.

Segue o código abaixo:

 

define('TOKEN','coloque_seu_token_aqui');
include('retorno.php');

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 == "Aguardando Pagto" or $StatusTransacao == "Aprovado" or $StatusTransacao == "Em Análise" or $StatusTransacao == "Cancelado"){
	$verificarPedido2 = mysql_query('SELECT * FROM `historico` WHERE `pedido` = "'.$produtos[0]['ProdID'].'"') or die("Error, contate um atendente");
	$verificarPedido = mysql_fetch_array($verificarPedido2);
	if($verificarPedido["pedido"] == true) {
		mysql_query('UPDATE historico SET `status` = "'.$StatusTransacao.'" WHERE `pedido` = "'.$produtos[0]['ProdID'].'"') or die("Error, contate um atendente");
	}
	}
}

brigadão aew =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Michel adicionei o código exatamente como você explicou, fiz as alterações que eu precisava,

mas ele não está enviando para o banco de dados.

Uso MYSQL.

Vou postar abaixo o código

 

<?php
ob_start(); //Para redirecionar para outra página

//Para conexão com BD
require_once('include/conecta.php'); 

define('TOKEN', 'MEU_TOKEN');

function addDias($data,$dias) 
{
	$aux = split("/", $data);
    $ano = $aux[2];
    $mes = $aux[1];
    $dia =  $aux[0];
    $data_add = mktime ( 0, 0, 0, $mes, $dia + $dias, $ano );
    return strftime("%d/%m/%Y", $data_add);
}

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') {
        //PAGAMENTO REALIZADO COM SUCESSO
		
		//Divide Referencia
		$aux = split(".", $Referencia);
		$id_venda = $aux[0];
		$assinatura = $aux[1];
		
		//Adiciona os dias referentes a assinatura
		$hoje = date("d/m/Y");
		$validade = addDias($hoje, $assinatura);
		
		//insere os valores no bd
		$query = "UPDATE vendas
				  SET validade = '". $validade ."'
				  WHERE id_venda = '" . $id_venda . "'
				  AND validade IS NULL";
  }
}

//VALIDA RETORNO
require_once("retorno.php");

//REDIRECIONA O USUÁRIO PARA OUTRA PÁGINA DIZENDO QUE A VENDA FOI FINALIZADA
header("Location: venda_finalizada.php");
?>

Você pode me ajudar?

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Na documentação do desenvolvedor tem que a variável TipoPagamento que POST automático do PagSeguro envia pode assumir os seguintes valores: Pagamento: Pagamento PagSeguro, Cartão de Crédito: Pagamento via cartão de crédito, Boleto: Pagamento via boleto bancário e Pagamento Online: Pagamento via transferência online.

Porém, independentemente da forma que foi optada pelo cliente, o meu sistema somente está recebendo o valor "Pagamento". Já inclusive dei um dump em arquivo do POST enviado pelo PagSeguro e sempre chega o mesmo valor. Somente pelo painel administratido do PagSeguro que posso ver qual foi realmente o TipoPagamento efetuado. E eu preciso saber no retorno automático qual foi o tipo de pagamento escolhido.

 

Alguém tem idéia do que pode estar ocorrendo?

 

Obrigado

 

Daniel Barreto

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.