Ir para conteúdo

POWERED BY:

Arquivado

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

diegohamaz1

Cronjob para vencimento de assinatura

Recommended Posts

Galera ,

Tenho a seguinte dúvida, eu vou rodar um cron que vai ser executado todo dia a noite que vai verificar os pagamento do meu site e vai cobra-los após o vencimento, as formas de adesão é mensal , semestral e anual.

Estou fazendo um script mas tenho duvidas sobre sua funcionalidade, quando é efetivado no cartaão (debitado) eu marco uma coluna DATA_PAGAMENTO com a data que foi debitado e seu plano(MENSAL,SEMESTRAL E ANUAL)

Agora é minha duvida como posso fazer a recorrencia desse plano...

Eu leio no cron os registros do dia ? ou pesquiso com um strtotime + 6 MONTHS , + 12 MONTHS , +1 MONTH

e faço um IF e cobro novamente? Alguem sabe como posso fazer isso de forma segura? Sem que eu debite indevidamente do cartao do cliente?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu sistema a Rotina é diária, vejo quem vence nos próximos 7 dias, gero a fatura e envio em seguida, depois faço uma outra verificação faltando um dia antes de vencer e envio novamente como lembrete "Sua fatura vence amanhã", ou "vence hoje" caso queira enviar lembrete no dia de vencimento logo pela manhã. Depois de tres dias outro aviso de fatura vencida caso não pagar, apos 10 dias outro aviso que o sistema vai ser bloqueado caso não haja pagamento, apos dois dias bloqueio caso o sistema não encontre o pagamento.

Máximo tres aviso sobre fatura de pagamento e um de confirmação de recebimento, outro de bloqueio caso precise, mas do que isso você estressa o cliente. já fiz os testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o meu codigo qual o perigo de dar errado, esse seria o meu cron rodado diariamente

	public function fire()
	{

		$pagRet = DB::table('pv_faturamento as f')
        ->select('*')
        ->join('pv_cartao as c', 'c.id_faturamento', '=', 'f.id')
        ->where('f.forma_pagamento' , 'cartao')
        ->where('f.processo' , 'aprovado')
        ->where(DB::raw("date_format(f.data_pagamento,'%Y-%m-%d')"), date('Y-m-d'))
        ->get();
 

    	foreach($pagRet as $key => $value){
			
			foreach($value as $chave => $valor){
			
				if($chave == "tipo_plano"){
					$plano = $valor;
				}
		

			if($plano == "mensal"){
				if(date('Y-m-d', strtotime($pagamento . "+ 1 months")) == date('Y-m-d')){
					echo "COBRA MENSA";
				}
				
			}
			if($plano == "semestral"){
				
				if(date('Y-m-d', strtotime($pagamento. "+ 6 months")) == date('Y-m-d')){
					echo "COBRA SEMESTRAL";
				}
					
			}
			if($plano == "anual"){

				if(date('Y-m-d', strtotime($pagamento . "+ 12 months")) == date('Y-m-d'))){
					echo "COBRA ANUAL";
				}
				
			}


    	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código é o de menos, você tem que saber trabalhar com datas na SQL, ou seja adicionar ou subtrair dias a data atual para comparar com as que estão no banco.

A unica que não precisa é se o cliente cadastrou e já envia em seguida, pois essa só pegar pela função CURDATE

Add

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

Sub

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-sub

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.