Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Freedom

Desafio: Retorno PagSeguro

Recommended Posts

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Cara, estou tentando implementar esse retorno automático do pagseguro utilizando PHP + Mysql e até agora não consegui fazer funcionar. Primeiro que nem a tabela que puseram lá do Mysql funciona na hora de criar, esqueceram o delimitador ; e segundo que o código em php está furado, não funciona porque em um determinado momento faz chamada a uma função que não está no código.

 

O próprio pagseguro está, por assim dizer, cavando sua própria cova. O suporte é fraquíssimo e as informações são confusas e insuficientes.

 

Eu li muita coisa já sobre o pagseguro, inclusive aqui no próprio fórum e no blog do pagseguro, onde consta uma coluna dizendo "Seguem abaixo os principais motivos e dicas para resolução do problema", que não é pequena diga-se de passagem, e um detalhe importantíssimo, não resolve nada! É muito genérica. Eu ainda continuo com problema para receber os dados, coisa que deveria ser de uma simplicidade assustadora! Um simples POST resolveria o problema...

 

Creio que o seu desafio realmente é O DESAFIO!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal uso na minha lojas oscommerce e funcionar normal.. ve se este código funciona pra vcs...

 

<?php
/* 
  $Id: pagseguro.php,v 1.1.2.8 2004/12/07 15:46:08 hpdl Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2004 osCommerce

  Released under the GNU General Public License
*/


	chdir('../../../');
	require('includes/application_top.php');
	if (!function_exists('debug_var')) {
		  function debug_var($var, $name='', $to_file=false){
			if ($to_file==true) {
				$txt = fopen('ext/debug.log','a');
				fwrite($txt, "-----------------------------------\n");
				fwrite($txt, $name."\n");
				fwrite($txt,  print_r($var, true)."\n");
				fclose($txt);//
			} else {
				 print('<pre><br><b>'.$name.'</b><br>');
				 echo '<pre>';
				 print_r($var);
				 echo '</pre>';
			}
		  }
	}
	// re-set the level of error reporting due to problems with IIS and the loop fgets
	error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
	debug_var ($_POST, "POST recebido (A): ".date("Y-m-d G:i:s"), true);

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

	if (!tep_not_null($_POST)) { // variáveis POST vazias, significa que é a segunda chamada do script
		debug_var ('Redirecionando para checkout_process', "POST vazio: ".date("Y-m-d G:i:s"), true);
		tep_redirect(tep_href_link('checkout_process.php', "StatusTransacao=$StatusTransacao&Referencia=$Referencia", 'SSL'));
	}
	debug_var ($_POST, "POST recebido: ".date("Y-m-d G:i:s"), true);

	// ENVIA DE VOLTA PARA A PAGSEGURO OS DADOS PARA VALIDAÇÃO
	$PagSeguro = 'Comando=validar';
	$PagSeguro .= "&Token=".trim(MODULE_PAYMENT_PAGSEGURO_TOKEN);
	foreach ($_POST as $key => $value){
		$value = urlencode(stripslashes($value));
		$PagSeguro .= "&$key=$value";
	}


  $server = 'pagseguro.uol.com.br';
  $fsocket = false;
  $curl = false;
  $result = false;

  if (function_exists('curl_exec')) {
	$curl = true;
  } elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen ('ssl://'.$server, 443, $errno, $errstr, 30)) ) {
	$fsocket = true;
  } elseif ($fp = @fsockopen($server, 80, $errno, $errstr, 30)) {
	$fsocket = true;
  }
  if ($curl == true) {
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, 'https://' . $server . '/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);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

	$resp = curl_exec($ch);
	if (!tep_not_null($resp)) {
	   curl_setopt($ch, CURLOPT_URL, 'http://' . $server . '/Security/NPI/Default.aspx');
	   $resp = curl_exec($ch);
	}
	debug_var ($resp, "cURL: ".date("Y-m-d G:i:s"),true);

	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;
				debug_var ($resp, "fsockopen: ".date("Y-m-d G:i:s"),true);
				break;
			}
		}
		fclose ($fp);
	} else{
		echo "$errstr ($errno)<br />\n";
   		debug_var ($errstr.'('.$errno.')', "erro em fsockopen:: ".date("Y-m-d G:i:s"),true);
		// ERRO HTTP
	}
  } 
  debug_var ($resp.'<br>confirmação: '.print_r($confirma,true), "resposta: ".date("Y-m-d G:i:s"),true);


		if ($confirma) {
			// 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
			// RECEBE OS DADOS ENVIADOS PELA PAGSEGURO E ARMAZENA EM VARIÁVEIS
			$DataTransacao   = $_POST['DataTransacao'];
			$DataHora		= substr($DataTransacao,6,4)."-".substr($DataTransacao,3,2)."-".substr($DataTransacao,0,2)."-".substr($DataTransacao,10,9);
			$sql_data_array = array('VendedorEmail'   => $_POST['VendedorEmail'],
									  'TransacaoID'	 => $_POST['TransacaoID'],
									  'Referencia'	  => $_POST['Referencia'],
									  'Anotacao'		=> $_POST['Anotacao'],
									  'DataTransacao'   => $DataHora,
									  'TipoPagamento'   => $_POST['TipoPagamento'],
									  'StatusTransacao' => $_POST['StatusTransacao'],
									  'CliNome'		 => $_POST['CliNome'],
									  'CliEmail'		=> $_POST['CliEmail'],
									  'date_created'	=> 'now()');
			  if((int)$_POST['ValorFrete']>0){
				  $sql_data_array['Anotacao'] .= "\nFrete: ".$_POST['ValorFrete'];
			  }
			  tep_db_perform('temp_pagseguro', $sql_data_array);
			  /*
			  $pedido = explode('-', $Referencia);
			  $order_id	 = trim(substr($pedido[0], 8));
			  $comments = $StatusTransacao.
						  "\nAnotação do cliente: ". $_POST['Anotacao'].
						  "\nTipo do pagamento: ". $_POST['TipoPagamento'].
						  "\nID no PagSeguro: ".$TransacaoID;
			  if((int)$_POST['ValorFrete']>0){
				  $comments .= "\nFrete: ".$_POST['ValorFrete'];
			  }
				$check_query = tep_db_query($qry="select orders_id from " . TABLE_ORDERS . " where orders_id = '" . $order_id . "'");
				if (tep_db_num_rows($check_query) > 0) {
					tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . ((MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID > 0) ? MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID : DEFAULT_ORDERS_STATUS_ID) . "', last_modified = now() where orders_id = '" . $order_id . "'");
					$sql_data_array = array('orders_id' => $order_id,
											'orders_status_id' => (MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID > 0) ? MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID : DEFAULT_ORDERS_STATUS_ID,
											'date_added' => 'now()',
											'customer_notified' => '0',
											'comments' => 'Verificado pelo PagSeguro [' . $comments . ']');
				// tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
				}
*/
		} else {
			if (strcmp ($res, "FALSO") == 0){
				// LOG para investigação manual
				if (tep_not_null(MODULE_PAYMENT_PAGSEGURO_DEBUG_EMAIL)) {
				  $email_body = '$_POST:' . "\n\n";
				  foreach ($_POST as $key => $value) {
					$email_body .= $key . '=' . $value . "\n";
				  }
				  $email_body .= "\n" . '$_GET:' . "\n\n";
				  foreach ($_GET as $key => $value) {
					$email_body .= $key . '=' . $value . "\n";
				  }

				  tep_mail('', MODULE_PAYMENT_PAGSEGURO_DEBUG_EMAIL, 'Post Inválido: ', $email_body, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
				}
				if ($txt = @fopen ('ext/fake.log', 'a')) {
					fwrite ($txt, "\n======================================\nDados possivelmente falsificados: ".date("Y-m-d G:i:s"). "\n");
					fwrite ($txt, print_r($_POST,true). "\n");
					fclose($txt);
				};
			}
		}
  require('includes/application_bottom.php');
?>

tem a loja pra download em:

 

http://www.linknacional.com.br/download/

 

 

boa sorte!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema, ao menos para mim, é que não uso oscommerce. Utilizo um método mais simples feito por mim mesmo sem carrinho de compra nem nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Olá Douglas,

 

Também estou com dificuldade pra fazer isso..... bom, até agora consegui descobrir que:

 

O código do pagseguro (pelo menos em PHP e MySQL) não funciona, contém erros, entrei em contato com o pessoal do suporte, me disseram que aquele código tem de ser alterado, pois é apenas apenas um "exemplo"...

 

Se você reparar, no código de criação das tabelas, uma se chama PagSeguroTransacoes e a outra PagSeguroTransacoesProdutos....

 

No entanto, na hora de inserir os dados está:

 

$SQL = "INSERT INTO TransacoesPagSeguro (" ...

 

O mais complicado é que não existe algum jeito de fazer testes como na PayPal.... A cada tentativa, temos que fazer compras de pequenos valores... O sistema pagseguro é ótimo e muito confiável, mas deixa a desejar neste ponto.

 

Se alguém conseguiu fazer funcionar, por favor, se manifeste! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Olá Douglas,

 

Também estou com dificuldade pra fazer isso..... bom, até agora consegui descobrir que:

 

O código do pagseguro (pelo menos em PHP e MySQL) não funciona, contém erros, entrei em contato com o pessoal do suporte, me disseram que aquele código tem de ser alterado, pois é apenas apenas um "exemplo"...

 

Se você reparar, no código de criação das tabelas, uma se chama PagSeguroTransacoes e a outra PagSeguroTransacoesProdutos....

 

No entanto, na hora de inserir os dados está:

 

$SQL = "INSERT INTO TransacoesPagSeguro (" ...

 

O mais complicado é que não existe algum jeito de fazer testes como na PayPal.... A cada tentativa, temos que fazer compras de pequenos valores... O sistema pagseguro é ótimo e muito confiável, mas deixa a desejar neste ponto.

 

Se alguém conseguiu fazer funcionar, por favor, se manifeste! :)

 

