Edición: Referencia para Desarrolladores — Free (v2.0+) y PRO (v5.0+) | Controlador:
PRCOD_Ajax_Handler y MODALCODF_Ajax_HandlerTodas las operaciones interactivas del formulario modal (agregar al carrito, cargar el modal, consultar departamentos/ciudades, calcular tarifas de envío, aplicar Downsells, guardar carritos abandonados y crear órdenes) se ejecutan a través de admin-ajax.php protegidas mediante WordPress Nonces y firmas criptográficas HMAC-SHA256.
1. Matriz de Endpoints AJAX en Frontend (wp_ajax_* y wp_ajax_nopriv_*)
Acción AJAX (action) |
Edición | Método Controlador | Nonce Requerido | Formato de Respuesta |
|---|---|---|---|---|
cod_form_add_to_cart(Free: modalcodf_form_add_to_cart) |
PRO / Free | Cart_Handler::add_to_cart() |
modalcodf_add_to_cart_nonce (_wpnonce) |
JSON: {message, cart_hash, cart_count} |
remove_product_from_cart(Free: modalcodf_remove_product_from_cart) |
PRO / Free | Cart_Handler::remove_product() |
modalcodf_remove_product_nonce (_wpnonce) |
JSON con HTML de table-content.php y totales recalculados. |
load_modal_content(Free: modalcodf_load_modal_content) |
PRO / Free | Ajax_Handler::load_modal_content() |
modalcodf_load_modal_nonce (_wpnonce) |
HTML puro de templates/modal-content.php. |
get_shipping_methods(Free: modalcodf_get_shipping_methods) |
PRO / Free | Shipping_Handler::get_methods() |
modalcodf_shipping_methods_nonce (_wpnonce) |
HTML de radios input[name="shipping_method"] con atributo data-shipping-code firmado. |
cod_create_order(Free: modalcodf_create_order) |
PRO / Free | Order_Creator::create_standard_order() |
modalcodf_form_nonce (_wpnonce) |
JSON: {message, total_amount, success_redirect_url} |
cod_create_dropi_order |
PRO v5.0 | PRCOD_Order_Creator::create_dropi_order() |
modalcodf_form_nonce (_wpnonce) |
JSON con orden prorrateada para Dropify/Dropi. |
cod_immediate_purchase |
PRO v5.0 | PRCOD_Cart_Handler::immediate_purchase() |
modalcodf_form_nonce (_wpnonce) |
JSON: {message, redirect_url, cart_count} (para el Botón Secundario). |
load_cities / load_district |
PRO v5.0 | PRCOD_Location_Handler::load_cities() |
modalcodf_location_nonce (nonce) |
HTML de etiquetas <option> para selectores en cascada. |
load_downsell_modal_content / apply_downsell_discount |
PRO v5.0 | PRCOD_Downsell_Handler |
modalcodf_downsell_nonce (nonce) |
HTML del popup Downsell / JSON con token firmado discount_code. |
cod_save_abandoned_cart |
PRO v5.0 | PRCOD_Abandoned_Cart_Handler::save_abandoned_cart() |
modalcodf_abandoned_cart_nonce (_wpnonce) |
JSON: {message, post_id, action: 'created'|'updated'} |
2. Especificación de la Firma Criptográfica HMAC-SHA256
Para garantizar que ningún usuario pueda alterar desde el DOM el costo de envío ni los porcentajes de descuento antes de enviar el formulario, el plugin implementa validación criptográfica simétrica en el servidor:
- Derivación de Clave por Sitio (
prcod_get_secret_key()/modalcodf_get_secret_key()): Combina la sal criptográfica única de WordPress (wp_salt('nonce')) con la constante interna del plugin. - Estructura del Token de Envío (
shipping_code):$payload = $shipping_method . '[]' . $shipping_cost . '[]' . $shipping_label; $hmac = hash_hmac( 'sha256', $payload, $secret_key ); $token = base64_encode( $payload . '[]' . $hmac ); - Verificación en Tiempo Constante: Al procesar
cod_create_order, el servidor recalcula el HMAC y utilizahash_equals()para prevenir ataques de temporización (Timing Attacks). El mismo principio se aplica a los códigos de descuentodscydownsell_dscy a la verificación de precios de Upsells medianteprcod_resolve_verified_upsell_item().
Artículos Relacionados
- 🛠️ ¿Usas LiteSpeed Cache o WP Rocket? Revisa cómo configurar el TTL de los nonces en Solución de Problemas: Caché, Nonces y Logs.
- 📦 Siguiente documento: Esquema y Ejemplos del Payload JSON de Webhooks.