Ir para conteúdo

[Gesior] PagSeguro Automático (100% Funcional)


Posts Recomendados

Bom galera antes de vir postar este sistema já tentei de varias formas incluir isso ao meu servidor mais sempre tive problemas e não tinha sucesso com o sistema, porém um dia consegui adicionar utilizando de um tutorial postado aqui no fórum, o problema foi que esse sistema existe um BUG no qual do nada um player que fez uma doação de 10,00 reais estava com 1000 premium points na sua acc.

Fui em busca de soluções encontrei uma com um amigo meu programador de PHP, Joffily Ferreira e vou postar pra vocês porque acho justo todos usufruir do que é bom.

Vamos la deixa de bla bla e vamos ao que interessa...

 

Crie um arquivo .php chamado de retpagseguro, insira dentro do mesmo os code a seguir:

OBS: Este arquivo deve fica localizado na pasta htdocs ou www

<?PHP
$host = "localhost"; /* HOST */
$user = "root"; /* USER */
$passwd = "senhadb"; /* PASSWORD */
$db = "nomedb"; /* DB */
$retorno_token = 'suatokenpagseguro'; // Token gerado pelo PagSeguro
##############################################################
#                         CONFIGURAÇÕES
##############################################################

if (empty($_POST['Referencia'])) { header("Location http://pagseguro.com.br");  }

list($accname, $world) = explode('-', $_POST['Referencia']);
if ($world=='sv') {
        $retorno_host = "$host"; // Local da base de dados MySql
        $retorno_database = "$db"; // Nome da base de dados MySql
        $retorno_usuario = "$user"; // Usuario com acesso a base de dados MySql
        $retorno_senha = "$passwd";  // Senha de acesso a base de dados MySql
}

###############################################################
#              NÃO ALTERE DESTA LINHA PARA BAIXOs#

$lnk = mysql_connect("$host", "$user", "$passwd") or die ('Nao foi possível conectar ao MySql: ' . mysql_error());
mysql_select_db("$db", $lnk) or die ('Nao foi possível ao banco de dados selecionado no MySql: ' . mysql_error());    

// Validando dados no PagSeguro
$PagSeguro = 'Comando=validar';
$PagSeguro .= '&Token=' . $retorno_token;
$Cabecalho = "Retorno PagSeguro";

foreach ($_POST as $key => $value)
{
 $value = urlencode(stripslashes($value));
 $PagSeguro .= "&$key=$value";
}

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

if ($curl == true)
{
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx');
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

  curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx');
  $resp = curl_exec($ch);

 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;
       if (strcmp ($res, "VERIFICADO") == 0)
       {
          $confirma=true;
          break;
       }
    }
    fclose ($fp);
 }
 else
 {
    echo "$errstr ($errno)<br />\n";
 }
}