Ola amigo

 

Depois de quase um mes tentando e estudando para fazer funcionar o tal retorno do pag seguro no PHP, consegui concluir e funcionar o mesmo.

 

Através de um log feito pelo meu responsavel(chefe) onde trabalho, descobrimos que o pag seguro realmente envia via POST as informações, mas somente internamente, você não consegue visualizar nada na tela desse processo( não sei se vcs ja estavam sabendo desse detalhe, para mim foi novo).

 

Unica coisa q ajustei no script que é disponibilizado no site do pagseguro foi a condição

"if ($confirma)" e seu "else", que por ser novo na implantação do pagseguro e ainda tenho muito que aprender sobre o PHP não entendi a serventia dessa condição, assim conseguindo pegar os dados do post e incluindo na base de dados.

 

OBS: O retorno é feito automatico em questão de alguns seguntos, mas não 100% de imediato ao retornar para a direção incluida em seu retorno.

 

Espero que tenha ajudado, pois estou aqui pra ter um auxilio no que necessitar futuramente.

 

Até!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Leno!

Seria possível disponibilizar o conteúdo modificado do arquivo ou um passo a passo (mesmo que resumido), sobre o que e onde modificar para que o código funcione corretamente?

Depois de anos de ASP, estou aprendendo PHP agora, e ainda inseguro, pois existem muitas similaridades, mas esse problema do pagseguro está me dando nos nervos e ainda não consegui resolver.

 

