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 e ative o seu endereço de retorno para seu site por esse LINK veja na imagem abaixo um exemplo:
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'] = 'seuemail@algumacoisa.com'; //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)