Edición: Referencia para Desarrolladores — Free (v2.0+) y PRO (v5.0+) | Controlador: PRCOD_Ajax_Handler y MODALCODF_Ajax_Handler

Todas 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:

  1. 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.
  2. 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 );
  3. Verificación en Tiempo Constante: Al procesar cod_create_order, el servidor recalcula el HMAC y utiliza hash_equals() para prevenir ataques de temporización (Timing Attacks). El mismo principio se aplica a los códigos de descuento dsc y downsell_dsc y a la verificación de precios de Upsells mediante prcod_resolve_verified_upsell_item().

Artículos Relacionados