Tenho certeza de que devem existir outros usuários do fórum com o mesmo problema, e talvez, devido a pouca experiência em PHP, não entendem dentro da sua explicação, como resolver o problema.

 

Agradeço desde já por sua contribuição e atenção!

 

Grato,

D!

 

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Olá Douglas,

 

Também estou com dificuldade pra fazer isso..... bom, até agora consegui descobrir que:

 

O código do pagseguro (pelo menos em PHP e MySQL) não funciona, contém erros, entrei em contato com o pessoal do suporte, me disseram que aquele código tem de ser alterado, pois é apenas apenas um "exemplo"...

 

Se você reparar, no código de criação das tabelas, uma se chama PagSeguroTransacoes e a outra PagSeguroTransacoesProdutos....

 

No entanto, na hora de inserir os dados está:

 

$SQL = "INSERT INTO TransacoesPagSeguro (" ...

 

O mais complicado é que não existe algum jeito de fazer testes como na PayPal.... A cada tentativa, temos que fazer compras de pequenos valores... O sistema pagseguro é ótimo e muito confiável, mas deixa a desejar neste ponto.

 

Se alguém conseguiu fazer funcionar, por favor, se manifeste! :)

 

Ola amigo

 

Depois de quase um mes tentando e estudando para fazer funcionar o tal retorno do pag seguro no PHP, consegui concluir e funcionar o mesmo.

 

Através de um log feito pelo meu responsavel(chefe) onde trabalho, descobrimos que o pag seguro realmente envia via POST as informações, mas somente internamente, você não consegue visualizar nada na tela desse processo( não sei se vcs ja estavam sabendo desse detalhe, para mim foi novo).

 

Unica coisa q ajustei no script que é disponibilizado no site do pagseguro foi a condição

