Trabalhando com Datas no PHP - #3 Construindo um sistema de mensalidades
18/05/2019Nessa vídeo-aula vamos trabalhar com um sistema de controle de mensalidades com verificação diária e envio de mensagens via email utilizando CRON.
Instalando e configurando o Composer
O primeiro passo no nosso sistema é baixar o composer clicando aqui e configurar o composer.json.
Após instalar, no terminal do seu sistema operacional (cmd no windows) digite os comandos abaixo:
cd c:/CAMINHO DA PASTA LIB DO SEUS SITEMA
composer init
Preencha os dados do seu sistema. Após isso você perceberá que já será criado o arquivo composer.json dentro da pasta lib do seu sistema.
Agora vamos acessar o site da class PHPMAILER clicando aqui.
Vamos voltar ao terminal e colar o comando
composer require phpmailer/phpmailer
Vamos fazer uma última configuração no nosso arquivo composer.json que é criar o autoload com o namespace Classes. Após o require, vamos colocar o código abaixo:
,
"autoload":{
"psr-4":{
"Classes\\":"../classes/"
}
}
Ao fim, voltamos ao terminal e rodamos o comando:
composer update
Após isso, nosso composer e dependências já estarão completos.
Arquivo index.php
No arquivo index.php na raiz do nosso projeto, vamos gerar o seguinte código:
<?php
include ("lib/vendor/autoload.php");
$objDate=new \Classes\ClassDate('2019-04-18 18:00');
echo $objDate->getMonthlyPayment();
Classes
Nosso projeto terá duas classes, uma responsável pela verificação de datas e outra responsável pelo envio de emails:
ClassDate
<?php
namespace Classes;
class ClassDate extends ClassMail{
private $now;
private $lastPay;
private $dateDiff;
private $oneDay;
private $oneDayDiff;
#Construct
public function __construct($lastPay)
{
$this->now=new \DateTime("now",new \DateTimeZone("America/Sao_Paulo"));
$this->lastPay=new \DateTime($lastPay,new \DateTimeZone("America/Sao_Paulo"));
$this->dateDiff=$this->now->diff($this->lastPay);
$this->oneDay=$this->lastPay->modify("+1 month -1 day");
$this->oneDayDiff=$this->oneDay->diff($this->now);
}
#Get Monthly Payment
public function getMonthlyPayment()
{
$msg="";
if($this->dateDiff->m >=1){
$msg.="Sua fatura venceu!";
}else{
if($this->dateDiff->d == 25){
$msg.="Falta 5 dias para o vencimento!";
}elseif($this->oneDayDiff->d ==0){
$msg.="Falta 1 dia para o vencimento!";
}else{
$msg.="Sua mensalidade está em dia!";
}
}
return $this->sendMail($msg);
}
}
ClassMail
<?php
namespace Classes;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
class ClassMail{
private $mail;
#Send mail
protected function sendMail($msg)
{
try {
$this->mail = new PHPMailer(true);
//Server settings
$this->mail->SMTPDebug = 2; // Enable verbose debug output
$this->mail->isSMTP(); // Set mailer to use SMTP
$this->mail->Host = 'SEU SERVIDOR DE EMAIL'; // Specify main and backup SMTP servers
$this->mail->SMTPAuth = true; // Enable SMTP authentication
$this->mail->Username = 'USUARIO DA HOSPEDAGEM'; // SMTP username
$this->mail->Password = 'SENHA DA HOSPEDAGEM'; // SMTP password
$this->mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$this->mail->Port = 587; // TCP port to connect to
//Recipients
$this->mail->setFrom('EMAIL DO REMETENTE', 'NOME DO REMETENTE');
$this->mail->addAddress('EMAIL DO DESTINATÁRIO', 'NOME DO DESTINATÁRIO'); // Add a recipient
// Content
$this->mail->isHTML(true); // Set email format to HTML
$this->mail->Subject = 'Monthly Payment';
$this->mail->Body = $msg;
$this->mail->send();
return 'Message has been sent';
} catch (Exception $e) {
return "Message could not be sent. Mailer Error: {$e->getMessage()}";
}
}
}
Cron
Pra trabalhar com Cron verifique primeiramente se sua hospedagem comporta cron. Posteriormente acesse o menu cron e utilize o cron para o link do seu sistema:
curl https://www.seusite.com/index.php > /home/USUARIO/public_html/teste/mycron.log 2>&1
No código acima, vc deve substituir a url e o caminho absoluto de acordo com sua hospedagem.
Sucesso nos códigos e na vida!