Conector WooCommerce de AFFYNOR
Sincroniza pedidos, catálogo y devoluciones de tu tienda WooCommerce y atribuye las ventas a tus campañas de publicidad (refs de clic y ttclid de TikTok) con reconciliación automática.
1. Instalación
1.1 Crear consumer keys (permisos Read/Write)
WooCommerce → Ajustes → Avanzado → API REST → «Añadir clave». Permisos: lectura/escritura (el alta de webhooks requiere escritura). La tienda debe ser accesible por HTTPS.
1.2 Conectar desde la plataforma
En Mi Tienda → tarjeta WooCommerce, introduce la URL base de la tienda, la consumer key y el consumer secret. La conexión se valida al instante y queda activa.
1.3 Instalar el snippet de atribución
El snippet tiene dos partes: el hook PHP (functions.php o un code snippet) que pinta el pedido en la página de gracias, y el JavaScript (GTM o el theme) que registra la referencia y dispara el evento de compra.
add_action('woocommerce_thankyou', function ($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
echo '<div id="affynor-order" data-affynor-order-id="' . esc_attr($order->get_id())
. '" data-affynor-order-total="' . esc_attr($order->get_total())
. '" data-affynor-order-currency="' . esc_attr($order->get_currency()) . '" style="display:none"></div>';
}, 10);<script>!function(){var S="https://affynor.com",K="TU_SECRETO";function u(n){try{return new URLSearchParams(location.search).get(n)}catch(e){}}function c(n){try{return document.cookie.split("; ").find(function(x){return x.indexOf(n+"=")===0}).slice(n.length+1)}catch(e){}}var r=u("affynor_ref")||c("affynor_ref")||c("tiktok_ttclid");if(r){try{document.cookie="affynor_ref="+encodeURIComponent(r)+"; path=/; max-age=31536000"}catch(e){}}var b=u("fbclid")||c("affynor_fbc");if(b&&!/^fb[.]/.test(b)){b="fb.1."+Date.now()+"."+b}if(b){try{document.cookie="affynor_fbc="+encodeURIComponent(b)+"; path=/; max-age=31536000"}catch(e){}}function f(o){try{fetch(S+"/store/pixel",{method:"POST",headers:{"Content-Type":"application/json","x-affynor-pixel-secret":K},body:JSON.stringify({order_id:o.id,revenue_cents:Math.round(+o.total*100),currency:o.cur||"EUR",ref_code:r,fbclid:b})})}catch(e){}}window.affynorPixel=f;function a(){var e=document.getElementById("affynor-order");if(e)f({id:e.getAttribute("data-affynor-order-id"),total:e.getAttribute("data-affynor-order-total")||"0",cur:e.getAttribute("data-affynor-order-currency")});}if(/thank|gracias|success|pedido|confirm/i.test(location.pathname))setTimeout(a,400)}();</script>Sustituye TU_SECRETO por el secreto de píxel que se muestra en la tarjeta de la tienda conectada.
2. Atribución
El parámetro affynor_ref de la URL del anuncio (o el ttclid de TikTok) se guarda en una cookie y se adjunta al pedido en la página de gracias. El snippet guarda también el fbclid de Meta —en formato fb.1.<momento>.<fbclid>— para que la conversión pueda emparejarse con el clic en Meta. El evento queda en estado pendiente y se reconcilia automáticamente contra los pedidos sincronizados: solo las ventas verificadas se atribuyen a tus campañas.
3. Sincronización
Los webhooks de WooCommerce (order.created, order.updated, product.created, product.updated) entregan los cambios en tiempo real; un sincronizador de seguridad recorre la tienda cada 10 minutos — incluidas las devoluciones vía GET /orders/{id}/refunds — para que ningún pedido se quede sin registrar aunque el cron de WordPress falle.
4. Devoluciones
Las devoluciones se sincronizan automáticamente y se restan del revenue atribuido del mes. Un pedido totalmente devuelto se rechaza en la reconciliación: nunca genera comisión.
5. Modelo de tarifas
15% del revenue atribuido del mes, con mínimo de 129,90 €. Si el mes no tiene ventas atribuidas, no se aplica el mínimo (mes 1 gratis). El mínimo es único por merchant aunque tenga varias tiendas conectadas (por ejemplo Shopify + WooCommerce).
6. Solución de problemas
El cron de WordPress del merchant está deshabilitado o retrasado
Verificar el cron en WP; mientras tanto el sync de seguridad (cada 10 min) cubre los pedidos. Documentado en la FAQ.La variante de firma (body vs delivery_url+body) o el consumer secret no coinciden
Recalcular el HMAC con el consumer secret actual y recrear el webhook con ese secret.Consumer key revocada o sin permisos de lectura/escritura
Regenerar la clave en WooCommerce y reconectar desde la tarjeta.El snippet no disparó (adblock, cookie, página distinta a la de gracias)
Verificar el snippet en la página de gracias; el evento queda PENDING hasta que el sync lo reconcilia.7. Estado y hoja de ruta
El conector está en validación con merchants piloto: conexión, atribución y sincronización completas (Fases A–D); la validación en tiendas reales (Fase E) está en curso. La publicación como extensión en el marketplace de WooCommerce es el siguiente hito.