"if ($confirma)" e seu "else", que por ser novo na implantação do pagseguro e ainda tenho muito que aprender sobre o PHP não entendi a serventia dessa condição, assim conseguindo pegar os dados do post e incluindo na base de dados.

 

OBS: O retorno é feito automatico em questão de alguns seguntos, mas não 100% de imediato ao retornar para a direção incluida em seu retorno.

 

Espero que tenha ajudado, pois estou aqui pra ter um auxilio no que necessitar futuramente.

 

Até!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Leno!

Seria possível disponibilizar o conteúdo modificado do arquivo ou um passo a passo (mesmo que resumido), sobre o que e onde modificar para que o código funcione corretamente?

Depois de anos de ASP, estou aprendendo PHP agora, e ainda inseguro, pois existem muitas similaridades, mas esse problema do pagseguro está me dando nos nervos e ainda não consegui resolver.

 

Tenho certeza de que devem existir outros usuários do fórum com o mesmo problema, e talvez, devido a pouca experiência em PHP, não entendem dentro da sua explicação, como resolver o problema.

 

Agradeço desde já por sua contribuição e atenção!

 

Grato,

D!

 

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Olá Douglas,

 

Também estou com dificuldade pra fazer isso..... bom, até agora consegui descobrir que:

 

O código do pagseguro (pelo menos em PHP e MySQL) não funciona, contém erros, entrei em contato com o pessoal do suporte, me disseram que aquele código tem de ser alterado, pois é apenas apenas um "exemplo"...

 

Se você reparar, no código de criação das tabelas, uma se chama PagSeguroTransacoes e a outra PagSeguroTransacoesProdutos....

 

No entanto, na hora de inserir os dados está:

 

$SQL = "INSERT INTO TransacoesPagSeguro (" ...

 

O mais complicado é que não existe algum jeito de fazer testes como na PayPal.... A cada tentativa, temos que fazer compras de pequenos valores... O sistema pagseguro é ótimo e muito confiável, mas deixa a desejar neste ponto.

 

Se alguém conseguiu fazer funcionar, por favor, se manifeste! :)

 

Ola amigo

 

Depois de quase um mes tentando e estudando para fazer funcionar o tal retorno do pag seguro no PHP, consegui concluir e funcionar o mesmo.

 

Através de um log feito pelo meu responsavel(chefe) onde trabalho, descobrimos que o pag seguro realmente envia via POST as informações, mas somente internamente, você não consegue visualizar nada na tela desse processo( não sei se vcs ja estavam sabendo desse detalhe, para mim foi novo).

 

Unica coisa q ajustei no script que é disponibilizado no site do pagseguro foi a condição

"if ($confirma)" e seu "else", que por ser novo na implantação do pagseguro e ainda tenho muito que aprender sobre o PHP não entendi a serventia dessa condição, assim conseguindo pegar os dados do post e incluindo na base de dados.

 

OBS: O retorno é feito automatico em questão de alguns seguntos, mas não 100% de imediato ao retornar para a direção incluida em seu retorno.

 

Espero que tenha ajudado, pois estou aqui pra ter um auxilio no que necessitar futuramente.

 

Até!

 

 

Pessoal segue abaixo o código em ASP que está funcionando no site que utilizo o PagSeguro.

 

 

 

 

<%

 

Dim str

Dim Token

DIM TransacaoID, CliNome

 

Token = " INSIRA AQUI O SEU NÚMERO DO TOKEN"

 

 

' Recebe o POST enviado pela PagSeguro e armazena na variável str

str = Request.Form & "&Comando=validar&Token=" & Token

 

'Envia para a PagSeguro a string para validação dos dados

'SET objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

'SET objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")

SET objHttp = Server.CreateObject("Microsoft.XMLHTTP")

 

'(DEIXE HABILITADO AI EM CIMA O COMPONENTE QUE ESTÁ FUNCIONANDO NO SEU SERVIDOR)

 

 

objHttp.OPEN "POST", "https://pagseguro.uol.com.br/Security/NPI/Default.aspx", false

objHttp.SetRequestHeader "Content-type", "application/x-www-form-urlencoded"

objHttp.Send str

 

 

' Recupera as variáveis postadas pela PagSeguro e armazena nas variáveis locais

 

TransacaoID = Request.Form("TransacaoID")

CliNome = Request.Form("CliNome")

 

if trim(TransacaoID)<>"" then ' Há POST do Robô do PagSeguro

 

' Confirma quando o NPI está VERIFICADO ou FALSO. Se FALSO, então ignore o NPI

