Ir para conteúdo

POWERED BY:

Arquivado

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

Diego Chiarelotto

script para enviar cobrança por crontab

Recommended Posts

boa tarde.

estou querendo usar o crontab do servidor.

 

meus clientes quando assinam algum plano em meu site escolhe melhor data de vencimento: 10, 20 ou 30.

tenho minha duvida, como fazer para quem vence dia 10 o sistema enviar 3 cobranças, uma dia 3, outra dia 8 e outra no dia. O mesmo procedimento usarei nas outras datas.

 

Outra duvida, como fazer este script alem de enviar criar a cobrança ou algo parecido no pagseguro???

ja li sobre retorno automatico, mais nao sei se e isso, pois eu preciso que meu sistema crie a cobrança.

 

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde.

estou querendo usar o crontab do servidor.

 

meus clientes quando assinam algum plano em meu site escolhe melhor data de vencimento: 10, 20 ou 30.

tenho minha duvida, como fazer para quem vence dia 10 o sistema enviar 3 cobranças, uma dia 3, outra dia 8 e outra no dia. O mesmo procedimento usarei nas outras datas.

 

Outra duvida, como fazer este script alem de enviar criar a cobrança ou algo parecido no pagseguro???

ja li sobre retorno automatico, mais nao sei se e isso, pois eu preciso que meu sistema crie a cobrança.

 

att.

 

 

não sei exatamente como funciona o pagseguro, se ele fornece um webservice ou atravez de cURL.

 

porem, pesquise um pouco sobre crons veja como programar os horarios certinho, dai você faz esse cron chamar um script php que faz a brincadeira.

pegar as informacoes dos usuarios verificar horarios/datas e fazer o contato com o pagseguro.

 

(:

 

caso queira eventos na base de dados pode usar Events do MySQL =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

liberei no cpanel:

 

Coloquei para rodar todos os minutos.

comando: /var/www/cron.php

 

e o codigo php ficou assim:

 

#!/usr/bin/php 
<?php 
$ip = "localhost";
$user = "locaturb_site";
$password = "bm123123";
$dataname = "locaturb_site";

   $db = mysql_connect($ip, $user, $password) or die("Não pude conectar: " . mysql_error());
   mysql_select_db($dataname);

$data = date("Y-m-d");
$hora = date("H:i:s");
if(!empty($data)) {
   $sql = mysql_query("insert into teste (data, hora) VALUES ('$data', '$hora')", $db);
 } 

?> 

 

o codigo se rodar ele pelo broswer ele grava no bd, so que ainda nao rodou pelo crontab.

 

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diego Chiarelotto, você quer apenas gravar as cobranças no MySQL ?

entao, ainda estou entendendo a parada de crontab.

o que pensei foi:

 

ele gravar a cobrança na tabela cobranças, com o id do cliente, numero fatura que o sistema geraria e valor. e o usuario receberia um comunicado sobre sua fatura, acessaria o sistema e imprimia ou pegava os dados para pagamento.

 

esse e um projeto pessoal, mais por questao de aprendizado, e vi neste sistema uma grande oportunidade.

 

sabe me auxiliar em algo???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, você pode fazer com Events no MySQL, o que é ate uma boa ideia, então vai funcionar da seguinte forma

teremos uma tabela que vai gravar o número de parcelas que o usuário solicitou pra tal produto, e o status

dessas parcelas 'Emitidas' ou 'Não Emitidas', quando tal pedido tiver por sua vez o status como 'Não Emitidas'

o número de parcelas, o event vai registrar todas as parcelas em outra tabela, e alterar o status da tabela

'pagamentos' pra emitidas, deu pra entender ? veja um exemplo, 'antes do evento ser executado':

mysql> select * from pagamentos;
+------+---------------------+----------+---------+--------------+
| pgid | vencimento          | parcelas | total   | status       |
+------+---------------------+----------+---------+--------------+
|    1 | 2011-06-22 21:21:37 |       12 | 1200.00 | Não Emitidas |
+------+---------------------+----------+---------+--------------+
1 row in set (0.01 sec)

mysql> select * from parcelas;
Empty set (0.01 sec)

 

'Depois' do evento ser executado:

mysql> select * from pagamentos;
+------+---------------------+----------+---------+----------+
| pgid | vencimento          | parcelas | total   | status   |
+------+---------------------+----------+---------+----------+
|    1 | 2011-06-22 21:21:37 |       12 | 1200.00 | Emitidas |
+------+---------------------+----------+---------+----------+
1 row in set (0.01 sec)

mysql> select * from parcelas;
+----+--------------------+---------+---------------------+--------------+
| id | mensagem           | parcela | vencimento          | usuario      |
+----+--------------------+---------+---------------------+--------------+
|  1 | 12x de: R$ 100,00  |      12 | 2012-07-22 21:21:37 | Andrey Knupp |
|  2 | 11x de: R$ 109,09  |      11 | 2012-06-21 21:21:37 | Andrey Knupp |
|  3 | 10x de: R$ 120,00  |      10 | 2012-05-22 21:21:37 | Andrey Knupp |
|  4 | 9x de: R$ 133,33   |       9 | 2012-04-21 21:21:37 | Andrey Knupp |
|  5 | 8x de: R$ 150,00   |       8 | 2012-03-23 21:21:37 | Andrey Knupp |
|  6 | 7x de: R$ 171,43   |       7 | 2012-02-21 21:21:37 | Andrey Knupp |
|  7 | 6x de: R$ 200,00   |       6 | 2012-01-21 21:21:37 | Andrey Knupp |
|  8 | 5x de: R$ 240,00   |       5 | 2011-12-22 21:21:37 | Andrey Knupp |
|  9 | 4x de: R$ 300,00   |       4 | 2011-11-21 21:21:37 | Andrey Knupp |
| 10 | 3x de: R$ 400,00   |       3 | 2011-10-22 21:21:37 | Andrey Knupp |
| 11 | 2x de: R$ 600,00   |       2 | 2011-09-21 21:21:37 | Andrey Knupp |
| 12 | 1x de: R$ 1.200,00 |       1 | 2011-08-21 21:21:37 | Andrey Knupp |
+----+--------------------+---------+---------------------+--------------+
12 rows in set (0.00 sec)

 

o Código das 'tabelas' e do 'evento'

CREATE EVENT `addParcelas` ON SCHEDULE EVERY 1 DAY ON COMPLETION PRESERVE ENABLE COMMENT '' 
DO 
BEGIN
   DECLARE parcelas TINYINT(3);
   DECLARE results VARCHAR(38);
   SELECT @parcelas := `pagamentos`.parcelas, @total := `pagamentos`.total, @pgid := `pagamentos`.`pgid`
 FROM `pagamentos` WHERE `status` != 'Emitidas';
   SET parcelas = @parcelas;
   WHILE parcelas >= 1 DO
       SELECT @results := @total / parcelas, @msg := CONCAT( Parcelas, 'x de: ' );
       SET results = CONCAT( @msg, CONCAT('R$ ', REPLACE( REPLACE( REPLACE( FORMAT( @results, 2), '.', '|'), ',', '.'), '|', ',') ) );
       INSERT INTO `parcelas` ( `mensagem`, `parcela`, `vencimento`, `usuario` ) VALUES ( results, parcelas, CURRENT_TIMESTAMP + INTERVAL parcelas MONTH + INTERVAL 30 DAY, 'Andrey Knupp' );
       SET parcelas = parcelas - 1;
   END WHILE;
   UPDATE `pagamentos` SET `status` = 'Emitidas' WHERE `pgid` = @pgid;
END

CREATE TABLE `pagamentos` (
`pgid` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`vencimento` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`parcelas` TINYINT(3) NOT NULL,
`total` DECIMAL(8,2) NOT NULL,
`status` ENUM('Emitidas','Não Emitidas') NOT NULL,
PRIMARY KEY (`pgid`)
)
ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=2

CREATE TABLE `parcelas` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`mensagem` VARCHAR(33) NOT NULL,
`parcela` TINYINT(3) NOT NULL,
`vencimento` DATETIME NOT NULL,
`usuario` VARCHAR(16) NOT NULL,
INDEX `id` (`id`)
)
ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=13

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí amigo, dando uma revisada no script, é testando também é claro, eu descobri um problema ..

vejamos, ali em cima, eu testei apenas com 1 registro certo ? o while roda de boa, e coloca na tabela ..

Porem, se tivesse 2 linhas de pagamentos, vamos supor, um pedido de 6 parcelas, e outro de 12 parcelas, ele ia dar problema

ia pegar apenas o primeiro ou último registro da tabela, então eu arrumei aqui, se você ainda for usar esse script, segue o código

CREATE EVENT `addParcelas` ON SCHEDULE EVERY 15 SECOND ON COMPLETION PRESERVE ENABLE
DO BEGIN
   DECLARE parcelas TINYINT(3);
   DECLARE results VARCHAR(38);
   DECLARE pgid INT(11);
   SELECT @pgid := `pagamentos`.pgid FROM `pagamentos` WHERE `status` != 'Emitidas';
   SET pgid = @pgid;
   WHILE pgid >= 1 DO
       SELECT @parcelas := `pagamentos`.parcelas, @total := `pagamentos`.total
FROM `pagamentos` WHERE `pagamentos`.`pgid` = pgid;
       SET parcelas = @parcelas;
WHILE parcelas >= 1 DO
          SELECT @results := @total / parcelas, @msg := CONCAT( Parcelas, 'x de: ' );
          SET results = CONCAT( @msg, CONCAT('R$ ', REPLACE( REPLACE( REPLACE( FORMAT( @results, 2), '.', '|'), ',', '.'), '|', ',') ) );
          INSERT INTO `parcelas` ( `mensagem`, `parcela`, `vencimento`, `usuario` ) VALUES ( results, parcelas, CURRENT_TIMESTAMP + INTERVAL parcelas MONTH + INTERVAL 30 DAY, 'Andrey Knupp' );
          SET parcelas = parcelas - 1;
       END WHILE;
       UPDATE `pagamentos` SET `status` = 'Emitidas' WHERE `pgid` = pgid;
       SET pgid = pgid - 1;
   END WHILE;
END

 

Observe agora os registros que foram gravados na tabela 'parcelas':

mysql> select * from pagamentos;
+------+---------------------+----------+---------+----------+
| pgid | vencimento          | parcelas | total   | status   |
+------+---------------------+----------+---------+----------+
|    1 | 2011-06-23 11:39:12 |       12 | 1200.00 | Emitidas |
|    2 | 2011-06-23 11:39:12 |        6 |  600.00 | Emitidas |
+------+---------------------+----------+---------+----------+
2 rows in set (0.00 sec)

mysql> select * from parcelas;
+----+--------------------+---------+---------------------+--------------+
| id | mensagem           | parcela | vencimento          | usuario      |
+----+--------------------+---------+---------------------+--------------+
|  1 | 6x de: R$ 100,00   |       6 | 2012-01-22 11:45:19 | Andrey Knupp |
|  2 | 5x de: R$ 120,00   |       5 | 2011-12-23 11:45:19 | Andrey Knupp |
|  3 | 4x de: R$ 150,00   |       4 | 2011-11-22 11:45:19 | Andrey Knupp |
|  4 | 3x de: R$ 200,00   |       3 | 2011-10-23 11:45:19 | Andrey Knupp |
|  5 | 2x de: R$ 300,00   |       2 | 2011-09-22 11:45:19 | Andrey Knupp |
|  6 | 1x de: R$ 600,00   |       1 | 2011-08-22 11:45:19 | Andrey Knupp | <-- 
|  7 | 12x de: R$ 100,00  |      12 | 2012-07-23 11:45:19 | Andrey Knupp |
|  8 | 11x de: R$ 109,09  |      11 | 2012-06-22 11:45:19 | Andrey Knupp |
|  9 | 10x de: R$ 120,00  |      10 | 2012-05-23 11:45:19 | Andrey Knupp |
| 10 | 9x de: R$ 133,33   |       9 | 2012-04-22 11:45:19 | Andrey Knupp |
| 11 | 8x de: R$ 150,00   |       8 | 2012-03-24 11:45:19 | Andrey Knupp |
| 12 | 7x de: R$ 171,43   |       7 | 2012-02-22 11:45:19 | Andrey Knupp |
| 13 | 6x de: R$ 200,00   |       6 | 2012-01-22 11:45:19 | Andrey Knupp |
| 14 | 5x de: R$ 240,00   |       5 | 2011-12-23 11:45:19 | Andrey Knupp |
| 15 | 4x de: R$ 300,00   |       4 | 2011-11-22 11:45:19 | Andrey Knupp |
| 16 | 3x de: R$ 400,00   |       3 | 2011-10-23 11:45:19 | Andrey Knupp |
| 17 | 2x de: R$ 600,00   |       2 | 2011-09-22 11:45:19 | Andrey Knupp |
| 18 | 1x de: R$ 1.200,00 |       1 | 2011-08-22 11:45:19 | Andrey Knupp | <--
+----+--------------------+---------+---------------------+--------------+
18 rows in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi FelipeUmpierre.

Então, se você quer fazer direto no PHP, só você implementar o while, foreach, ou for .. direto na quantidade de parcelas

que o usuário solicitou .. então você grava as mesmas no banco de dados, com o valor de cada uma, quando chegar a data, ou passar da data

você envia o email com o link do boleto pra ele poder pagar, apos o pagamento efetuado, você remove a parcela do banco, creio que você

já saiba isso, mais enfim ..

 

e será que é preciso salvar no banco ?

 

Sim, você precisa salvar cada parcela no banco de dados

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.