Ir para conteúdo
Fórum Script Brasil
  • 0

Sistema De Bloqueio Por Falta De Pagamento


mzaidan

Pergunta

Pessoal, estou montando um site.

Nesse site existirá uma contribuição.

Assim, gostaria de saber se alguém tem algum script pronto, que bloqueie o acesso da pessoa por falta de pagamento.

Assim que ela pagar, junto ao pagseguro, e o pagamento computado, o acesso seria liberado automaticamente.

Alguém tem algo do tipo?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Cara, assim, eu peguei um sistema já pronto, não entendo muito de PHP.

Já programei em php bastante, mas faz uns 7 anos que não mexo uma linha.

A lógica eu já tenho mais ou menos em minha cabeça.

Só não sei como fazer isso do pagseguro.

Fui ao site do pagseguro e li la, mas não entendi nada.

Teria como, se possível, você me explicar como eu poderia fazer?

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

O que interessa é isto (https://pagseguro.uol.com.br/desenvolvedor/retorno_automatico_de_dados.jhtml):

<?php

header('Content-Type: text/html; charset=ISO-8859-1');

define('TOKEN', 'cole aqui o token do vendedor');

class PagSeguroNpi {
    
    private $timeout = 20; // 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();
    
    $transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';
    
    if ($result == "VERIFICADO") {
        //O post foi validado pelo PagSeguro.
    } else if ($result == "FALSO") {
        //O post não foi validado pelo PagSeguro.
    } else {
        //Erro na integração com o PagSeguro.
    }
    
} else {
    // POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
    // No término do checkout o usuário é redirecionado para este bloco.
    ?>
    <h3>Obrigado por efetuar a compra.</h3>
    <?php
}

?>
O script já está todo comentado, a parte onde você vai implementar é no final:
if (count($_POST) > 0) {
    
    // POST recebido, indica que é a requisição do NPI.
    $npi = new PagSeguroNpi();
    $result = $npi->notificationPost();
    
    $transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';
    
    if ($result == "VERIFICADO") {
        //O post foi validado pelo PagSeguro.
    } else if ($result == "FALSO") {
        //O post não foi validado pelo PagSeguro.
    } else {
        //Erro na integração com o PagSeguro.
    }
    
} else {
    // POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
    // No término do checkout o usuário é redirecionado para este bloco.
    ?>
    <h3>Obrigado por efetuar a compra.</h3>
    <?php
}
Aqui:
if ($result == "VERIFICADO") {
        //O post foi validado pelo PagSeguro.
    }
Você deve verificar o que retornou do gateway na variável $StatusTransacao se foi Completo ou Aprovado é porque o pagamento foi feito, caso contrário não foi feito ainda ou está cancelado (tem todos os status no link que passei), logo, você teria que testar:
if($result == "VERIFICADO" AND ($StatusTransacao == 'Completo' OR $StatusTransacao == 'Aprovado')){
        //Atualiza o seu BD
    }

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, desculpa a burrice, mas o que é gateway? Em qual momento eu envio o comprador para o gateway?

Se não for muito incomodo, tu poderias explicar em forma de páginas?

Ex: pagina01.php tem os dados do comprador com o botão pagar

pagina02.php teria o que?

Como que teria que ser feito?

Tem como explicar por meio de páginas?

Desculpe a burrice e a encheção de saco.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0
Cara, desculpa a burrice, mas o que é gateway? Em qual momento eu envio o comprador para o gateway?

Gateway = pagseguro

Em algum momento o cara via ter que clicar em alguma coisa no seu site, para ir para o pagseguro e fazer o pagamento, então este é o momento em que você envia o comprador para o gateway;

Sobre explicar por páginas, o mecanismo de funcionamento do pagseguro está no próprio site dele, logo, isto é inútil, o que você tem que saber, após o usuário finalizar o pagseguro ele vai ser devolvido ao seu site por uma página, e nesta página tem que ter aquele script ali.

Link para o comentário
Compartilhar em outros sites

  • 0
Entendi, então seria algo do tipo:

pagina01.php = local para o usuário clicar para pagar.

ai vai direto para o pagseguro.

Na página de retorno do pagseguro eu coloco esse script.

É isso??

Sim. Óbvio que terá que alterar ali, colocar a query que vai fazer a alteração no BD e etc... mas é isto ai.

Sim, sim.

No espaço que você botou para alterar o BD eu farei isso.

Aproveitando (faz muito tempo que não mexo com php), no banco de dados vai ter a data de pagamento, ai quero alterá-la para 12 meses depois (independemente de quando a pessoa pagar)

Exemplo: pagamento em 06/06/2011, o usuário tem direito de ir até 06/06/2012, ai ele paga e renova até 06/06/2013.

Então, se ele pagar adiantado, independente do dia, terá que atualizar para 06/06/2013.

Então, como eu faria isso (qual sql, pois eu me esqueci - 7 anos sem mexer com programação -)?

Eu teria que ter um campo início o qual eu somaria 24 meses? O que sugeres? (E qual a sintaxe do sql)

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu ESerra, salvasse o leite das crianças desse mês.

Mas, para o leite não engrossar, vai mais uma:

No pagseguro eu crio uma página de retorno, essa página de retorno sevirá para todos os usuários?

Apenas lembrando que cada usuário tem um banco de dados diferente.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

A resposta é: sim e não

Sim, se o seu sistema centralizar as faturas em apenas um BD;

Não, se o seu sistema não centralizar as faturas.

Veja que de alguma maneira que você vai ter que identificar quem pagou o que, se você tiver isto em uma tabela basta consultar ela no retorno e pronto, agora se esta informação ficar dentro de cada banco de dados de cada usuário, ai já não via mais funcionar.

Link para o comentário
Compartilhar em outros sites

  • 0

É porque são vários sites de usuários diferentes postados no mesmo servidor.

Cada usuário tem um banco de dados separado.

Como que eu poderia fazer?

Eu posso criar uma tabela com todos os usuários e consultá-la.

Posso criar uma tabela clientes, com todas as informações que eu preciso.

Mas a dúvidas ainda continuam, como seria o retorno de cada cliente?

Não estou entendendo muito a sistemática desse script.

Suponha que eu tenha uma tabela clientes:

Nome DataDePagamento DataDeVencimento Status

P1 05/05/2011 05/05/2012 Pago

P2 05/05/2010 05/05/2011 Vencido

P3 04/06/2010 04/06/2011 Vencido

Como que eu faria nesse caso?

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

  • 0

Você precisaria ter no mínimo duas tabelas:

usuarios

-id (chave primária)

- nome

- email

- vencimento

- etc

faturas

- id (chave primária)

- id_usuario (relaciona com a tabela anterior)

- prazo (dias, meses, anos que o usuário vai pagar e por conseqüência vai adicionar à coluna vencimento da tabela anterior);

- valor (que será remetido ao gateway)

- status (pago, cancelado, etc...)

Pronto, na hora de enviar ao gateway você vai enviar os dados (incluso id e valor da tabela faturas), quando o gateway confirmar o pagamento e enviar os dados para o retorno automático, você vai pegar o id e consultar a tabela faturas, vai pegar o id_usuario e somar o prazo à coluna vencimento.

Link para o comentário
Compartilhar em outros sites

  • 0

Vou ter que estudar mais php e mysql, pois não entendi nada do que disse.

Pensei em fazer em uma tabela apenas, porque não daria?

2 - Os usuários não vão pagar valores iguais (depende do plano). Assim, tem como eu já definir na página o valor que apareceria no pagseguro?

Link para o comentário
Compartilhar em outros sites

  • 0
Pensei em fazer em uma tabela apenas, porque não daria?

Pesquise por modelagem de dados e também leia o manual do pagseguro, ai você vai entender o porque.

2 - Os usuários não vão pagar valores iguais (depende do plano). Assim, tem como eu já definir na página o valor que apareceria no pagseguro?

Sim, você terá que enviar o valor para o pagseguro, deve salvar isto no BD e na hora de montar a página com o botão resgata do BD isto tudo.

Link para o comentário
Compartilhar em outros sites

  • 0

A página com o botão para o pagseguro será dinâmica (a menos que você pretenda criar uma página para cada cliente), então montar a página é pegar a informação de que cliente é, resgatar no banco, preencher o campo e exibir para o usuário.

Link para o comentário
Compartilhar em outros sites

  • 0

Caracas, tas falando grego.

Vamos partir do ponto que eu sou um nada em PHP.

Não to nem conseguindo botar um echo aqui.

Vou dar uma estudada, pois só estou gastando seu tempo, atrapalhando vc, pois você deve ter coisa mais importante para fazer.

Desculpa ai irmão.

Abração

Link para o comentário
Compartilhar em outros sites

  • 0

ESerra, vou tentar resolver aqui mesmo, caso eu não consiga eu entro em contato com você.

De qualquer forma, obrigado.

Aproveitando, queria saber se tem como criar uma sessão em uma página e ela ser usada em todas as outras sem eu precisar repeti-la.

Eu lembro que existia algo de global session, procurei no forum, mas não achei.

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

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...