Avisos
Vaciar todo

[Resuelto] Funcion para crear PDF luego de verificar pago  

 
Dimitriff
 Dimitriff
Usuario activo

Hola buenos dias.

Estoy creando una web donde solicita datos a traves de un formulario realizado con el plugin contact form 7. Luego de introducir los datos y pulsar el boton "pagar" lo redirige a la plataforma paypal para realizar el pago (hecho con el add on de contact form 7). Esto lo realiza perfecto. Ahora yo necesito que al confirmar el pago como exitoso se cree un archivo PDF con los datos de formulario y lo envie a un correo electronico (introducido en el mismo formulario). 

He instalado el plugin Send PDF for Contact Form 7 pero se activa y crea perfecto el archivo PDF pero antes de la confirmacion del pago. Es decir crea el PDF al pulsar el boton "pagar" y no despues de confirmar el pago. 

No se si es posible crear alguna funcion que haga esa accion

 

Muchas gracias

Contenido solo visible a usuarios registrados

Citar
Respondido : 17/11/2024 9:04 am
Luis Méndez Alejo
 Luis Méndez Alejo
Moderador Moderator

Hola, Dimitriff

 

Para hacer lo que comentas tendrás que implementar una solución personalizada (lo que implica programación y conocer el funcionamiento del circuito de Paypal y CF7), y la lógica para retrasar la creación del archivo PDF hasta después de recibir la confirmación del pago.

Ten en cuenta que PayPal envía una notificación llamada IPN a una URL específica de tu sitio web cuando se confirma un pago.

Puedes usar esta notificación para generar el PDF y el envío por correo.

Tendrás que comprobar que el plugin de PayPal para Contact Form 7 permite configurar una "URL de IPN personalizada".

Si no es posible configurarla directamente, necesitarás capturar la respuesta desde el controlador que usa el plugin.

Luego tendrás que configurar una URL personalizada en tu WordPress que reciba la notificación de PayPal cuando el pago se realice.

Puedes probar a añadir la siguiente función en el archivo functions.php de tu tema o en un plugin personalizado como "Code Snippet" (recomendado):


add_action('init', 'cf7_handle_paypal_ipn');

function cf7_handle_paypal_ipn() {
// Verifica si es la notificación de PayPal
if (isset($_GET['cf7_paypal_ipn']) && $_GET['cf7_paypal_ipn'] === 'true') {
// Leer datos de PayPal (simulando la IPN)
$raw_post_data = file_get_contents('php://input');
$post_data = [];
parse_str($raw_post_data, $post_data);

// Validar el pago y confirmar que sea exitoso
if ($post_data['payment_status'] === 'Completed') {
// Extraer los datos del formulario enviados
$form_data = json_decode(stripslashes($post_data['custom']), true);

// Generar el PDF usando Send PDF o una librería como DomPDF
cf7_generate_and_send_pdf($form_data);
}

exit; // Finaliza el proceso
}
}

Esta función escucha una petición con "?cf7_paypal_ipn=true", valida que el pago sea "correcto" y extrae los datos del formulario.

A continuación puedes usar el plugin "Send PDF for Contact Form 7" o una librería como "DomPDF" https://github.com/dompdf/dompdf para crear el PDF.

Te pongo un ejemplo:

function cf7_generate_and_send_pdf($form_data) {
// Cargar DomPDF
require_once __DIR__ . '/dompdf/autoload.inc.php';
use Dompdf\Dompdf;

// Crear el contenido del PDF
$html = "<h1>Datos del formulario</h1>";
foreach ($form_data as $key => $value) {
$html .= "<p><strong>$key:</strong> $value</p>";
}

// Inicializar DomPDF
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();

// Guardar el archivo PDF temporalmente
$output = $dompdf->output();
$file_path = wp_upload_dir()['path'] . '/formulario_' . time() . '.pdf';
file_put_contents($file_path, $output);

// Enviar el correo
$to = $form_data['email']; // Reemplaza con el campo del email en tu formulario
$subject = "Confirmación de Pago y Datos";
$message = "Gracias por tu pago. Adjuntamos el PDF con los detalles.";
$headers = ['Content-Type: text/html; charset=UTF-8'];
$attachments = [$file_path];

wp_mail($to, $subject, $message, $headers, $attachments);

// Eliminar el archivo temporal
unlink($file_path);
}

Verifica que el complemento de PayPal permita enviar datos personalizados en el campo "custom" (como los datos del formulario de Contact Form 7 en formato JSON).

Que tenga una opción para establecer la URL de IPN, que sería algo como:

 https://tudominio.com/?cf7_paypal_ipn=true 

Si no te permite configurar esta URL, podrías interceptar las respuestas en el código fuente del plugin y redirigirlas a tu función.

Si vas a aplicar estas pruebas, antes de pasarlo a producción, configura PayPal en "modo sandbox" para llevar a cabo pruebas sin afectar ventas reales.

También comprueba que el PDF se genere correctamente y se envíe por correo solo después de confirmar el pago.

Como verás, esta personalización que solicitas requiere conocimientos no solo del funcionamiento del circuito de validación de pagos de Paypal, sino también de cómo CF7 captura los datos y saber crear funciones y dónde añadirlas de forma correcta para no provocar un error 500 en tu sitio web.

En Webempresa y en el Foro no damos soporte sobre programación a medida, ya que excede del soporte que facilitamos.

ResponderCitar
Respondido : 17/11/2024 9:21 am

Dimitriff
 Dimitriff
Usuario activo

@alejo Muchas gracias Luis. Con la informacion que me has dado intentare contactar un programador

 

Agradecido

Feliz dia

ResponderCitar
Respondido : 17/11/2024 9:32 am
Luis Méndez Alejo
 Luis Méndez Alejo
Moderador Moderator

De nada, gracias a tí. 😊

Cualquier consulta que tengas no dudes en comunicarlo.

Cerramos el tema. Si más adelante necesitas abrirlo, dínoslo. 

Un saludo

ResponderCitar
Respondido : 17/11/2024 9:46 am

Cursos Gratuitos WordPress