' SOMENTE SALVE OS DADOS CASO O RESULTADO SEJA IGUAL À "VERIFICADO"

If (objHttp.status <> 200 ) Then

 

'Erro de cabeçalho HTTP ENVIAR PARA UM ROTINA DE ERRO!!!!!!

 

 

ElseIf (objHttp.responseText = "VERIFICADO") Then

 

'Salva os dados no Banco de Dados

 

Set Conexao1 = CreateObject("ADODB.Connection")

Application("StringConexaoBanco") = (INSIRA AQUI A STRING DE CONEXÃO COM SEU BANCO DE DADOS)

 

Conexao1.open Application("StringConexaoBanco")

 

Set Rst2 = Server.CreateObject("ADODB.Recordset")

sql2 = "SELECT * from PagSeguroTransacoes WHERE TransacaoID ='"&TransacaoID&"'"

Rst2.Open sql2,Conexao1,3,3

 

if Rst2.eof then

 

'GRAVA DADOS ENCAMINHADOS PELO PAGAMENTO SEGURO NA TABELA (PagSeguroTransacoes)

 

V_VendedorEmail=request.form ("VendedorEmail")

V_TransacaoID = request.form ("TransacaoID")

V_Referencia = request.form ("Referencia")

V_TipoFrete = request.form ("TipoFrete")

V_ValorFrete = request.form ("ValorFrete")

V_Anotacao = request.form ("Anotacao")

V_DataTransacao = request.form ("DataTransacao")

V_TipoPagamento = request.form ("TipoPagamento")

V_StatusTransacao = request.form ("StatusTransacao")

V_CliNome = request.form ("CliNome")

V_CliEmail = request.form ("CliEmail")

V_CliEndereco = request.form ("CliEndereco")

V_CliNumero = request.form ("CliNumero")

V_CliComplemento = request.form ("CliComplemento")

V_CliBairro = request.form ("CliBairro")

V_CliCidade = request.form ("CliCidade")

V_CliEstado = request.form ("CliEstado")

V_CliCEP = request.form ("CliCEP")

V_CliTelefone = request.form ("CliTelefone")

V_NumItens = request.form ("NumItens")

 

 

'GRAVA DADOS ENCAMINHADOS PELO PAGAMENTO SEGURO NA TABELA (PagSeguroTransacoesProdutos)

 

SqlExec="Insert into PagSeguroTransacoes " &_

"(TransacaoID,VendedorEmail,Referencia,TipoFrete,ValorFrete,Anotacao,DataTra

nsacao,TipoPagamento,StatusTransacao, " &_

"CliNome, CliEmail,CliEndereco, CliNumero,CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens)" &_

"Values ('"&V_TransacaoID&"','"&V_VendedorEmail&"','"&V_Referencia&"','"&V_TipoFrete&"',CONVERT(MONEY,"&V_ValorFrete&"),'"&V_Anotacao&"','"&V_DataTransacao&"','"&V_TipoPagamento&"'," &_

"'"&V_StatusTransacao&"','"&V_CliNome&"','"&V_CliEmail&"','"&V_CliEndereco&"','"&V_CliNumero&"','"&V_CliComplemento&"','"&V_CliBairro&"','"&V_CliCidade&"','"&V_CliEstado&"','"&V_CliCEP&"','"&V_CliTelefone&"','"&V_NumItens&"')"

 

Conexao1.execute(SqlExec)

 

'GRAVA DADOS ENCAMINHADOS PELO PAGAMENTO SEGURO NA TABELA (PagSeguroTransacoesProdutos)

 

For t=1 to V_NumItens

 

ProdID="ProdID_"&t

ProdDescricao = "ProdDescricao_"&t

ProdValor="ProdValor_"&t

ProdQuantidade="ProdQuantidade_"&t

ProdFrete="ProdFrete_"&t

ProdExtras="ProdExtras_"&t

 

V_TransacaoID = request.form ("TransacaoID")

V_ProdID = request.form (ProdID)

V_ProdDescricao = request.form (ProdDescricao)

V_ProdValor = request.form (ProdValor)

V_ProdQuantidade = request.form (ProdQuantidade)

V_ProdFrete = request.form (ProdFrete)

V_ProdExtras = request.form (ProdExtras)

 

 

SqlExec="Insert into PagSeguroTransacoesProdutos " &_

"(TransacaoID,ProdID,ProdDescricao,ProdValor,ProdQuantidade,ProdFrete,ProdEx

