Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Crie um arquivo.php na pasta: xammp/htdocs/sytem/pages
com o nome de pagseguro.php
 


<?php

global $config;

require("config.php");

$ots = POT::getInstance();

$ots->connect(POT::DB_MYSQL, connection());

$SQL = $ots->getDBHandle();

$ide = new IDE;

$ide->requireLogin();

if($ide->isLogged()){

$accountName = $_SESSION['name'];

//$SQL->query('SELECT * FROM accounts WHERE name="'.$accountName.'"')->fetch();

?>

<form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">

<input type="hidden" name="email_cobranca" value="<?php echo $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="<?php echo $config['pagseguro']['produtoNome']; ?>">

<input type="hidden" name="item_valor_1" value="<?php echo $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="<?php echo $accountName; ?>">

<table border="0" cellpadding="4" cellspacing="1" width="100%" id="#estilo"><tbody>

<tr>

<th colspan="2">Escolha a quantidade de pontos que deseja comprar:</th>

</tr>

<tr>

<td width="25%">Sua conta:</td>

<td><strong><?php echo $accountName; ?></strong></td>

</tr>

<tr>

<td width="25%">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" name="submit" alt="Pague com PagSeguro - &eacute; r&aacute;pido, gr&aacute;tis e seguro!" />

</td>

</tr>

</tbody></table></form><p style="text-align: right; font-size: 10px">created by <a href="http://otland.net/members/tatu+hunter/" target="_blank">tatu hunter</a></p><?php } ?>

Agora vá em htdocs e abra o arquivo config.php:
la em baixo antes do "?>"
você adiciona:


// Sistema automatico Pagseguro by tatu_hunter

// Seu email cadastrado no pagseguro

$config['pagseguro']['email'] = '[email protected]<script cf-hash='f9e31' type="text/javascript">
/*  */</script>'; [b]-- seu email pagseguro--[/b]

// Nome do Produto

$config['pagseguro']['produtoNome'] = 'Pontos VIP';

// Valor unitario do produto ou seja valor de cada ponto

// Exemplo de valores

// 100 = R$ 1,00

// 235 = R$ 2,35

// 4254 = R$ 42,54

$config['pagseguro']['produtoValor'] = '100';

// Token gerado no painel do pagseguro [b]--token você pega após confirmar que tem mais de 18 anos para receber as donations--[/b]

$config['pagseguro']['token'] = 'EFEB3B4CA8914CB3963C3695A6947965';

Agora crie na pasta htdocs um arquivo chamado retPagseguro.php
e cole:


<?php

// Arquivo de configuracao do Modern AAC

include('config.php');

// Aqui vai seu Token

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

require("system/application/libraries/POT/OTS.php");

$ots = POT::getInstance();

$ots->connect(POT::DB_MYSQL, array('host' => $config['database']['host'], 'user' => $config['database']['login'], 'password' => $config['database']['password'], 'database' => $config['database']['database']));

$SQL = $ots->getDBHandle();

$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">

<head>

<title>Estamos verificando seu pagamento</title>

</head>

<body>

<h1>Pedido em processamento</h1>

<p>Recebemos seu pedido e estamos aguardando pela

confirmação do pagamento. Obrigado por ajudar.</p>

</body>

</html>

Depois ainda na pasta htdocs você cria uma pasta com o nome de logsPagseguro nela ficarão salvos todos os pagamentos completados.
E para que o pagamento apareça nessa pasta você tem que configurar no site do pagseguro a url de retorno:

Logue em sua conta no Pagseguro
Vá em: Preferências -> Retorno automático de dados
Procure 'Ative a URL de retorno', coloque Ativar.
e depois em URL de Retorno coloque a página que va para o retpagseguro.php do seu site:

  http://www.seuservidor.com/retPagseguro.php

 

*Mais abaixo encontrara o botão "GERAR" para criar seu Token usado como encriptação pessoal para o seu sistema.

 

Cria outra página com o nome de Retorno.php

<?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();
}


?>

Tenha certeza de que na sua database tenha a tabela_accounts premium_points se não tiver crie:

Logue no seu phpmyadmin va na sua database "forgottenserver por exemplo" depois vai em SQL e digite :
 


ALTER TABLE `accounts` ADD `premium_points` INT NOT NULL

De executar e pronto.
tongue.png

Creditos:
99,99% Tatu Hunter
0,1% Eu por traduzir e trazer pra cá.
Duvidas só mandar.

Editado por MarcosFraga (veja o histórico de edições)

Donate

 

  • Respostas 31
  • Visualizações 12.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • E comentários como este,deve ser feito por mensagem private.Porque é considerado flood. Agora sobre o tópico muito legal este conteúdo,apesar de já ter um tópico com as mesmas informações. Vai

Posted Images

Postado

E comentários como este,deve ser feito por mensagem private.Porque é considerado flood.

Agora sobre o tópico muito legal este conteúdo,apesar de já ter um tópico com as mesmas informações.

Vai ajudar muitos iniciantes na carreira de otserver.

Editado por GuuhTorres (veja o histórico de edições)

Atenciosamente,

Gustavo H. Torres

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo