Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Good

[Resolvido] Não retorna nada.

Recommended Posts

Eu peguei uns códigos de retorno, e isso não está retornando nada.

 

olha os códigos:

 

retornoPagamento1.php

<?php
include('modulos/class_mysql.php');
$con = new mysql();

define('TOKEN', 'C6F8263DAB4D497A889B1DFECD9389D9');

class PagSeguroNpi {

	private $timeout = 120; // Timeout em segundos

	public function notificationPost() {
		$postdata = 'Comando=validar&Token='.TOKEN;
		foreach ($_POST as $key => $value) {
			$valued    = $this->clearStr($value);
			$postdata .= "&$key=$valued";
		}
		return $this->verify($postdata);
	}

	private function clearStr($str) {
		if (!get_magic_quotes_gpc()) {
			$str = addslashes($str);
		}
		return $str;
	}

	private function verify($data) {
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml");
		curl_setopt($curl, CURLOPT_POST, true);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		$result = trim(curl_exec($curl));
		curl_close($curl);
		return $result;
	}

}

if (count($_POST) > 0) {

	// POST recebido, indica que é a requisição do NPI.
	$npi = new PagSeguroNpi();
	$result = $npi->notificationPost();

    $VendedorEmail  = $_POST['VendedorEmail'];
    $TransacaoID = $_POST['TransacaoID'];
    $Referencia = $_POST['Referencia'];
    $TipoFrete = $_POST['TipoFrete'];
    $ValorFrete = $_POST['ValorFrete'];
    $Anotacao = $_POST['Anotacao'];
    $DataTransacao = $_POST['DataTransacao'];
    $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 = $_POST['NumItens'];

    $ProdID = $_POST['ProdID_1'];
    $ProdDescricao = $_POST['ProdDescricao_1'];
    $ProdValor = $_POST['ProdValor_1'];
    $ProdQuantidade = $_POST['ProdQuantidade_1'];
    $ProdFrete = $_POST['ProdFrete_1'];
    $ProdExtras = $_POST['ProdExtras_1'];

	if($result == "VERIFICADO") {

       $query = $cn->query("SELECT * FROM vendas WHERE TransacaoID = '".$TransacaoID."'") or die(mysql_error());

       $cn->query("INSERT INTO vendas (us_id,TransacaoID,StatusTransacao,CliEmail,DataTransacao) VALUES ('".$Referencia."','".$TransacaoID."','".$StatusTransacao."','".$CliEmail."','".$DataTransacao."')") or die(mysql_error());
       
    } elseif ($result == "FALSO") {
          $cn->query("INSERT INTO teste_resultado (status,data) VALUES ('O post não foi validado pelo PagSeguro.','".date("H:i:s d/m/Y")."')") or die(mysql_error());
		//O post não foi validado pelo PagSeguro.
	} else {
          $cn->query("INSERT INTO teste_resultado (status,data) VALUES ('Erro na integração com o PagSeguro.','".date("H:i:s d/m/Y")."')") or die(mysql_error());
		//Erro na integração com o PagSeguro.
	}

} else {
    echo "EFETUADO COM SUCESSO!"; } 
?>
Esse de cima eu peguei no site do pagseguro. Eu to colocando pra inserir tudo mesmo, pq isso não cadastra nada no BD, mas eu tenho o código pronto, inserir e depois atualizar os registros.

 

retornoPagamento2.php

<?php
// Aqui vai seu Token
define('TOKEN','C6F8263DAB4D497A889B1DFECD9389D9');

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

  switch (strtolower($StatusTransacao)) {
      case "completo":
          $con->query("UPDATE users SET us_data = now(), us_pago = '1' WHERE us_email = '".$CliEmail."' LIMIT 1");
          return "Pagamento completado";
      break;
      case "aguardando pagto":
          $con->query("INSERT INTO teste_resultado (status,data) VALUES ('".$StatusTransacao."','".date("H:i:s d-m-Y")."')");
          return "Aguardando pagamento";
      break;
      case "aprovado":
          $con->query("INSERT INTO teste_resultado (status,data) VALUES ('".$StatusTransacao."','".date("H:i:s d-m-Y")."')");
          return "Pagamento aprovado, aguardando compensação";
      break;
      case "em análise":
          $con->query("INSERT INTO teste_resultado (status,data) VALUES ('".$StatusTransacao."','".date("H:i:s d-m-Y")."')");
          return "Pagamento aprovado, em análise.";
      break;
      case "cancelado":
          $con->query("INSERT INTO teste_resultado (status,data) VALUES ('".$StatusTransacao."','".date("H:i:s d-m-Y")."')");
          return "Pagamento cancelado";
      break;
      default:
          $con->query("INSERT INTO teste_resultado (status,data) VALUES ('".$StatusTransacao."','".date("H:i:s d-m-Y")."')");
      break;
  }

}
?>
Compra efetuada com sucesso!
Esse de cima funcionava, e agora não funciona mais!

 

 

Isso de baixo é uma função, que está sendo incluida no arquivo de cima.

retorno.php

<?php

if (!defined('TOKEN')) define ('TOKEN', 'C6F8263DAB4D497A889B1DFECD9389D9');

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae pessoal, por favor me ajudem não sei mais o que faço, já tentei de tudo mais deve ter alguma coisa de errado, analizem comigo e me dizem o que tenho que mudar:

 

erro apresentado: AO ENTRAR NO PAGSEGURO FUNCIONA TUDO QUE É UMA PERFEIÇÃO, NOME, ATRIBUTOS, FRETE, E TUDO MAIS É CONSTADO, MAS AO RETORNAR A PÁGINA DÁ ISSO, ABAIXO, JÁ COLOQUEI PEMISSÃO 777 E ASSIM NADA...

 

Internal Server Error

 

The server encountered an internal error or misconfiguration and was unable to complete your request.

 

Please contact the server administrator, webmaster@host.meusite.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

 

More information about this error may be available in the server error log.

 

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 Server at meusite.com Port 80

 

COGIDO DE RETORNO USADO, JA USEI VÁRIOS MAIS NENHUM DEU CERTO,:

 

<?
##############################################################
#                         CONFIGURAÇÕES
##############################################################

$retorno_site = 'http://www.meusite.com/checkout_success.php';  // Site para onde o usuário vai ser redirecionado
$retorno_token = 'E7C18A227144448EACA88885AD207D98'; // Token gerado pelo PagSeguro

