Ir para conteúdo

Featured Replies

Postado

 

Utilizo o servidor DBO Rox v2 e o Website do DBO War que @ITALOx disponibilizou.

 

Tanto no website do DBO Rox, que veio junto, quanto no Website do DBO War, os arquivos do Pagseguro estão EXATAMENTE iguais. Comparei linha por linha.

Quando testo, faço o donate, o dinheiro chega na minha conta do pagseguro, mas simplesmente os points não chegam na conta do char. E nem aparece registro na pasta "logsPagseguro"

 

No config.php coloquei meu e-mail e meu Token do Pagseguro.

 

O C:/xampp/htdocs/retorno.php é este:

Spoiler

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


?>

 

O C:/xampp/htdocs/retPagseguro.php é este:

Spoiler

<?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&ccedil;&atilde;o do pagamento. Obrigado por ajudar!</p>

</body>

</html>

 

O C:/xampp/htdocs/system/pages/pagseguro.php é este:

Spoiler

<?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>
    
       <center> <td width="25%">Pontos:</td>
        <td>
       </center> <input name="item_quant_1" type="text" value="1" size="5" maxlength="5">
        </td>
        </tr>
    <tr>
    
        <td colspan="2">
            <center><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 target="_blank">ADM Bio</a></p><?php } ?>

 

Agradeço desde já.

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

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 520k

Informação Importante

Confirmação de Termo