DiploMaster/api/enviar_diploma.php

136 lines
4.2 KiB
PHP

<?php
require '../includes/config.php';
require '../fpdf/fpdf.php';
require '../fpdf/src/autoload.php';
require '../includes/mailer_config.php';
require '../vendor/autoload.php';
use setasign\Fpdi\Fpdi;
use PHPMailer\PHPMailer\Exception;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Writer\PngWriter;
header('Content-Type: application/json');
$codigo = $_GET['codigo'] ?? null;
if (!$codigo) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'Código no proporcionado']);
exit;
}
$stmt = $pdo->prepare("
SELECT
a.nombre AS alumno_nombre,
a.email AS alumno_email,
a.telefono AS alumno_telefono,
c.nombre AS curso_nombre,
c.tipo,
c.horas_trabajadas,
c.competencias,
d.fecha_emision
FROM diplomas d
JOIN alumnos_cursos ac ON d.alumno_curso_id = ac.id
JOIN alumnos a ON ac.alumno_id = a.id
JOIN cursos c ON ac.curso_id = c.id
WHERE d.codigo_unico = ?
");
$stmt->execute([$codigo]);
$diploma = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$diploma) {
http_response_code(404);
echo json_encode(['success' => false, 'error' => 'Diploma no encontrado']);
exit;
}
function t($txt) {
return iconv('UTF-8', 'windows-1252//TRANSLIT', $txt);
}
$alumno = $diploma['alumno_nombre'];
$email = $diploma['alumno_email'];
$telefono = $diploma['alumno_telefono'];
$telefonoFormateado = '52' . preg_replace('/\D/', '', $telefono);
$curso = $diploma['curso_nombre'];
$tipo = $diploma['tipo'];
$horas = $diploma['horas_trabajadas'];
$competencias = $diploma['competencias'] ?? '';
$fecha = new DateTime($diploma['fecha_emision']);
$dia = str_pad($fecha->format('d'), 2, '0', STR_PAD_LEFT);
$mes = $fecha->format('m');
$anio = $fecha->format('Y');
$host = $_SERVER['HTTP_HOST'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? "https" : "http";
$baseDir = explode('/api', $_SERVER['SCRIPT_NAME'])[0];
$validationUrl = "$protocol://$host$baseDir/certificado.php?codigo=$codigo";
$qrPath = __DIR__ . "/../temp/qr_$codigo.png";
Builder::create()
->writer(new PngWriter())
->data($validationUrl)
->size(150)
->margin(5)
->build()
->saveToFile($qrPath);
$pdf = new Fpdi();
$pdf->AddPage();
$pdf->setSourceFile(__DIR__ . '/../fpdf/formatodiploma.pdf');
$template = $pdf->importPage(1);
$pdf->useTemplate($template);
$pdf->SetTextColor(33, 37, 41);
$pdf->SetFont('Helvetica', 'B', 12);
$pdf->SetXY(0, 245);
$pdf->Cell(210, 10, t("Dr. Juan Manuel Gutiérrez Méndez"), 0, 1, 'C');
$pdf->SetFont('Helvetica', '', 11);
$pdf->Cell(210, 6, t("Director de Proyectos"), 0, 1, 'C');
$pdf->SetFont('Helvetica', 'I', 10);
$pdf->SetXY(0, 268);
$pdf->Cell(210, 6, t("Se expide en la ciudad de Xalapa, Ver., a los {$dia} días de {$mes} de {$anio}"), 0, 1, 'C');
$pdf->Image($qrPath, 10, 240, 25, 25);
unlink($qrPath);
$tempPath = "/tmp/diploma_$codigo.pdf";
$pdf->Output($tempPath, 'F');
$mail = getMailer();
$mail->addAddress($email, $alumno);
$mail->Subject = "Tu diploma del curso {$curso}";
$mail->Body = "Hola {$alumno},\n\nAdjunto encontrarás tu diploma por haber concluido satisfactoriamente el curso tipo " . ucfirst($tipo) . ": {$curso}.\n\nGracias por tu participación.\n\nPuedes validar el diploma escaneando el código QR o visitando:\n$validationUrl";
$mail->addAttachment($tempPath, "Diploma-$codigo.pdf");
try {
$mail->send();
unlink($tempPath);
$instanceId = 'instance126094';
$token = 'd7n8da6p4iixalci';
$mensajeWA = "Hola {$alumno}, hemos enviado el diploma de LANIA a tu correo personal. ¡Felicidades por concluir el curso!";
$waUrl = "https://api.ultramsg.com/$instanceId/messages/chat";
$waData = [
'token' => $token,
'to' => $telefonoFormateado,
'body' => $mensajeWA
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $waUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($waData)
]);
$waResponse = curl_exec($ch);
curl_close($ch);
echo json_encode(['success' => true, 'message' => 'Diploma enviado por correo y WhatsApp']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'error' => $mail->ErrorInfo]);
}