if ($confirma) {
## Recebendo Dados ##
$TransacaoID = $_POST['TransacaoID'];
$VendedorEmail  = $_POST['VendedorEmail'];
$Referencia = $_POST['Referencia'];
$TipoFrete = $_POST['TipoFrete'];
$ValorFrete = $_POST['ValorFrete'];
$Extras = $_POST['Extras'];
$Anotacao = $_POST['Anotacao'];
$TipoPagamento = $_POST['TipoPagamento'];
$StatusTransacao = $_POST['StatusTransacao'];
$CliNome = $_POST['CliNome'];
$CliEmail = $_POST['CliEmail'];
$CliEndereco = $_POST['CliEndereco'];
$CliNumero = $_POST['CliNumero'];
$CliComplemento = $_POST['CliComplemento'];
$CliBairro = $_POST['CliBairro'];
$CliCidade = $_POST['CliCidade'];
$CliEstado = $_POST['CliEstado'];
$CliCEP = $_POST['CliCEP'];
$CliTelefone = $_POST['CliTelefone'];
$NumItens = intval($_POST['ProdValor_1']);
$ProdQuantidade_x = $POST['ProdQuantidade_1'];

# GRAVA OS DADOS NO BANCO DE DADOS #
mysql_query("INSERT into PagSeguroTransacoes SET
        TransacaoID='$TransacaoID',
        VendedorEmail='$VendedorEmail',
        Referencia='$Referencia',
        TipoFrete='$TipoFrete',
        ValorFrete='$ValorFrete',
        Extras='$Extras',
        Anotacao='$accname',
        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(),
ProdQuantidade_x='$ProdQuantidade_x';");

if ($StatusTransacao == "Aprovado") {
mysql_query("UPDATE accounts SET premium_points = premium_points + '$NumItens' WHERE name = '".htmlspecialchars($accname)."'");
mysql_query("UPDATE PagSeguroTransacoes SET StatusTransacao = 'Entregue' WHERE CONVERT( `PagSeguroTransacoes`.`TransacaoID` USING utf8 ) = '$TransacaoID' AND CONVERT( `PagSeguroTransacoes`.`StatusTransacao` USING utf8 ) = 'Aprovado' LIMIT 1 ;");
mysql_query('OPTIMIZE TABLE  `pagsegurotransacoes`');
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Donate Server</title>
<style type="text/css">
body {
        font-family: Tahoma, Geneva, sans-serif;
        font-size: 16px;
        width: 900px;
        margin: 0px auto;
        margin-top: 30px;
}
b {
        font-size: 18px;
        font-weight: bold;
}
</style>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td width="11%" align="center" valign="middle"><img src="images/true.png" height="auto" width="64" /></td>
    <td width="89%"><p><b>S</b>ua compra está sendo processada por nossos sistemas de apuração, dentro de no máximo <u>1 hora seus pontos serão creditados</u>, caso o pagamento não for efetuado, ficará em aberto 1 ou mais pagamentos pendentes em sua conta. Caso você tenha mais de 3 pagamentos pendentes por falta de pagamento, sua conta será bloqueada temporariamente para efetuar pagamentos.</p></td>
  </tr>
</table>
<!--p><b>ID de Transação:</b> <?php echo $_POST['TransacaoID']; ?></p-->
</body>
</html>

No arquivo acima você vai alterar as seguintes linhas:

$host = "localhost"; /* HOST */
$user = "root"; /* USER */
$passwd = "senhadb"; /* PASSWORD */
$db = "nomedb"; /* DB */
$retorno_token = 'suatokenpagseguro'; // Token gerado pelo PagSeguro

Gere sua token no PagSeguro com este link e ative o link do retorno ao seu site veja na imagem abaixo um exemplo:

 

fK8mlS.png

 

Certo agora crie um arquivo .php com o nome doacao e insira no mesmo os codes abaixo:

OBS: Quem utiliza gesior 2012 bota na pasta pages ou quem utiliza gesior anteriores fica na pasta htdocs ou www.

<?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 .= '<table width="100%" border="0" cellpadding="4" cellspacing="1">
<tbody><tr>
 <td class="white" colspan="3" bgcolor="#505050"><span class="style4">Detalhes da bonificação de Points.</span></td>

</tr>
<tr bgcolor="#f1e0c6"><td width="35%"><b>Doação</b></td><td width="35%"><b>Points</b></td></tr>
<tr bgcolor="#d4c0a1"><td>R$5,00</td><td><img src="layouts/tibiarl/images/content/bullet.gif"> 5 Points</td></tr>

<tr bgcolor="#f1e0c6"><td>R$10,00</td><td><img src="layouts/tibiarl/images/content/bullet.gif"> 10 Points</td></tr>
<tr bgcolor="#d4c0a1"><td>R$20,00</td><td><img src="layouts/tibiarl/images/content/bullet.gif"> 20 Points</td></tr>
<tr bgcolor="#f1e0c6"><td>R$40,00</td><td><img src="layouts/tibiarl/images/content/bullet.gif"> 40 Points</td></tr>
<tr bgcolor="#d4c0a1"><td>R$60,00</td><td><img src="layouts/tibiarl/images/content/bullet.gif"> 60 Points</td></tr>
<tr bgcolor="#f1e0c6"><td><center><img src="layouts/tibiarl/images/content/bullet.gif"> E assim por diante!!! <img src="layouts/tibiarl/images/content/bullet.gif"></center><td><center><img src="layouts/tibiarl/images/content/bullet.gif"> E assim por diante!!! <img src="layouts/tibiarl/images/content/bullet.gif"></center></td></tr>
</tbody></table></br>
';
$main_content .= '
<form target="pagseguro" method="post" action="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_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 DONATAR.</strong></th>
</tr>
<tr bgcolor="#d4c0a1">
<td width="10%">Sua conta</td>
<td><strong>'.$account_logged->getCustomField("name").'</strong></td>
</tr>
<tr bgcolor="#d4c0a1">
<td width="10%">Pontos</td>
<td>
<input type="number" ng-model="get_points" min="1" size="5" maxlength="5">
<input name="item_valor_1" type="hidden" value="{{get_points * 100}}" size="5" maxlength="5">
<input name="item_quant_1" type="hidden" value="1" size="1" maxlength="1">
</td>
</tr>
<tr bgcolor="#d4c0a1">
<td colspan="2">
<input type="image" src="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>
<b><span style="color:#ff0000;">OBS:</span></b> Os pontos são entregues <b>automáticamente</b> logo após a <u>aprovação</u> do seu pagamento pelo PagSeguro, ou seja, pagou e foi aprovado pontos depositados.
<?php } ?>'; } ?>

Agora abra o arquivo config.php e adicione os codes abaixo:

#PAGSEGURO SISTEMA AUTOMATICO
$config['pagseguro']['email'] = '[email protected]<script cf-hash='f9e31' type="text/javascript">
/*  */</script>'; //E-mail da sua conta PagSeguro
$config['pagseguro']['produtoNome'] = 'Premium Points'; //Identificação do Pontos
$config['pagseguro']['produtoValor'] = '100'; //100 = R$ 1,00 - 250 = R$ 2,50

Vamos em layout.php nas primeiras linhas terá a tag abrindo html, exemplo:

<html>

Troque por:

<html ng-app>

Ou se tiver assim:

<html xmlns="http://www.w3.org/1999/xhtml">

Troque por:

<html xmlns="http://www.w3.org/1999/xhtml" ng-app>

Mais abaixo juntos aos codes de JS adicione:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js"></script>

Agora vamos na database e adicione a seguinte tabela:

CREATE TABLE IF NOT EXISTS `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,
        `ProdQuantidade_x` int(5) 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;

Beleza se tiver feito tudo OK naturalmente seu sistema está funcionando perfeitamente.

 

Haaaa, quem quiser que o sistema entregue DOUBLE POINTS vou ensinar abaixo, eu particularmente estou com essa promoção no meu OT....

No arquivo retpagseguro.php procure por:

mysql_query("UPDATE accounts SET premium_points = premium_points + '$NumItens' WHERE name = '".htmlspecialchars($accname)."'");

Troque por:

mysql_query("UPDATE accounts SET premium_points = premium_points + '$NumItens' * 2 WHERE name = '".htmlspecialchars($accname)."'");

Bom a única mudança ai foi a multiplicação dos pontos totais incluindo * 2.

Caso o seu tenha algum erro provavelmente vai ser gerado pelo layout.php se você não encontrar a formula correta então aconselho utilizar gesior 2012.

 

Créditos:

Tatu Hunter

Joffily Ferreira (Ajustar o sistema)

E as demais variadas participações incluindo a minha biggrin.png

 

Link para o comentário
Compartilhar em outros sites

Ótimo, procurei isso funcionando e não encontrei perfeito.

 

Vou testar esse ai.

 

Uma dica, avisa no tópico pro pessoal que for criar USAR A API DE NOTIFICACOES, pois o pagseguro

está descontinuando ela e só aparece, pra quem criar conta hoje no pagseguro, a API nova.

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Estou com um problema, a entrega funciona normal e o preço do produto também mas quando o player compra o produto não importa o valor ele sempre recebe somente 1 Ponto, voce saberia me responder o por que ? Acredito que seja nesse $NumItens , parece que nao esta contando certo, o problema pode ser no pagseguro ? !

Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...

meu site é tepas.servegame.com:8090

 

coloko la e diz erro de URL ...

 

se eu tira o :8090 da certo so que ai axo que não vai da néh pq meu site precisa do :8090

Link para o comentário
Compartilhar em outros sites

Qualquer valor doado esta dando somente 1 ponto, como corrigir?


Troquei o layout do meu sv de <html xmlns="http://www.w3.org/1999/xhtml"> para <html xmlns="http://www.w3.org/1999/xhtml" ng-app> e alguns buttons de "submit" pararam de funcionar. Tipo o Submit do atendimento (helpdesk) e o de add Points....

 

Mesmo problema comigo, os botoes de submit não funciona e qualquer valor doado o PagSeguro entrega somente 1 ponto.

Link para o comentário
Compartilhar em outros sites

  • 4 months later...

database.php?

 

que eu ponho

 

CREATE TABLE IF NOT EXISTS `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,
`ProdQuantidade_x` int(5) 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;

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

To precisando do sistema para esses site de Pokemon.

 

 

Esse funciona em site de PokeMon Sim , porém esse sistema está para Gensior ACC

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...