$retorno_host = 'localhost'; // Local da base de dados MySql
$retorno_database = 'meusite_database'; // Nome da base de dados MySql
$retorno_usuario = 'meusite_usuario'; // Usuario com acesso a base de dados MySql
$retorno_senha = '123456';  // Senha de acesso a base de dados MySql


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

$lnk = mysql_connect($retorno_host, $retorno_usuario, $retorno_senha) or die ('Nao foi possível conectar ao MySql: ' . mysql_error());
mysql_select_db($retorno_database, $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 = $_POST['NumItens'];
$ProdID = $_POST['ProdID'];
$ProdDescricao = $_POST['ProdDescricao'];
$ProdValor = $_POST['ProdValor'];
$ProdQuantidade = $_POST['ProdQuantidade'];
$ProdFrete = $_POST['ProdFrete'];
$ProdExtras = $_POST['ProdExtras'];
$status = $_POST['status'];
$datahora = $_POST['datahora'];
$hora = $_POST['hora'];
$Data = $_POST['Data'];

// Gravando Dados
mysql_query("INSERT into PagSeguroTransacoes SET
TransacaoID='$TransacaoID',	
VendedorEmail='$VendedorEmail',	
Referencia='$Referencia',	
TipoFrete='$TipoFrete',	
ValorFrete='$ValorFrete',	
Extras='$Extras',	
Anotacao='$Anotacao',	
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',	
ProdID='$ProdID',
   ProdDescricao='$ProdDescricao',
   ProdValor='$ProdValor',
   ProdQuantidade='$ProdQuantidade',
   ProdFrete='$ProdFrete',
   ProdExtras='$ProdExtras',
   status='$status',
   datahora='$datahora',
hora='$hora'
Data=now();");

}

Header("Location: $retorno_site"); exit();
?>

 

BANCO DE DADOS CRIADO

 

-- Estrutura da tabela `PagSeguroTransacoes`

--

 

CREATE TABLE IF NOT EXISTS `PagSeguroTransacoes` (

`TransacaoID` varchar(36) collate latin1_general_ci NOT NULL,

`VendedorEmail` varchar(200) collate latin1_general_ci NOT NULL,

`Referencia` varchar(200) collate latin1_general_ci default NULL,

`TipoFrete` char(2) collate latin1_general_ci default NULL,

`ValorFrete` decimal(10,2) default NULL,

`Extras` decimal(10,2) default NULL,

`Anotacao` text collate latin1_general_ci,

`DataTransacao` datetime NOT NULL,

`TipoPagamento` varchar(50) collate latin1_general_ci NOT NULL,

`StatusTransacao` varchar(50) collate latin1_general_ci NOT NULL,

`CliNome` varchar(200) collate latin1_general_ci NOT NULL,

`CliEmail` varchar(200) collate latin1_general_ci NOT NULL,

`CliEndereco` varchar(200) collate latin1_general_ci NOT NULL,

`CliNumero` varchar(10) collate latin1_general_ci default NULL,

`CliComplemento` varchar(100) collate latin1_general_ci default NULL,

`CliBairro` varchar(100) collate latin1_general_ci NOT NULL,

`CliCidade` varchar(100) collate latin1_general_ci NOT NULL,

`CliEstado` char(2) collate latin1_general_ci NOT NULL,

`CliCEP` varchar(9) collate latin1_general_ci NOT NULL,

`CliTelefone` varchar(14) collate latin1_general_ci default NULL,

`NumItens` int(11) NOT NULL,

`ProdID` text collate latin1_general_ci,

`ProdDescricao` text collate latin1_general_ci,

`ProdValor` text collate latin1_general_ci,

`ProdQuantidade` text collate latin1_general_ci,

`ProdFrete` text collate latin1_general_ci,

`ProdExtras` text collate latin1_general_ci,

`status` text collate latin1_general_ci NOT NULL,

`ip` text collate latin1_general_ci NOT NULL,

`datahora` datetime NOT NULL default '0000-00-00 00:00:00',

`data` date NOT NULL default '0000-00-00',

`hora` time NOT NULL default '00:00:00',

PRIMARY KEY (`TransacaoID`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

--

-- Extraindo dados da tabela `PagSeguroTransacoes`

--

 

CODIGO DE PAGAMENTO USADO E FUNCIONANDO PERFEITAMENTE

 

<?php
/*******************************************************************************************************
* Atualiza��o:
* 1. DESINSTALE o m�dulo anterior da loja (na administra��o);
* 2. sobrescreva os arquivos referentes ao m�dulo, via ftp;
* 3. reinstale o m�dulo novo;
* 4. crie um novo status de pedido para pagamentos aprovados;
* 5. reconfigure o m�dulo como descrito nas instru��es de instala��o, tomando o cuidado de alterar o campo de "Pedidos aprovados" de acordo com sua configura��o.
*
* Em caso de d�vidas, visite forum em www.omeunuke.com E HOSPEDAGEM no www.unipronet.com
*
********************************************************************************************************/

class pagseguro {
	var $code, $title, $description, $enabled;


	// class constructor
	function pagseguro() {
		global $order;
		$this->code = 'pagseguro';
		$this->title = MODULE_PAYMENT_PAGSEGURO_TEXT_TITLE;
		$this->description = MODULE_PAYMENT_PAGSEGURO_TEXT_DESCRIPTION;
		$this->sort_order = MODULE_PAYMENT_PAGSEGURO_SORT_ORDER;
		$this->enabled = ((MODULE_PAYMENT_PAGSEGURO_STATUS == 'True') ? true : false);
		if ((int)MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID > 0) {
			$this->order_status = MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID;
		}
		if (is_object($order)) $this->update_status();
		// URL for transaction. In this case, the parameters are sent to a CGI, so the URL is checkout_process.php
		// If the parameters were to be sent as POST variables, the URL would be different. See paypal_ipn contribution for an example.
		// Claudio Mar, 18th, 2006
//				$this->form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL', true);
			$this->form_action_url = "https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx";
	}


	// class methods
	function update_status() {
		global $order;
		if (($this->enabled == true) && ((int)MODULE_PAYMENT_PAGSEGURO_ZONE > 0)) {
			$check_flag = false;
			$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAGSEGURO_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
			while ($check = tep_db_fetch_array($check_query)) {
				if ($check['zone_id'] < 1) {
					$check_flag = true;
					break;
				} elseif ($check['zone_id'] == $order->billing['zone_id']) {
					$check_flag = true;
					break;
				}
			}
			if ($check_flag == false) {
				$this->enabled = false;
			}
		}
	}


	function javascript_validation() {
		return true;
	}


	/*******************************************************************************
	* function to handle options before exchanging data with the payment gateway
	* Payment information screen
	* ******************************************************************************/
	function selection() {
		global $order;
		$shipping_cost = $order->info['shipping_cost'];
		$pagseguro_image = "https://pagseguro.uol.com.br/Security/Imagens/".(MODULE_PAYMENT_PAGSEGURO_CREDIT_CARD=='True'?"btnWebprefC.gif":"btnWebpref.gif");
		$fields = array();
		$fields[] = array('title' => 'Pagamento via PagSeguro',
					'text' => "Finalize seu pagamento no site seguro do PagSeguro, e proteja-se de fraudes.");
		$fields[] = array('title' => 'Modos de pagamento aceitos:',
					'text' => '');
		$fields[] = array('title' => '<img src="'.$pagseguro_image.'">',
					'text' => '');
		if (MODULE_PAYMENT_PAGSEGURO_SHIPPING=="True") { // C�lculo do frete pelo PagSeguro habilitado
			$tipoFretes = array (array('id' => 'EN',
								'text' => 'PAC'),
								array('id' => 'SD',
								'text' => 'Sedex'));
			$fields[] = array('title' => '    Tipo de frete',
						'field' => tep_draw_pull_down_menu('TipoFrete', $tipoFretes));
			$fields[] = array('title' => "  C�lculo de frete pelo PagSeguro",
						'field' => tep_draw_hidden_field("calcfrete", "PAGSEGURO", true));
		} else {
			if ($shipping_cost>0) { // desativado enquanto n�o aceita escolha caso a caso.
				$fields[] = array('title' => MODULE_PAYMENT_PAGSEGURO_TEXT_SHIPPING_STORE,
							'field' => tep_draw_hidden_field("calcfrete", "LOJA", true));
			}
		}
		$selection = array('id' => $this->code,
				'module' => $this->title,
				'fields' => $fields);
		return $selection;
	}


	/*************************************************************
	* Checks the data in the Payment selection screen
	* Validate data from this->selection() function
	* if data is incorrect, return to checkout payment screen
	* and prompt user for the incorrect data.
	* ************************************************************/
	function pre_confirmation_check() {
		return false;
	}


	/******************************************
	* Function in the order confirmation screen
	* *****************************************/
	function confirmation() {
		global $HTTP_POST_VARS, $cartID, $cart_pagseguro_ID, $customer_id, $languages_id, $order, $order_total_modules, $insert_id;
		$confirmation = array('title' => $this->title . ': ',
						'fields' => array(array('title' => MODULE_PAYMENT_PAGSEGURO_TEXT_OUTSIDE,
						'field' => "")));
		if (tep_session_is_registered('cartID')) {
			$insert_order = false;
			if (tep_session_is_registered('cart_pagseguro_ID')) {
				$order_id = substr($cart_pagseguro_ID, strpos($cart_pagseguro_ID, '-')+1);
				$curr_check = tep_db_query("select currency from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
				$curr = tep_db_fetch_array($curr_check);
				if (($curr['currency'] != $order->info['currency']) || ($cartID != substr($cart_pagseguro_ID, 0, strlen($cartID)))) {
					$check_query = tep_db_query('select orders_id from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '" limit 1');
					if (tep_db_num_rows($check_query) < 1) {
						tep_db_query('delete from ' . TABLE_ORDERS . ' where orders_id = "' . (int)$order_id . '"');
						tep_db_query('delete from ' . TABLE_ORDERS_TOTAL . ' where orders_id = "' . (int)$order_id . '"');
						tep_db_query('delete from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '"');
						tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS . ' where orders_id = "' . (int)$order_id . '"');
						tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' where orders_id = "' . (int)$order_id . '"');
						tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_DOWNLOAD . ' where orders_id = "' . (int)$order_id . '"');
					}
					$insert_order = true;
				}
			} else {
				$insert_order = true;
			}
			if ($insert_order == true) {
				$order_totals = array();
				if (is_array($order_total_modules->modules)) {
					reset($order_total_modules->modules);
					while (list(, $value) = each($order_total_modules->modules)) {
						$class = substr($value, 0, strrpos($value, '.'));
						if ($GLOBALS[$class]->enabled) {
							for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) {
							if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) {
								$order_totals[] = array('code' => $GLOBALS[$class]->code,
													'title' => $GLOBALS[$class]->output[$i]['title'],
													'text' => $GLOBALS[$class]->output[$i]['text'],
													'value' => $GLOBALS[$class]->output[$i]['value'],
													'sort_order' => $GLOBALS[$class]->sort_order);
							}
						}
					}
				}
			}
			$sql_data_array = array('customers_id' => $customer_id,
							'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'],
							'customers_company' => $order->customer['company'],
							'customers_street_address' => $order->customer['street_address'],
							'customers_suburb' => $order->customer['suburb'],
//								'customers_cpf' => $order->customer['cpf'],
//								'customers_rg' => $order->customer['rg'],
							'customers_city' => $order->customer['city'],
							'customers_postcode' => $order->customer['postcode'],
							'customers_state' => $order->customer['state'],
							'customers_country' => $order->customer['country']['title'],
							'customers_telephone' => $order->customer['telephone'],
							'customers_email_address' => $order->customer['email_address'],
							'customers_address_format_id' => $order->customer['format_id'],
							'delivery_name' => $order->delivery['firstname'] . ' ' . $order->delivery['lastname'],
							'delivery_company' => $order->delivery['company'],
							'delivery_street_address' => $order->delivery['street_address'],
							'delivery_suburb' => $order->delivery['suburb'],
//								'delivery_cpf' => $order->delivery['cpf'],
//								'delivery_rg' => $order->delivery['rg'],
							'delivery_city' => $order->delivery['city'],
							'delivery_postcode' => $order->delivery['postcode'],
								'delivery_state' => $order->delivery['state'],
							'delivery_country' => $order->delivery['country']['title'],
							'delivery_address_format_id' => $order->delivery['format_id'],
							'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'],
							'billing_company' => $order->billing['company'],
							'billing_street_address' => $order->billing['street_address'],
							'billing_suburb' => $order->billing['suburb'],
//								'billing_cpf' => $order->billing['cpf'],
//								'billing_rg' => $order->billing['rg'],
							'billing_city' => $order->billing['city'],
							'billing_postcode' => $order->billing['postcode'],
							'billing_state' => $order->billing['state'],
							'billing_country' => $order->billing['country']['title'],
							'billing_address_format_id' => $order->billing['format_id'],
							'payment_method' => $order->info['payment_method'],
							'cc_type' => $order->info['cc_type'],
							'cc_owner' => $order->info['cc_owner'],
							'cc_number' => $order->info['cc_number'],
							'cc_expires' => $order->info['cc_expires'],
							'date_purchased' => 'now()',
							'orders_status' => $order->info['order_status'],
							'currency' => $order->info['currency'],
							'currency_value' => $order->info['currency_value']);
			tep_db_perform(TABLE_ORDERS, $sql_data_array);
			$insert_id = tep_db_insert_id();
			for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
				$sql_data_array = array('orders_id' => $insert_id,
										'title' => $order_totals[$i]['title'],
										'text' => $order_totals[$i]['text'],
										'value' => $order_totals[$i]['value'],
										'class' => $order_totals[$i]['code'],
										'sort_order' => $order_totals[$i]['sort_order']);
				tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
			}
			$cart_pagseguro_ID = $cartID . '-' . $insert_id;
			tep_session_register('cart_pagseguro_ID');
		}
	}
	return $confirmation;
}


