Ir para conteúdo
  • 0

Sistema Pagseguro donate - Shop - Modern AAC


Pokerangers

Pergunta

Bom galera, eu andei procurando muito, e não achei tutoriais de como por um shop no Modern AAC e como fazer o sistema de confirmação e entrega de pontos automatico.

 

Alguem poderia me explicar ou enviar um link de algum tutorial?

 

Desde já, obrigado.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Hi amigo para fazer isso é bem facil vai no config.php do seu site e coloque essa tag \/

 

 

// Sistema automatico Pagseguro
// Seu email cadastrado no pagseguro
$config['pagseguro']['email'] = 'email do pagseguro';
// Nome do Produto
$config['pagseguro']['produtoNome'] = 'Premium Points';
// 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
$config['pagseguro']['token'] = 'EFEB3B4CA8914CB3963C3695A6947965';

na pasta onde fica o config.php crie um arquivo chamado retorno.php e coloque o script abaixo dentro

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

Agora crie outro arquivo no mesmo local chamado retPagseguro.php e coloque o script abaixo

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

Agora vai na pasta system/pages e crie um arquivo chamado pagseguro.php e coloque o script abaixo

<div class='message'>
<div class='title'>Doação</div>
<div class='content'>
<?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 - é rápido, grátis e seguro!" />
</td>
</tr>
</tbody></table><?php } ?>
</div></div>

Agora va na pasta templates e vai no index do seu template e coloque a tag abaixo
<li><a href="{$path}/index.php/p/v/pagseguro"> » <b><font color="green"><blink>Premium Points</blink></font></b></a></li>
Pronto :)
Espero ter ajudado :)
Link para o comentário
Compartilhar em outros sites

  • 0

Cara, perfeito, muito obrigado.

 

Posso te pedir mais duas coisas? :p

 

Bom, me explica oque tenho que mudar ali nos scripts, token, email, algo do tipo?

 

E a loja, como faço para o player ter 'x' pontos, comprar um item 'y' e receber em sua conta?

 

Quebra esse galho pra min?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom para configurar é simples simplesmente faça como pedi no config coloque só seu email ali onde pedi nos outros scripts não precisam configurar nada.

Sobre os de players comprar items e ir para conta você terá de ter um SHOP System se ja tiver só colocar o script no seu global eventos script abaixo

 

vá em globalevents/scripts crie um arquivo chamado shop.lua e coloque o script abaixo nele

 

 

function onThink(interval, lastExecution, thinkInterval)
local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;")
if(result:getID() ~= -1) then
while(true) do
cid = getCreatureByName(tostring(result:getDataString("player")))
product = tonumber(result:getDataInt("product"))
itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";")
if isPlayer(cid) then
local id = tonumber(itemr:getDataInt("item"))
local tid = tonumber(result:getDataInt("id"))
local count = tonumber(itemr:getDataInt("count"))
local tipe = tonumber(itemr:getDataInt("type"))
local productn = tostring(itemr:getDataString("name"))
if isInArray({5,8},tipe) then
if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then
if isContainer(getPlayerSlotItem(cid, 3).uid) then
received = doAddContainerItem(getPlayerSlotItem(cid, 3).uid, id,count)
if received then
doPlayerSendTextMessage(cid,19, "Você Recebeu Uma >> "..productn.." << do Shop System")
db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
else
doPlayerSendTextMessage(cid,19, "Desculpa, Você não tem espaço para receber o item >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Desculpa, Você não tem espaço para receber >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Desculpa, você não tem cap para receber >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
end
elseif isInArray({6,7},tipe) then
if tipe == 6 then
bcap = 8
bid = 1987
elseif tipe == 7 then
bcap = 20
bid = 1988
end
if isItemRune(id) then
count = 1
end
if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then
local bag = doCreateItemEx(bid, 1)
for i = 1,bcap do
doAddContainerItem(bag, id, count)
end
received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag)
if received == RETURNVALUE_NOERROR then
doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
end
end
end
itemr:free()
if not(result:next()) then
break
end
end
result:free()
end
return true
end