tras) Values " &_

"('"&V_TransacaoID&"','"&V_ProdID&"','"&V_ProdDescricao&"',CONVERT(MONEY,"&V_ProdValor&"),'"&V_ProdQuantidade&"', CONVERT(MONEY,"&V_ProdFrete&"),CONVERT(MONEY,"&V_ProdExtras&"))"

 

Conexao1.execute(SqlExec)

 

Next

else

' Atualização apenas do STATUS

V_StatusTransacao = request.form ("StatusTransacao")

Rst2("StatusTransacao") = V_StatusTransacao

Rst2.update

 

end if

rst2.close

set rst2 = nothing

Else

'' NÃO VERIFICADO ( HAVIA (POST), MAS NÃO FOI VALIDADO PELO TOKEN - FALHA OU FRAUDE)

'' Não fazer nada

End If

 

else

''' RETORNO SEM (POST) DIRECINAR PARA A PAGINA DE FIM DE TRANSAÇÃO

Set oDNS = Server.Createobject("Dynu.DNS")

Ip_Linstec =oDNS.Lookup("linstec.com")

Set oDNS = nothing

Ip_User= Request.ServerVariables("REMOTE_ADDR")

 

if Ip_Linstec=Ip_User then

response.redirect "http://servidor/linstec/new/pagamento.asp"

else

response.redirect "http://linstec.com/linstec/new/pagamento.asp"

end if

 

End if

SET objHttp = NOTHING

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Leno!

Seria possível disponibilizar o conteúdo modificado do arquivo ou um passo a passo (mesmo que resumido), sobre o que e onde modificar para que o código funcione corretamente?

Depois de anos de ASP, estou aprendendo PHP agora, e ainda inseguro, pois existem muitas similaridades, mas esse problema do pagseguro está me dando nos nervos e ainda não consegui resolver.

 

Tenho certeza de que devem existir outros usuários do fórum com o mesmo problema, e talvez, devido a pouca experiência em PHP, não entendem dentro da sua explicação, como resolver o problema.

 

Agradeço desde já por sua contribuição e atenção!

 

Grato,

D!

 

Caros amigos, já dei uma vasculhada na internet e não encontrei nada que resolva realmente o problema de retorno automático do pagseguro , (só um cara que realmente não deve gostar de ajudar a comunidade, e quer vender o código, que ele diz funcionar) , então gostaria de tentar juntar nossas forças pra tentar resolver essa questão e disponibilizar algo para que todos possam ler e ajudar nessa função que alguns clientes estão bastantes interessados no mercado.

 

Agradeço a atenção desde já.

 

Douglas Brucieri

Olá Douglas,

 

Também estou com dificuldade pra fazer isso..... bom, até agora consegui descobrir que:

 

O código do pagseguro (pelo menos em PHP e MySQL) não funciona, contém erros, entrei em contato com o pessoal do suporte, me disseram que aquele código tem de ser alterado, pois é apenas apenas um "exemplo"...

 

Se você reparar, no código de criação das tabelas, uma se chama PagSeguroTransacoes e a outra PagSeguroTransacoesProdutos....

 

No entanto, na hora de inserir os dados está:

 

$SQL = "INSERT INTO TransacoesPagSeguro (" ...

 

O mais complicado é que não existe algum jeito de fazer testes como na PayPal.... A cada tentativa, temos que fazer compras de pequenos valores... O sistema pagseguro é ótimo e muito confiável, mas deixa a desejar neste ponto.

 

Se alguém conseguiu fazer funcionar, por favor, se manifeste! :)

 

Ola amigo

 

Depois de quase um mes tentando e estudando para fazer funcionar o tal retorno do pag seguro no PHP, consegui concluir e funcionar o mesmo.

 

Através de um log feito pelo meu responsavel(chefe) onde trabalho, descobrimos que o pag seguro realmente envia via POST as informações, mas somente internamente, você não consegue visualizar nada na tela desse processo( não sei se vcs ja estavam sabendo desse detalhe, para mim foi novo).

 

Unica coisa q ajustei no script que é disponibilizado no site do pagseguro foi a condição

"if ($confirma)" e seu "else", que por ser novo na implantação do pagseguro e ainda tenho muito que aprender sobre o PHP não entendi a serventia dessa condição, assim conseguindo pegar os dados do post e incluindo na base de dados.

 

OBS: O retorno é feito automatico em questão de alguns seguntos, mas não 100% de imediato ao retornar para a direção incluida em seu retorno.

 

Espero que tenha ajudado, pois estou aqui pra ter um auxilio no que necessitar futuramente.

 

Até!

 

Pessoal!

 

Segue abaixo o código em ASP + MSSQL que está funcionando no site que utilizo o PagSeguro. É necessário que seja criada a base de dados com o próprio script fornecido pelo PagSeguro na pagina de intergração.

 

Observem que o lance é identificar quando há ou não há post do "Robô do PagSeguro". Quando há, os dados são tratados, pois esta página QUE PRECISA ESTAR GRAVADA NA URL DE RETORNO DO PAGSEGURO, foi chamada pelo "Robô do Pagseguro".

 

Quando não há, é porque esta página foi chamada após uma transação com sucesso de algum cliente.

 

Resumindo. Esta pagina é chamada durante uma transação de pagamento duas vezes, a primeira em segundo plano pelo ROBÔ do Pagseguro, neste caso com dados de POST. E uma segunda vez sem dados de POST sendo preciso direciona-la para uma página que diga ao cliente que a transação foi realizada com sucesso.

 

Quando houve qualquer atualização de Status, o ROBÔ chama automaticamente esta página, desta vez com dados de POST e o script atualiza este status na base de dados.

 

Estou usando a quase duas semanas e até as transações de testes que realizei com boletos já tiveram seus status alterados automáticamente para cancelados em segundo plano.

 

Segue o script, qualquer dúvido estou a disposição.

 

Lula Moura

http://www.linstec.com.br

 

<%

 

Dim str

Dim Token

DIM TransacaoID, CliNome

 

Token = " INSIRA AQUI O SEU NÚMERO DO TOKEN"

 

 

' Recebe o POST enviado pela PagSeguro e armazena na variável str

str = Request.Form & "&Comando=validar&Token=" & Token

 

'Envia para a PagSeguro a string para validação dos dados

'SET objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

'SET objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")

SET objHttp = Server.CreateObject("Microsoft.XMLHTTP")

 

'(DEIXE HABILITADO AI EM CIMA O COMPONENTE QUE ESTÁ FUNCIONANDO NO SEU SERVIDOR)

 

 

objHttp.OPEN "POST", "https://pagseguro.uol.com.br/Security/NPI/Default.aspx", false

objHttp.SetRequestHeader "Content-type", "application/x-www-form-urlencoded"

objHttp.Send str

 

 

' Recupera as variáveis postadas pela PagSeguro e armazena nas variáveis locais

 

TransacaoID = Request.Form("TransacaoID")

CliNome = Request.Form("CliNome")

 

if trim(TransacaoID)<>"" then ' Há POST do Robô do PagSeguro

 

' Confirma quando o NPI está VERIFICADO ou FALSO. Se FALSO, então ignore o NPI

' SOMENTE SALVE OS DADOS CASO O RESULTADO SEJA IGUAL À "VERIFICADO"

If (objHttp.status <> 200 ) Then

 

'Erro de cabeçalho HTTP ENVIAR PARA UM ROTINA DE ERRO!!!!!!

 

 

ElseIf (objHttp.responseText = "VERIFICADO") Then

 

'Salva os dados no Banco de Dados

 

Set Conexao1 = CreateObject("ADODB.Connection")

Application("StringConexaoBanco") = (INSIRA AQUI A STRING DE CONEXÃO COM SEU BANCO DE DADOS)

 

Conexao1.open Application("StringConexaoBanco")

 

Set Rst2 = Server.CreateObject("ADODB.Recordset")

sql2 = "SELECT * from PagSeguroTransacoes WHERE TransacaoID ='"&TransacaoID&"'"

Rst2.Open sql2,Conexao1,3,3

 

if Rst2.eof then ´NOVO REGISTRO GRAVAR TUDO

 

'GRAVA DADOS ENCAMINHADOS PELO PAGAMENTO SEGURO NA TABELA (PagSeguroTransacoes)

 

V_VendedorEmail=request.form ("VendedorEmail")

V_TransacaoID = request.form ("TransacaoID")

V_Referencia = request.form ("Referencia")

V_TipoFrete = request.form ("TipoFrete")

V_ValorFrete = request.form ("ValorFrete")

V_Anotacao = request.form ("Anotacao")

V_DataTransacao = request.form ("DataTransacao")

V_TipoPagamento = request.form ("TipoPagamento")

V_StatusTransacao = request.form ("StatusTransacao")

V_CliNome = request.form ("CliNome")

V_CliEmail = request.form ("CliEmail")

V_CliEndereco = request.form ("CliEndereco")

V_CliNumero = request.form ("CliNumero")

V_CliComplemento = request.form ("CliComplemento")

V_CliBairro = request.form ("CliBairro")

V_CliCidade = request.form ("CliCidade")

V_CliEstado = request.form ("CliEstado")

V_CliCEP = request.form ("CliCEP")

V_CliTelefone = request.form ("CliTelefone")

V_NumItens = request.form ("NumItens")

 

 

'GRAVA DADOS ENCAMINHADOS PELO PAGSEGURO NA TABELA (PagSeguroTransacoes)

 

SqlExec="Insert into PagSeguroTransacoes " &_

"(TransacaoID,VendedorEmail,Referencia,TipoFrete,ValorFrete,Anotacao,DataTra

nsacao,TipoPagamento,StatusTransacao, " &_

"CliNome, CliEmail,CliEndereco, CliNumero,CliComplemento, CliBairro, CliCidade, CliEstado, CliCEP, CliTelefone, NumItens)" &_

"Values ('"&V_TransacaoID&"','"&V_VendedorEmail&"','"&V_Referencia&"','"&V_TipoFrete&"',CONVERT(MONEY,"&V_ValorFrete&"),'"&V_Anotacao&"','"&V_DataTransacao&"','"&V_TipoPagamento&"'," &_

"'"&V_StatusTransacao&"','"&V_CliNome&"','"&V_CliEmail&"','"&V_CliEndereco&"','"&V_CliNumero&"','"&V_CliComplemento&"','"&V_CliBairro&"','"&V_CliCidade&"','"&V_CliEstado&"','"&V_CliCEP&"','"&V_CliTelefone&"','"&V_NumItens&"')"

 

Conexao1.execute(SqlExec)

 

'GRAVA DADOS ENCAMINHADOS PELO PAGSEGURO NA TABELA (PagSeguroTransacoesProdutos)

 

For t=1 to V_NumItens

 

ProdID="ProdID_"&t

ProdDescricao = "ProdDescricao_"&t

ProdValor="ProdValor_"&t

ProdQuantidade="ProdQuantidade_"&t

ProdFrete="ProdFrete_"&t

ProdExtras="ProdExtras_"&t

 

V_TransacaoID = request.form ("TransacaoID")

V_ProdID = request.form (ProdID)

V_ProdDescricao = request.form (ProdDescricao)

V_ProdValor = request.form (ProdValor)

V_ProdQuantidade = request.form (ProdQuantidade)

V_ProdFrete = request.form (ProdFrete)

V_ProdExtras = request.form (ProdExtras)

 

 

SqlExec="Insert into PagSeguroTransacoesProdutos " &_

"(TransacaoID,ProdID,ProdDescricao,ProdValor,ProdQuantidade,ProdFrete,ProdEx

tras) Values " &_

"('"&V_TransacaoID&"','"&V_ProdID&"','"&V_ProdDescricao&"',CONVERT(MONEY,"&V_ProdValor&"),'"&V_ProdQuantidade&"', CONVERT(MONEY,"&V_ProdFrete&"),CONVERT(MONEY,"&V_ProdExtras&"))"

 

Conexao1.execute(SqlExec)

 

Next

else

 

' NESTE CASO JÁ HAVIA DADOS GRAVADO LOGO É UMA ATUALIZAÇÃO DE STATUS

V_StatusTransacao = request.form ("StatusTransacao")

Rst2("StatusTransacao") = V_StatusTransacao

Rst2.update

 

end if

rst2.close

set rst2 = nothing

Else

'' NÃO VERIFICADO ( HAVIA (POST), MAS NÃO FOI VALIDADO PELO TOKEN - FALHA OU FRAUDE)

'' Não fazer nada

End If

 

else

''' RETORNO SEM (POST) DIRECINAR PARA A PAGINA DE FIM DE TRANSAÇÃO

response.redirect "ALGUMA PAGINA QUE INFORME AO CLIENTE QUE A TRANSAÇÃO DELE FOI REALIZADA NO PAGSEGURO, SE QUISE MOSTRAR ALGO COM RELAÇÃO A TRANSAÇÃO TERÁ QUE LER NAS BASES DE DADOS (PagSeguroTransacoes) e (PagSeguroTransacoesProdutos) NÃO É POSSÍVEL LER OS POSTS "

 

End if

SET objHttp = NOTHING

%>

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.