Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, Eu tenho um site de servidor de tibia, então adicionei o retorno automatico, mas eu iria fazer o teste, então eu realizei o teste, o pagamento e aprovado, mas não chega nenhum points na opção shopp -> Trans.hist e aparece You have premium points: 0
E no site pagseguro, la informa que a liberação será dia 15/03/11, será que e por isso?
Mas estárei postado os codigos do arquivo pra vocês verem se tem alguma coisa de errada pra mim.
No Seu Htdocs va em Config/config.php e coloque isso no final:
// Sistema automatico Pagseguro by tatu_hunter
// Seu email cadastrado no pagseguro
$config['pagseguro']['email'] = 'seu e-mail';
// Valor unitario do produto ou seja valor de cada ponto
// Exemplo de valores
// 1 = R$ 1
// 235 = R$ 2,35
// 4254 = R$ 42,54
$config['pagseguro']['produtoValor'] = '1';
// Token gerado no painel do pagseguro
$config['pagseguro']['token'] = 'SEU TOKEN PAGSEGURO AQUI';
Como ja havia dito no outro topico,crie um arquivo chamado retPagseguro.phpDentro adicione isso:
<?php
include('config-and-functions.php');
define('TOKEN', $config['pagseguro']['token']);
// 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) {
global $config;
if(strtolower($StatusTransacao) == 'aprovado') {
$account_logged = $ots->createObject('Account');
$account_logged->find($Referencia);
if($account_logged->isLoaded()) {
$pontos = $account_logged->getCustomField("premium_points");
$account_logged->setCustomField("premium_points", $pontos + $produtos[0]['ProdQuantidade']);
$nome = $Referencia.'-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt';
if(file_exists('logsPagseguro/'.$nome))
$nome = $Referencia.'-2-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt';
$arquivo = fopen('logsPagseguro/'.$nome, "w+");
$dados = "Conta: ".$Referencia."\n";
$dados = "Email: ".$CliEmail."\n";
$dados .= "Total de Points: ".$produtos[0]['ProdQuantidade']."\n";
$dados .= "Hora da Transação: ". date('d-m-Y H:i:s', $_SERVER['REQUEST_TIME'])."";
fwrite($arquivo, $dados);
fclose($arquivo);
}
}
}
// A partir daqui, é só HTML:
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">](http://www.w3.org/1999/xhtml)
<head>
<title></title>
</head>
<body>
<h1>Pedido em processamento</h1>
<p>Recebemos seu pedido e estamos aguardando pela
confirmação do pagamento. Obrigado por comprar conosco.</p>
</body>
</html>
Depois crie um arquivo chamado retorno.php e adicione o seguinte:
<?php
if (!defined('TOKEN')) define ('TOKEN', '');
/**
* RetornoPagSeguro
*
* Classe de manipulação para o retorno do post do pagseguro
*
* @package PagSeguro
*/
class RetornoPagSeguro {
/**
* _preparaDados
*
* Prepara os dados vindos do post e converte-os para url, adicionando
* o token do usuario quando necessario.
*
* @internal é usado pela {@see RetornoPAgSeguro::verifica} para gerar os,
* dados que serão enviados pelo PagSeguro
*
* @access private
*
* @param array $post Array contendo os posts do pagseguro
* @param bool $confirmacao Controlando a adicao do token no post
* @return string
*/
function _preparaDados($post, $confirmacao=true) {
if ('array' !== gettype($post)) $post=array();
if ($confirmacao) {
$post['Comando'] = 'validar';
$post['Token'] = TOKEN;
}
$retorno=array();
foreach ($post as $key=>$value){
if('string'!==gettype($value)) $post[$key]='';
$value=urlencode(stripslashes($value));
$retorno[]="{$key}={$value}";
}
return implode('&', $retorno);
}
/**
* _tipoEnvio
*
* Checa qual será a conexao de acordo com a versao do PHP
* preferencialmente em CURL ou via socket
*
* em CURL o retorno será:
* <code> array ('curl','https://pagseguro.uol.com.br/Security/NPI/Default.aspx') </code>
* já em socket o retorno será:
* <code> array ('fsocket', '/Security/NPI/Default.aspx', $objeto-de-conexao) </code>
* se não encontrar nenhum nem outro:
* <code> array ('','') </code>
*
* @access private
* @global string $_retPagSeguroErrNo Numero de erro do pagseguro
* @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro
* @return array Array com as configurações
*
*/
function _tipoEnvio() {
//Prefira utilizar a função CURL do PHP
//Leia mais sobre CURL em: http://us3.php.net/curl
global $_retPagSeguroErrNo, $_retPagSeguroErrStr;
if (function_exists('curl_exec'))
return array('curl', 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx');
elseif ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://pagseguro.uol.com.br', 443, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30)))
return array('fsocket', '/Security/NPI/Default.aspx', $fp);
elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30))
return array('fsocket', '/Security/NPI/Default.aspx', $fp);
return array ('', '');
}
/**
* not_null
*
* Extraido de OScommerce 2.2 com base no original do pagseguro,
* Checa se o valor e nulo
*
* @access public
*
* @param mixed $value Variável a ser checada se é nula
* @return bool
*/
function not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
} else {
return false;
}
} else {
if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
return true;
} else {
return false;
}
}
}
/**
* verifica
*
* Verifica o tipo de conexão aberta e envia os dados vindos
* do post
*
* @access public
*
* @use RetornoPagSeguro::_tipoenvio()
* @global string $_retPagSeguroErrNo Numero de erro do pagseguro
* @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro
* @param array $post Array contendo os posts do pagseguro
* @param bool $tipoEnvio (opcional) Verifica o tipo de envio do post
* @return bool
*/
function verifica($post, $tipoEnvio=false) {
global $_retPagSeguroErrNo, $_retPagSeguroErrStr;
if ('array' !== gettype($tipoEnvio))
$tipoEnvio = RetornoPagSeguro::_tipoEnvio();
$spost=RetornoPagSeguro::_preparaDados($post);
if (!in_array($tipoEnvio[0], array('curl', 'fsocket')))
return false;
$confirma = false;
if ($tipoEnvio[0] === 'curl') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $spost);
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 (!RetornoPagSeguro::not_null($resp)) {
curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]);
$resp = curl_exec($ch);
}
curl_close($ch);
$confirma = (strcmp ($resp, 'VERIFICADO') == 0);
} elseif ($tipoEnvio[0] === 'fsocket') {
if (!$tipoEnvio[2]) {
die ("{$_retPagSeguroErrStr} ($_retPagSeguroErrNo)");
} else {
$cabecalho = "POST {$tipoEnvio[1]} HTTP/1.0\r\n";
$cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n";
$cabecalho .= "Content-Length: " . strlen($spost) . "\r\n\r\n";
$resp = '';
fwrite ($tipoEnvio[2], "{$cabecalho}{$spost}");
while (!feof($tipoEnvio[2])) {
$resp = fgets ($tipoEnvio[2], 1024);
if (strcmp ($resp, 'VERIFICADO') == 0) {
$confirma = (strcmp ($resp, 'VERIFICADO') == 0);
$confirma=true;
break;
}
}
fclose ($tipoEnvio[2]);
}
}
if ($confirma && function_exists('retorno_automatico')) {
$itens = array (
'VendedorEmail', 'TransacaoID', 'Referencia', 'TipoFrete',
'ValorFrete', 'Anotacao', 'DataTransacao', 'TipoPagamento',
'StatusTransacao', 'CliNome', 'CliEmail', 'CliEndereco',
'CliNumero', 'CliComplemento', 'CliBairro', 'CliCidade',
'CliEstado', 'CliCEP', 'CliTelefone', 'NumItens',
);
foreach ($itens as $item) {
if (!isset($post[$item])) $post[$item] = '';
if ($item=='ValorFrete') $post[$item] = str_replace(',', '.', $post[$item]);
}
$produtos = array ();
for ($i=1;isset($post["ProdID_{$i}"]);$i++) {
$produtos[] = array (
'ProdID' => $post["ProdID_{$i}"],
'ProdDescricao' => $post["ProdDescricao_{$i}"],
'ProdValor' => (double) (str_replace(',', '.', $post["ProdValor_{$i}"])),
'ProdQuantidade' => $post["ProdQuantidade_{$i}"],
'ProdFrete' => (double) (str_replace(',', '.', $post["ProdFrete_{$i}"])),
'ProdExtras' => (double) (str_replace(',', '.', $post["ProdExtras_{$i}"])),
);
}
retorno_automatico (
$post['VendedorEmail'], $post['TransacaoID'], $post['Referencia'], $post['TipoFrete'],
$post['ValorFrete'], $post['Anotacao'], $post['DataTransacao'], $post['TipoPagamento'],
$post['StatusTransacao'], $post['CliNome'], $post['CliEmail'], $post['CliEndereco'],
$post['CliNumero'], $post['CliComplemento'], $post['CliBairro'], $post['CliCidade'],
$post['CliEstado'], $post['CliCEP'], $post['CliTelefone'], $produtos, $post['NumItens']
);
}
return $confirma;
}
}
if ($_POST) {
RetornoPagSeguro::verifica($_POST);
die();
}
?>
No seu buypoints.php,basta colocar isso:
<?php
if(!$logged)
if($action == "logout")
$main_content .= '<div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Logout Successful</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td>You have logged out of your '.$config['server']['serverName'].' account. In order to view your account you need to <a href="?subtopic=accountmanagement" >log in</a> again.</td></tr> </table> </div> </table></div></td></tr>';
else
$main_content .= 'Please enter your account name and your password.<br/><a href="?subtopic=createaccount" >Create an account</a> if you do not have one yet.<br/><br/><form action="?subtopic=accountmanagement" method="post" ><div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Account Login</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td class="LabelV" ><span >Account Name:</span></td><td style="width:100%;" ><input type="password" name="account_login" SIZE="10" maxlength="10" ></td></tr><tr><td class="LabelV" ><span >Password:</span></td><td><input type="password" name="password_login" size="30" maxlength="29" ></td></tr> </table> </div> </table></div></td></tr><br/><table width="100%" ><tr align="center" ><td><table border="0" cellspacing="0" cellpadding="0" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Submit" alt="Submit" src="'.$layout_name.'/images/buttons/_sbutton_submit.gif" ></div></div></td><tr></form></table></td><td><table border="0" cellspacing="0" cellpadding="0" ><form action="?subtopic=lostaccount" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Account lost?" alt="Account lost?" src="'.$layout_name.'/images/buttons/_sbutton_accountlost.gif" ></div></div></td></tr></form></table></td></tr></table>';
else
{
$main_content .= '
<form target="pagseguro" method="post" action="[https://pagseguro.uol.com.br/checkout/checkout.jhtml">](https://pagseguro.uol.com.br/checkout/checkout.jhtml)
<input type="hidden" name="email_cobranca" value="'. $config['pagseguro']['email']. '">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">
<input type="hidden" name="item_id_1" value="1">
<input type="hidden" name="item_descr_1" value="Pontos na account de nome: '.$account_logged->getCustomField("name").'">
<input type="hidden" name="item_valor_1" value="'. $config['pagseguro']['produtoValor'] .'">
<input type="hidden" name="item_frete_1" value="0">
<input type="hidden" name="item_peso_1" value="0">
<input type="hidden" name="ref_transacao" value="'.$account_logged->getCustomField("name").'">
<table border="0" cellpadding="4" cellspacing="1" width="100%" id="#estilo"><tbody>
<tr bgcolor="#505050" class="white">
<th colspan="2"><strong>Escolha a quantidade de pontos que deseja comprar</strong></th>
</tr>
<tr>
<td width="10%">Sua conta</td>
<td><strong>'.$account_logged->getCustomField("name").'</strong></td>
</tr>
<tr>
<td width="10%">Pontos</td>
<td>
<input name="item_quant_1" type="text" value="1" size="5" maxlength="5">
</td>
</tr>
<tr>
<td colspan="2">
<input type="image" src="[https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizar.jpg"](https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizar.jpg) name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</td>
</tr>
</tbody></table></form>'; } ?>
Para finalizar: Adicione no seu phpmyadmin,na parte SQL,a seguinte database:
CREATE TABLE retorno_automatico (
TransacaoID varchar(36) NOT NULL,
VendedorEmail varchar(200) NOT NULL,
Referencia varchar(200) default NULL,
TipoFrete char(2) default NULL,
ValorFrete decimal(10,2) default NULL,
Extras decimal(10,2) default NULL,
Anotacao text,
TipoPagamento varchar(50) NOT NULL,
StatusTransacao varchar(50) NOT NULL,
CliNome varchar(200) NOT NULL,
CliEmail varchar(200) NOT NULL,
CliEndereco varchar(200) NOT NULL,
CliNumero varchar(10) default NULL,
CliComplemento varchar(100) default NULL,
CliBairro varchar(100) NOT NULL,
CliCidade varchar(100) NOT NULL,
CliEstado char(2) NOT NULL,
CliCEP varchar(9) NOT NULL,
CliTelefone varchar(14) default NULL,
NumItens int(11) NOT NULL,
Data datetime NOT NULL,
status tinyint(1) unsigned NOT NULL default '0',
UNIQUE KEY TransacaoID (TransacaoID,StatusTransacao),
KEY Referencia (Referencia),
KEY status (status)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
E essa outra aqui :
CREATE TABLE PagSeguroTransacoes (
TransacaoID varchar(36) NOT NULL,
VendedorEmail varchar(200) NOT NULL,
Referencia varchar(200) default NULL,
TipoFrete char(2) default NULL,
ValorFrete decimal(10,2) default NULL,
Extras decimal(10,2) default NULL,
Anotacao text,
TipoPagamento varchar(50) NOT NULL,
StatusTransacao varchar(50) NOT NULL,
CliNome varchar(200) NOT NULL,
CliEmail varchar(200) NOT NULL,
CliEndereco varchar(200) NOT NULL,
CliNumero varchar(10) default NULL,
CliComplemento varchar(100) default NULL,
CliBairro varchar(100) NOT NULL,
CliCidade varchar(100) NOT NULL,
CliEstado char(2) NOT NULL,
CliCEP varchar(9) NOT NULL,
CliTelefone varchar(14) default NULL,
NumItens int(11) NOT NULL,
Data datetime NOT NULL,
status tinyint(1) unsigned NOT NULL default '0',
UNIQUE KEY TransacaoID (TransacaoID,StatusTransacao),
KEY Referencia (Referencia),
KEY status (status)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Bom, Postei ele todo, se puderem me ajudar a solucionar esse problema, eu não recebo o points na account, mesmo aprovado (dinheiro do pagseguro), e também a data de liberação e dia 15/03 deve ser isso?se sim como arrumo?
>
Vamos isolar o problema, já verificou o que o PagSeguro está retornando para você no retorno automático? pode colocar isso na sua URL de retorno?
So lembrando que a pasta deve ter permissão de escrita ou deve haver um arquivo com o nome de ps.txt com permissão de escrita para poder gravar nele os logs...
<?php
Class createLog{
private $name = 'ps.txt';
private $type = 'ab';
public $log;
function setType($type = '') {
$this -> type = $type;
}
function setFileName($name = ''){
$this -> name = $name;
}
public function setLog($log){
$this -> log = $this -> log . $log;
}
public function createlog(){
$f = fopen ($this -> name, $this -> type);
fwrite($f, $this -> log . "\n\n");
fclose($f);
}
}
if($_POST){
$log = new createLog();
$log -> setLog("POST @ " . date("d/m/Y H:i:s") . "\n");
$log -> setLog("<pre>" . var_export($_POST, true) . "</pre>\n<--------------->\n");
$log -> createlog();
}
?>
Cara só um pouco noob em php eu fiz o seguinte com seu script, coloquei em um arquivo e salvei como log.php e coloquei na mesma pasta ps.txt, com isso fiz uma nova compra com a esperança de salvar os logs, mais não consegui se poder me ajudar a arrumar isso, ou puder me informar onde colocar isso, irei te agradeçer.
Cara só um pouco noob em php eu fiz o seguinte com seu script, coloquei em um arquivo e salvei como log.php e coloquei na mesma pasta ps.txt, com isso fiz uma nova compra com a esperança de salvar os logs, mais não consegui se poder me ajudar a arrumar isso, ou puder me informar onde colocar isso, irei te agradeçer.
Voce configurou a URL de retorno do pagSeguro, para apontar nesse link?
https://pagseguro.uol.com.br/preferences/automaticReturn.jhtml
Verifique se o arquivo que voce criou tem permissão de leitura e escrita.
Vamos isolar o problema, já verificou o que o PagSeguro está retornando para você no retorno automático? pode colocar isso na sua URL de retorno?
So lembrando que a pasta deve ter permissão de escrita ou deve haver um arquivo com o nome de ps.txt com permissão de escrita para poder gravar nele os logs...
<?php
Class createLog{