function get_uf() {
	global $order;
	$res = tep_db_fetch_array($qry=tep_db_query('select countries_id from '.TABLE_COUNTRIES.' where countries_name="Brazil" or countries_name="Brasil"'));
	$br_id = $res['countries_id']; // c�digo do Brasil. em caso da loja ter usado outro c�digo interno.
	$res = tep_db_fetch_array($qry=tep_db_query('select zone_code from '.TABLE_ZONES.' where zone_country_id="'.$br_id.'" and zone_name="'.$order->delivery['state'].'"'));
	return $res['zone_code'];
}


function process_button() {
	global $HTTP_POST_VARS, $order, $cart, $currencies, $cartID, $cart_pagseguro_ID, $insert_id, $customer_id;
	$currency = MODULE_PAYMENT_PAGSEGURO_CURRENCY; // Somente reais
	// removes non numeric characters from the telephone field, and trims to 8 chars long.
	$cust_telephone = eregi_replace ("[^0-9]", "", $order->customer['telephone']);
	$cust_telephone2 = eregi_replace ("[^0-9]", "", $order->customer['telephone']);
	$st = strlen($cust_telephone)-8;
	if ($st>0) { // in case this string is longer than 8 characters (PagSeguro's settings)
		$cust_telephone = substr($cust_telephone, $st, 8);
		$cust_ddd = substr($cust_telephone2, 0, 2);
		$cust_num = "s/n";
		$cust_compl = " ";
	}
	$UF = $this->get_uf();
	$CEP = substr(eregi_replace ("[^0-9]", "", $order->customer['postcode']).'00000000',0,8);
	$insert_id = substr($cart_pagseguro_ID, strpos($cart_pagseguro_ID, '-')+1);
	$process_button_string = tep_draw_hidden_field('email_cobranca', MODULE_PAYMENT_PAGSEGURO_EMAIL) . "\n" .// email de cobran�a, definido no admin
						tep_draw_hidden_field('tipo', 'CP') . "\n" . // Carrinho pr�rio
						tep_draw_hidden_field('moeda', 'BRL') . "\n" . // Somente Reais
						tep_draw_hidden_field('cliente_nome', $order->customer['firstname']. " " . $order->customer['lastname']) . "\n" .
						tep_draw_hidden_field('cliente_cep', $CEP) . "\n" .
						tep_draw_hidden_field('cliente_end', $order->delivery['street_address']) . "\n" .
						tep_draw_hidden_field('cliente_bairro', $order->delivery['suburb']) . "\n" .
						tep_draw_hidden_field('cliente_cidade', $order->delivery['city']) . "\n" .
						tep_draw_hidden_field('cliente_uf', $UF) . "\n" .
						tep_draw_hidden_field('cliente_pais', 'BRA') . "\n" .
						tep_draw_hidden_field('cliente_ddd', $cust_ddd) . "\n" .
						tep_draw_hidden_field('cliente_tel', $cust_telephone) . "\n" .
						tep_draw_hidden_field('cliente_num', $cust_num) . "\n" .
						tep_draw_hidden_field('cliente_compl', $cust_compl) . "\n" .
						tep_draw_hidden_field('cliente_email', $order->customer['email_address'])."\n";
	$order_subtotal = 0; // calcula o somat�rio dos valores dos produtos
	for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
		$process_button_string .= tep_draw_hidden_field('item_id_'.($i+1), $order->products[$i]['id']) . "\n" .
							tep_draw_hidden_field('item_descr_'.($i+1), $order->products[$i]['name'].(strlen($order->products[$i]['model'])>0?'['.$order->products[$i]['model'].']':'')) ."\n" .
							tep_draw_hidden_field('item_quant_'.($i+1), $order->products[$i]['qty']) ."\n" .
							tep_draw_hidden_field('item_valor_'.($i+1), round(($order->products[$i]['final_price'] + ($order->products[$i]['final_price']*($order->products[$i]['tax']/100)))* $currencies->get_value($currency)*100))."\n";
		$order_subtotal += $order->products[$i]['qty'] * round(($order->products[$i]['final_price'] + ($order->products[$i]['final_price']*($order->products[$i]['tax']/100)))* $currencies->get_value($currency)*100);
		if (MODULE_PAYMENT_PAGSEGURO_SHIPPING=='True') {
			$process_button_string .= tep_draw_hidden_field('item_peso_'.($i+1), (int)($order->products[$i]['weight']*(MODULE_PAYMENT_PAGSEGURO_WEIGHT=='Kg'?1000:1))) . "\n";
		}
	}
	// campo para informar os descontos / acr�scimos extras do pedido
	$retificacao = ($order->info['total'] - $order->info['shipping_cost']) * $currencies->get_value($currency) * 100 - $order_subtotal ;
	if ((int)$retificacao!=0) {
		$process_button_string .= tep_draw_hidden_field('extras', floor($retificacao))."\n";
	}
	if (MODULE_PAYMENT_PAGSEGURO_SHIPPING=='True') {
		$process_button_string .= "\n".tep_draw_hidden_field('tipo_frete', $_POST['TipoFrete']) ."\n"; // EN: PAC; SD: Sedex
	} else {
		$process_button_string .= "\n".tep_draw_hidden_field('item_frete_1', round($order->info['shipping_cost']* $currencies->get_value($currency)*100)) ."\n";
	}
	$process_button_string .= tep_draw_hidden_field('ref_transacao', 'Pedido: '.$insert_id.' - Cliente: '.$customer_id);
	$this->debug_var($process_button_string, 'process: '.date("Y-m-d G:i:s"), true);
	if (tep_session_is_registered('INSERT_ID')) {
		tep_session_unregister('INSERT_ID');
	}
	$INSERT_ID = $insert_id;
	$_SESSION['INSERT_ID']= $insert_id;
	tep_session_register('INSERT_ID');
	return $process_button_string;
}