Agora abra o globalevents.xml e coloque a tag abaixo
<globalevent name="Shop" interval="3000" event="script" value="shop.lua"/>
e pronto caso não tenha o shop system no site avise-me que eu crio um mini tutorial explicando como colocar :) caso ja tenha isso funcionará :)
Link para o comentário
Compartilhar em outros sites

  • 0

Shop system creio que não tenho, pois após ter feito tudo oque você mencionou, clicando em Shop aparece este erro:

 

u0yn.png

 

Logo abaixo deste erro fica a loja normalmente.

 

E outra coisa, não é preciso gerar token ou algo do genero? E poderia me explicar como o dinheiro do donate chega até min?

 

Desde já, obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Shop system creio que não tenho, pois após ter feito tudo oque você mencionou, clicando em Shop aparece este erro:

 

u0yn.png

 

Logo abaixo deste erro fica a loja normalmente.

 

E outra coisa, não é preciso gerar token ou algo do genero? E poderia me explicar como o dinheiro do donate chega até min?

 

Desde já, obrigado.

 

Você precisa ter uma conta de vendedor no Pagseguro e configurar o email no explicado acima assim que configurar e a pessoal ou seja algum player donatar o dinheiro que ele donatar vai para sua conta do pagseguro la você poderá retirar o dinheiro depois de 15 dias se não min engano e após confirmar o pagamento do player os points são automaticamente colocado na conta dele :) entendeu ?

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado por explicar esta parte do donate.

 

Porem eu vi em outros tutoriais que precisava gerar token, entrar e ativar.

 

Isso aqui:

 

 

 

Atenção: Para pegar o seu token você precisará entrar nesse link logado em sua conta do PagSeguro, na URL de retorno selecione "Ativar" e bote a urlhttp://seusiteaqui/retpagseguro.php agora clique em "Salvar". Agora um pouco mais embaixo tem o Token clique e "Gerar", pronto, o Token gerado você coloca naconfig.php!

 

Vi isso neste tutorial: ############

Poderia explicar? e tambem estou um pouco perdido na questão de emails, tokens...

Editado por VictorWebMaster
Remoção de links. Proxima vez que cometer o erro será punido!
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado por explicar esta parte do donate.

 

Porem eu vi em outros tutoriais que precisava gerar token, entrar e ativar.

 

Isso aqui:

 

 

 

Atenção: Para pegar o seu token você precisará entrar nesse link logado em sua conta do PagSeguro, na URL de retorno selecione "Ativar" e bote a urlhttp://seusiteaqui/retpagseguro.php agora clique em "Salvar". Agora um pouco mais embaixo tem o Token clique e "Gerar", pronto, o Token gerado você coloca naconfig.php!

 

Vi isso neste tutorial: http://www.tibiaking.com/forum/topic/21118-gesior-pagseguro-automatico-100-funcional/

Poderia explicar? e tambem estou um pouco perdido na questão de emails, tokens...

 

Bom amigo comigo funciono mais tente fazer isso que pediu ai gere e troque o token :)

Link para o comentário
Compartilhar em outros sites

  • 0

Sabes o porque desse erro?

 

u0yn.png

 

E me explica a por Shop system?

 

Obrigado.

 

Amigo acho que ja possui um tópico ensinando caso não tenha crie um novo tópico com o seu pedido que estaremos ai tentando lhe ajudar, Obrigado.

@Edit, essa duvida foi resolvida reportado para que movam o tópico.

Editado por Junior Silva
Link para o comentário
Compartilhar em outros sites

  • 0

Olá, onde eu adiciono minha conta do pagseguro para quando o player for fazer o pagamento, ir direto para ela ?

Deixa, ja descobri como, mas agora aparece um "erro", Transação inválida. Sempre inicie transações a partir de sites confiáveis.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...