Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Trabalhando com Datas no PHP - #3 Construindo um sistema de mensalidades

18/05/2019

Nessa 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!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Trabalhando com Datas no PHP - #2 Construindo um sistema de locação veicular
No vídeo de hoje continuaremos a última aula trabalhando com datas no PHP. Para isso realizaremos a criaçao de um sistema de locação veícular.
Saiba mais!
Calendário / Agenda com PHP & JS - #01 Introdução
Na aula de hoje começamos a construir um sistema de agendamento dentro do calendário utilizando PHP e Full Calendar do Javascript.
Saiba mais!
PHP
PHP é uma das principais linguagens de programação utilizada nas plataformas web. Isso porque além de ser uma linguagem leve, o PHP é robusto.
Saiba mais!