function before_process() {
// chamado pelo checkout_process.php depois que a transa��o foi finalizada
	global $HTTP_POST_VARS, $HTTP_GET_VARS, $cartID, $cart_pagseguro_ID, $customer_id, $languages_id, $order_total_modules, $order, $cart, $sendto, $billto, $currencies, $insert_id;
	if (isset($_SESSION['cart_pagseguro_ID'])) {
		$tmp = explode('-', $_SESSION['cart_pagseguro_ID']);
		$insert_id = $tmp[1];
	} else {
		$insert_id = $INSERT_ID;
	}
	$qry = tep_db_query ("select * from temp_pagseguro where referencia like 'PEDIDO: $insert_id - CLIENTE: %'");
	$order_array = tep_db_fetch_array($qry);
	$status = trim($order_array['statustransacao']);
	$ids = explode('-',$order_array['referencia']);
	$tmp = explode(':',$ids[0]);
	$this->debug_var ($order_array, "Pedido(recuperado do bd): ".date("Y-m-d G:i:s"),true);
	$this->debug_var ($status, "Status de pagamento: ".date("Y-m-d G:i:s"),true);
	$customer = explode(':',$ids[1]);
	$customer_id = trim($customer[1]);
	switch($status) {
		case 'Completo':
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
		return false;
		break;

		case 'Aprovado':
		$order->info['order_status'] = MODULE_PAYMENT_PAGSEGURO_APPROVED_ORDER_STATUS_ID;
		$this->debug_var ($order->info['order_status'], "pagamento aprovado: ".date("Y-m-d G:i:s"),true);
		$order_id = $insert_id;
		$sql_data_array = array('orders_id' => $order_id,
						'orders_status_id' => $order->info['order_status'],
						'date_added' => 'now()',
						'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',
						'comments' => $order->info['comments']);
		tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
		return false;
		break;

		case 'Aguardando Pagto':
		$this->debug_var ($order->info['order_status'].' - '.$status, "status do pagto: ".date("Y-m-d G:i:s"),true);
		$order->info['comments'] = "Coment�rios: ". $order->info['comments'].
                                                                       "\nID de Transa��o: ". $order_array['transacaoid'].
								"\nAnota��o: ". $order_array['anotacao'].
								"\nTipo do Pagamento: ". $order_array['tipopagamento'].
								"\nStatus: ". $status.' - '.$order->info['order_status'];
		include(DIR_WS_CLASSES . 'order_total.php');
		$order_total_modules = new order_total;
		$order_totals = $order_total_modules->process();
		$order_id = $insert_id;
		$sql_data_array = array('orders_id' => $order_id,
						'orders_status_id' => $order->info['order_status'],
						'date_added' => 'now()',
						'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',
						'comments' => $order->info['comments']);
		tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
		// update orders table
		$sql_data_array = array('orders_status' => $order->info['order_status']);
		tep_db_perform(TABLE_ORDERS, $sql_data_array, 'update', "orders_id = '" . (int)$order_id . "'");
		// initialized for the email confirmation
		$products_ordered = '';
		$subtotal = 0;
		$total_tax = 0;
		for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
			// Stock Update - Joao Correia
			if (STOCK_LIMITED == 'true') {
				if (DOWNLOAD_ENABLED == 'true') {
					$stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename 
									FROM " . TABLE_PRODUCTS . " p
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa
									ON p.products_id=pa.products_id
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
									ON pa.products_attributes_id=pad.products_attributes_id
									WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'";
					// Will work with only one option for downloadable products
					// otherwise, we have to build the query dynamically with a loop
					$products_attributes = $order->products[$i]['attributes'];
					if (is_array($products_attributes)) {
						$stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
					}
					$stock_query = tep_db_query($stock_query_raw);
				} else {
					$stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
				}
				if (tep_db_num_rows($stock_query) > 0) {
					$stock_values = tep_db_fetch_array($stock_query);
					// do not decrement quantities if products_attributes_filename exists
					if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
						$stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];
					} else {
						$stock_left = $stock_values['products_quantity'];
					}
					tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
					// comment to not modify product status (to "out of stock" work")
//						if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
//							tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
//						}
				}
			}
			// Update products_ordered (for bestsellers list)
			tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

			$sql_data_array = array('orders_id' => $insert_id, 
							'products_id' => tep_get_prid($order->products[$i]['id']), 
							'products_model' => $order->products[$i]['model'], 
							'products_name' => $order->products[$i]['name'], 
							'products_price' => $order->products[$i]['price'], 
							'final_price' => $order->products[$i]['final_price'], 
							'products_tax' => $order->products[$i]['tax'], 
							'products_quantity' => $order->products[$i]['qty']);
			tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
			$order_products_id = tep_db_insert_id();

			//------insert customer choosen option to order--------
			$attributes_exist = '0';
			$products_ordered_attributes = '';
			if (isset($order->products[$i]['attributes'])) {
				$attributes_exist = '1';
				for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
					if (DOWNLOAD_ENABLED == 'true') {
						$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename 
										from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa 
										left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
										on pa.products_attributes_id=pad.products_attributes_id
										where pa.products_id = '" . $order->products[$i]['id'] . "' 
										and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' 
										and pa.options_id = popt.products_options_id 
										and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' 
										and pa.options_values_id = poval.products_options_values_id 
										and popt.language_id = '" . $languages_id . "' 
										and poval.language_id = '" . $languages_id . "'";
						$attributes = tep_db_query($attributes_query);
					} else {
						$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
					}
					$attributes_values = tep_db_fetch_array($attributes);

					$sql_data_array = array('orders_id' => $insert_id, 
										'orders_products_id' => $order_products_id, 
										'products_options' => $attributes_values['products_options_name'],
										'products_options_values' => $attributes_values['products_options_values_name'], 
										'options_values_price' => $attributes_values['options_values_price'], 
										'price_prefix' => $attributes_values['price_prefix']);
					tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

					if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
						$sql_data_array = array('orders_id' => $insert_id, 
											'orders_products_id' => $order_products_id, 
											'orders_products_filename' => $attributes_values['products_attributes_filename'], 
											'download_maxdays' => $attributes_values['products_attributes_maxdays'], 
											'download_count' => $attributes_values['products_attributes_maxcount']);
						tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
					}
					$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
				}
			}
			//------insert customer choosen option eof ----
			$total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
			$total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
			$total_cost += $total_products_price;

			$products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
		}

		// lets start with the email confirmation
		$email_order = STORE_NAME . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
					EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
					EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
		if ($order->info['comments']) {
			$email_order .= tep_db_output($order->info['comments']) . "\n\n";
		}
		$email_order .= EMAIL_TEXT_PRODUCTS . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					$products_ordered . 
					EMAIL_SEPARATOR . "\n";

		for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
			$email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
		}

		if ($order->content_type != 'virtual') {
			$email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . 
			EMAIL_SEPARATOR . "\n" .
				tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
		}
		$email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
		EMAIL_SEPARATOR . "\n" .
		tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
		$email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
						EMAIL_SEPARATOR . "\n".
						"PagSeguro - pagamentos\n\n";
		tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		// send emails to other people
		if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
			tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		}
		// load the after_process function from the payment modules
		$this->after_process();
		$cart->reset(true);
		// unregister session variables used during checkout
		tep_session_unregister('sendto');
		tep_session_unregister('billto');
		tep_session_unregister('shipping');
		tep_session_unregister('payment');
		tep_session_unregister('comments');
		tep_session_unregister('cart_pagseguro_ID');
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
		return false;
		break;

		case 'Em An�lise':
		$this->debug_var ($order->info['order_status'].' - '.$status, "status do pagto: ".date("Y-m-d G:i:s"),true);
		$order->info['comments'] = "Coment�rios: ". $order->info['comments'].
                                                                       "\nID de Transa��o: ". $order_array['transacaoid'].
								"\nAnota��o: ". $order_array['anotacao'].
								"\nTipo do Pagamento: ". $order_array['tipopagamento'].
								"\nStatus: ". $status.' - '.$order->info['order_status'];
		include(DIR_WS_CLASSES . 'order_total.php');
		$order_total_modules = new order_total;
		$order_totals = $order_total_modules->process();
		$order_id = $insert_id;
		$sql_data_array = array('orders_id' => $order_id,
						'orders_status_id' => $order->info['order_status'],
						'date_added' => 'now()',
						'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',
						'comments' => $order->info['comments']);
		tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
		// update orders table
		$sql_data_array = array('orders_status' => $order->info['order_status']);
		tep_db_perform(TABLE_ORDERS, $sql_data_array, 'update', "orders_id = '" . (int)$order_id . "'");
		// initialized for the email confirmation
		$products_ordered = '';
		$subtotal = 0;
		$total_tax = 0;
		for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
			// Stock Update - Joao Correia
			if (STOCK_LIMITED == 'true') {
				if (DOWNLOAD_ENABLED == 'true') {
					$stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename 
									FROM " . TABLE_PRODUCTS . " p
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa
									ON p.products_id=pa.products_id
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
									ON pa.products_attributes_id=pad.products_attributes_id
									WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'";
					// Will work with only one option for downloadable products
					// otherwise, we have to build the query dynamically with a loop
					$products_attributes = $order->products[$i]['attributes'];
					if (is_array($products_attributes)) {
						$stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
					}
					$stock_query = tep_db_query($stock_query_raw);
				} else {
					$stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
				}
				if (tep_db_num_rows($stock_query) > 0) {
					$stock_values = tep_db_fetch_array($stock_query);
					// do not decrement quantities if products_attributes_filename exists
					if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
						$stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];
					} else {
						$stock_left = $stock_values['products_quantity'];
					}
					tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
					// comment to not modify product status (to "out of stock" work")
//						if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
//							tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
//						}
				}
			}
			// Update products_ordered (for bestsellers list)
			tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

			$sql_data_array = array('orders_id' => $insert_id, 
							'products_id' => tep_get_prid($order->products[$i]['id']), 
							'products_model' => $order->products[$i]['model'], 
							'products_name' => $order->products[$i]['name'], 
							'products_price' => $order->products[$i]['price'], 
							'final_price' => $order->products[$i]['final_price'], 
							'products_tax' => $order->products[$i]['tax'], 
							'products_quantity' => $order->products[$i]['qty']);
			tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
			$order_products_id = tep_db_insert_id();

			//------insert customer choosen option to order--------
			$attributes_exist = '0';
			$products_ordered_attributes = '';
			if (isset($order->products[$i]['attributes'])) {
				$attributes_exist = '1';
				for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
					if (DOWNLOAD_ENABLED == 'true') {
						$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename 
										from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa 
										left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
										on pa.products_attributes_id=pad.products_attributes_id
										where pa.products_id = '" . $order->products[$i]['id'] . "' 
										and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' 
										and pa.options_id = popt.products_options_id 
										and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' 
										and pa.options_values_id = poval.products_options_values_id 
										and popt.language_id = '" . $languages_id . "' 
										and poval.language_id = '" . $languages_id . "'";
						$attributes = tep_db_query($attributes_query);
					} else {
						$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
					}
					$attributes_values = tep_db_fetch_array($attributes);

					$sql_data_array = array('orders_id' => $insert_id, 
										'orders_products_id' => $order_products_id, 
										'products_options' => $attributes_values['products_options_name'],
										'products_options_values' => $attributes_values['products_options_values_name'], 
										'options_values_price' => $attributes_values['options_values_price'], 
										'price_prefix' => $attributes_values['price_prefix']);
					tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

					if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
						$sql_data_array = array('orders_id' => $insert_id, 
											'orders_products_id' => $order_products_id, 
											'orders_products_filename' => $attributes_values['products_attributes_filename'], 
											'download_maxdays' => $attributes_values['products_attributes_maxdays'], 
											'download_count' => $attributes_values['products_attributes_maxcount']);
						tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
					}
					$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
				}
			}
			//------insert customer choosen option eof ----
			$total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
			$total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
			$total_cost += $total_products_price;

			$products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
		}

		// lets start with the email confirmation
		$email_order = STORE_NAME . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
					EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
					EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
		if ($order->info['comments']) {
			$email_order .= tep_db_output($order->info['comments']) . "\n\n";
		}
		$email_order .= EMAIL_TEXT_PRODUCTS . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					$products_ordered . 
					EMAIL_SEPARATOR . "\n";

		for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
			$email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
		}

		if ($order->content_type != 'virtual') {
			$email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . 
			EMAIL_SEPARATOR . "\n" .
				tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
		}
		$email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
		EMAIL_SEPARATOR . "\n" .
		tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
		$email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
						EMAIL_SEPARATOR . "\n".
						"PagSeguro - pagamentos\n\n";
		tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		// send emails to other people
		if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
			tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		}
		// load the after_process function from the payment modules
		$this->after_process();
		$cart->reset(true);
		// unregister session variables used during checkout
		tep_session_unregister('sendto');
		tep_session_unregister('billto');
		tep_session_unregister('shipping');
		tep_session_unregister('payment');
		tep_session_unregister('comments');
		tep_session_unregister('cart_pagseguro_ID');
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
		return false;
		break;

		default:
		$this->debug_var ('Verificar Status', "status do pagto: ".date("Y-m-d G:i:s"),true);
		$order->info['comments'] = "Coment�rios: ". $order->info['comments'].
                                                                       "\nID de Transa��o: NA
								\nAnota��o: ". $order_array['anotacao'].
								"\nTipo do Pagamento: ". $order_array['tipopagamento'].
								"\nStatus: Verificar Status";
		include(DIR_WS_CLASSES . 'order_total.php');
		$order_total_modules = new order_total;
		$order_totals = $order_total_modules->process();
		$order_id = $insert_id;
		$sql_data_array = array('orders_id' => $order_id,
						'orders_status_id' => $order->info['order_status'],
						'date_added' => 'now()',
						'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',
						'comments' => $order->info['comments']);
		tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
		// update orders table
		$sql_data_array = array('orders_status' => $order->info['order_status']);
		tep_db_perform(TABLE_ORDERS, $sql_data_array, 'update', "orders_id = '" . (int)$order_id . "'");
		// initialized for the email confirmation
		$products_ordered = '';
		$subtotal = 0;
		$total_tax = 0;
		for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
			// Stock Update - Joao Correia
			if (STOCK_LIMITED == 'true') {
				if (DOWNLOAD_ENABLED == 'true') {
					$stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename 
									FROM " . TABLE_PRODUCTS . " p
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa
									ON p.products_id=pa.products_id
									LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
									ON pa.products_attributes_id=pad.products_attributes_id
									WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'";
					// Will work with only one option for downloadable products
					// otherwise, we have to build the query dynamically with a loop
					$products_attributes = $order->products[$i]['attributes'];
					if (is_array($products_attributes)) {
						$stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
					}
					$stock_query = tep_db_query($stock_query_raw);
				} else {
					$stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
				}
				if (tep_db_num_rows($stock_query) > 0) {
					$stock_values = tep_db_fetch_array($stock_query);
					// do not decrement quantities if products_attributes_filename exists
					if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
						$stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];
					} else {
						$stock_left = $stock_values['products_quantity'];
					}
					tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
					// comment to not modify product status (to "out of stock" work")
//						if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
//							tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
//						}
				}
			}
			// Update products_ordered (for bestsellers list)
			tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

			$sql_data_array = array('orders_id' => $insert_id, 
							'products_id' => tep_get_prid($order->products[$i]['id']), 
							'products_model' => $order->products[$i]['model'], 
							'products_name' => $order->products[$i]['name'], 
							'products_price' => $order->products[$i]['price'], 
							'final_price' => $order->products[$i]['final_price'], 
							'products_tax' => $order->products[$i]['tax'], 
							'products_quantity' => $order->products[$i]['qty']);
			tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
			$order_products_id = tep_db_insert_id();

			//------insert customer choosen option to order--------
			$attributes_exist = '0';
			$products_ordered_attributes = '';
			if (isset($order->products[$i]['attributes'])) {
				$attributes_exist = '1';
				for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
					if (DOWNLOAD_ENABLED == 'true') {
						$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename 
										from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa 
										left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
										on pa.products_attributes_id=pad.products_attributes_id
										where pa.products_id = '" . $order->products[$i]['id'] . "' 
										and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' 
										and pa.options_id = popt.products_options_id 
										and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' 
										and pa.options_values_id = poval.products_options_values_id 
										and popt.language_id = '" . $languages_id . "' 
										and poval.language_id = '" . $languages_id . "'";
						$attributes = tep_db_query($attributes_query);
					} else {
						$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
					}
					$attributes_values = tep_db_fetch_array($attributes);

					$sql_data_array = array('orders_id' => $insert_id, 
										'orders_products_id' => $order_products_id, 
										'products_options' => $attributes_values['products_options_name'],
										'products_options_values' => $attributes_values['products_options_values_name'], 
										'options_values_price' => $attributes_values['options_values_price'], 
										'price_prefix' => $attributes_values['price_prefix']);
					tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

					if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
						$sql_data_array = array('orders_id' => $insert_id, 
											'orders_products_id' => $order_products_id, 
											'orders_products_filename' => $attributes_values['products_attributes_filename'], 
											'download_maxdays' => $attributes_values['products_attributes_maxdays'], 
											'download_count' => $attributes_values['products_attributes_maxcount']);
						tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
					}
					$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
				}
			}
			//------insert customer choosen option eof ----
			$total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
			$total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
			$total_cost += $total_products_price;

			$products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
		}

		// lets start with the email confirmation
		$email_order = STORE_NAME . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
					EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
					EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
		if ($order->info['comments']) {
			$email_order .= tep_db_output($order->info['comments']) . "\n\n";
		}
		$email_order .= EMAIL_TEXT_PRODUCTS . "\n" . 
					EMAIL_SEPARATOR . "\n" . 
					$products_ordered . 
					EMAIL_SEPARATOR . "\n";

		for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
			$email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
		}

		if ($order->content_type != 'virtual') {
			$email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . 
			EMAIL_SEPARATOR . "\n" .
				tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
		}
		$email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
		EMAIL_SEPARATOR . "\n" .
		tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
		$email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
						EMAIL_SEPARATOR . "\n".
						"PagSeguro - pagamentos\n\n";
		tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		// send emails to other people
		if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
			tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
		}
		// load the after_process function from the payment modules
		$this->after_process();
		$cart->reset(true);
		// unregister session variables used during checkout
		tep_session_unregister('sendto');
		tep_session_unregister('billto');
		tep_session_unregister('shipping');
		tep_session_unregister('payment');
		tep_session_unregister('comments');
		tep_session_unregister('cart_pagseguro_ID');
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
		return false;
		break;
	} // switch
	exit();
}


function after_process() {
return false;
}


function get_error() {
	global $language;
	$error_text['title']='Erro:';
	$error_text['error']=urldecode($_GET['error']);
	return $error_text;
}


function check() {
	if (!isset($this->_check)) {
		$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_PAGSEGURO_STATUS'");
		$this->_check = tep_db_num_rows($check_query);
	}
	return $this->_check;
}


function install() {
	$sort_order = 1;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"set_function, date_added) values ('Aprovacao de Pagamento - PagSeguro', 'MODULE_PAYMENT_PAGSEGURO_STATUS', 'True', ".
				"'Voce deseja aprovar compras utilizando o PagSeguro?', '6', '".$sort_order."', ".
				"'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"date_added".
				") values (".
				"'Email no PagSeguro', 'MODULE_PAYMENT_PAGSEGURO_EMAIL', 'seu@email.com', ".
				"'Informar o email de cobran�a registrado junto ao PagSeguro.', '6', '".$sort_order."', ".
				"now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"date_added".
				") values (".
				"'Token', 'MODULE_PAYMENT_PAGSEGURO_TOKEN', '0', ".
				"'C�digo de seguran�a gerado manualmente no website do PagSeguro.', '6', '".$sort_order."', ".
				"now())");
	$sort_order++; // Seleciona o c�digo para a moeda padr�o (em julho/2006 � Real, c�digo = BRL, BR, etc)
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"date_added".
				") values (".
				"'Moeda padr�o', 'MODULE_PAYMENT_PAGSEGURO_CURRENCY', 'BR', ".
				"'C�digo da moeda usado em seu site para o Real. Por ex.: BR, BRL, etc.', '6', '".$sort_order."', ".
				"now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"set_function, date_added) values ('Unidade de peso', 'MODULE_PAYMENT_PAGSEGURO_WEIGHT', 'KG', ".
				"'Voc� deseja calcular o frete em KG ou gramas?', '6', '".$sort_order."', ".
					"'tep_cfg_select_option(array(\'Kg\', \'gramas\'), ', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"set_function, date_added) values ('C�lculo do frete pelo PagSeguro?', 'MODULE_PAYMENT_PAGSEGURO_SHIPPING', 'True', ".
				"'Voc� deseja calcular o frete atrav�s do site do PagSeguro?', '6', '".$sort_order."', ".
				"'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"set_function, date_added)
				values ('Aceita cart�o?', 'MODULE_PAYMENT_PAGSEGURO_CREDIT_CARD', 'False', ".
				"'Sua conta est� configurada para aceitar cart�es de cr�dito?', '6', '".$sort_order."', ".
				"'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"use_function, set_function, date_added".
				") values (".
				"'Zonas suportadas', 'MODULE_PAYMENT_PAGSEGURO_ZONE', '0', ".
				"'Se uma zona for selecionada, este meio de pagamento estar� dispon�vel somente para esta zona.', '6', '".$sort_order."', ".
				"'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"use_function, set_function, date_added".
				") values (".
				"'Status dos pedidos', 'MODULE_PAYMENT_PAGSEGURO_ORDER_STATUS_ID', '2', ".
				"'Atualiza o status dos pedidos efetuados por este m�dulo de pagamento para este valor.', '6', '".$sort_order."', ".
				"'tep_get_order_status_name', 'tep_cfg_pull_down_order_statuses(', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"use_function, set_function, date_added".
				") values (".
				"'Pedidos aprovados', 'MODULE_PAYMENT_PAGSEGURO_APPROVED_ORDER_STATUS_ID', '2', ".
				"'Atualiza o status dos pedidos aprovados por este m�dulo de pagamento para este valor.', '6', '".$sort_order."', ".
				"'tep_get_order_status_name', 'tep_cfg_pull_down_order_statuses(', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"set_function, date_added)".
				"values ('Debug log', 'MODULE_PAYMENT_PAGSEGURO_DEBUG_LOG', 'False', ".
				"'O m�dulo deve criar um log de debug na pasta EXT? Em caso afirmativo, d� permiss�o de escrita � pasta EXT. o arquivo debug.log conter� informa��es sobre a comunica��o entre os servidores.', '6', '".$sort_order."', ".
				"'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION .
				" (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added)
				values ('Email de debug', 'MODULE_PAYMENT_PAGSEGURO_DEBUG_EMAIL', '',
				'Todos os par�metros de uma notifica��o inv�lida ser�o enviados para este endere�o de email se estiver presente.', '6', $sort_order, now())");
	$sort_order++;
	tep_db_query("insert into " . TABLE_CONFIGURATION . " (".
				"configuration_title, configuration_key, configuration_value, ".
				"configuration_description, configuration_group_id, sort_order, ".
				"date_added".
				") values (".
				"'Ordem de exibi��o', 'MODULE_PAYMENT_PAGSEGURO_SORT_ORDER', '0', ".
				"'Determina a ordem de exibi��o do meio de pagamento.', '6', '".$sort_order."', ".
				"now())");
	tep_db_query("CREATE TABLE temp_pagseguro (
				id INT( 13 ) NOT NULL AUTO_INCREMENT ,
				vendedoremail VARCHAR( 200 ) NOT NULL ,
				transacaoid VARCHAR( 40 ) NOT NULL ,
				referencia VARCHAR( 128 ) NOT NULL ,
				anotacao TEXT ,
				datatransacao DATE NOT NULL ,
				tipopagamento VARCHAR( 32 ) NOT NULL ,
				statustransacao VARCHAR( 32 ) NOT NULL ,
				clinome VARCHAR( 128 ) NOT NULL ,
				cliemail VARCHAR( 128 ) NOT NULL ,
				date_created datetime ,
				PRIMARY KEY ( id ));"
	);
}


function remove() {
	tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
	tep_db_query("drop table temp_pagseguro");
}


function keys() {
	$key_listing = array();
	$qry = "select configuration_key from " . TABLE_CONFIGURATION . " where LOCATE('MODULE_PAYMENT_PAGSEGURO', configuration_key)>0 order by sort_order";
	$findkey = tep_db_query($qry);
	while ($key = tep_db_fetch_array($findkey)) {
		$key_listing[] = $key['configuration_key'];
	} // while
	return $key_listing;
}


function debug_var($var, $name="", $to_file=false) {
	if ($to_file) {
		if (MODULE_PAYMENT_PAGSEGURO_DEBUG_LOG=='True') {
			if ($txt = @fopen('ext/debug.log','a')) {
				fwrite($txt, "-----------------------------------\n");
				fwrite($txt, $name."\n");
				fwrite($txt, print_r($var, true)."\n");
				fclose($txt);
			}
		}
	} else {
		print('<br><b>'.$name.'</b><br>');
		echo '<pre>';
		print_r($var);
		echo '</pre>';
	}
}


}
?>


POR FAVOR PESSOAL... SOCORRO!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.