FOX - WooCommerce Currency Switcher Professional

WooCommerce Subscriptions multimoneda: cuotas de alta, pruebas y renovaciones

Una configuración multimoneda de WooCommerce Subscriptions tiene más piezas móviles que una tienda normal: la cadena de precio en la página del producto, la cuota de alta, la prueba gratuita, el primer pago y las renovaciones que ocurren meses después sin que el cliente esté en el sitio. FOX incluye desde la versión 2.4.3 una capa de compatibilidad con WooCommerce Subscriptions, que se activa con un solo filtro. A continuación: la decisión que hay que tomar primero, qué hace la compatibilidad, cómo interactúan las cuotas de alta, las pruebas y los precios fijos, y las soluciones para las renovaciones, los cambios de plan y los textos "/ mes" duplicados.

Primero decide en qué moneda pagan los suscriptores

Es múltiple permitido (Is multiple allowed) en la pestaña Avanzado (Advanced) de WooCommerce → Ajustes → Moneda (WooCommerce → Settings → Currency) lo decide:

  • No: los visitantes ven precios convertidos, pero todos los pedidos se realizan en la moneda base. La suscripción y todas sus renovaciones están en la moneda base, así que WooCommerce Subscriptions no necesita nada especial. Las ventajas e inconvenientes de este modo están en mostrar los precios en la moneda local y cobrar en la moneda base.
  • Sí (Yes): el cliente paga en la moneda seleccionada y la suscripción se crea en esa moneda. Sus renovaciones deben cobrarse entonces en la misma moneda, de lo que se encarga la compatibilidad descrita más abajo. Todas las pasarelas de pago que ofrezcas deben poder cobrar cada moneda, al finalizar la compra y en las renovaciones automáticas; consulta la pasarela de pago no admite la moneda.

Activa la compatibilidad con WooCommerce Subscriptions

La compatibilidad está desactivada por defecto. Actívala con el filtro woocs_init_compatibility_woo_subscriptions:

/*
 * FOX: switch on the built-in WooCommerce Subscriptions compatibility.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woocs_init_compatibility_woo_subscriptions', '__return_true' );

FOX lee el filtro cuando WordPress se inicializa, por lo que debe estar en functions.php o en un fragmento que se ejecute en cada solicitud, no dentro de un hook posterior. Solo se carga cuando WooCommerce Subscriptions está activo. Qué cambia:

  • Las cadenas de precio de las suscripciones existentes (Mi cuenta, correos electrónicos) se muestran en la moneda propia de la suscripción. FOX cambia a esa moneda para mostrarlas, así que un cliente que abre sus suscripciones sigue navegando en esa moneda.
  • Los pedidos de renovación se crean en la moneda de la suscripción, no en la moneda que FOX tenga en el momento en que se ejecuta la renovación programada.
  • Las cadenas de la página de producto: la cuota de alta en el texto del precio se convierte al tipo de cambio actual (sin la compatibilidad muestra el importe base con el símbolo de la moneda del visitante, aunque el carrito cobra el correcto), y el precio "Desde" de las suscripciones variables se toma de la variación más barata en la moneda del visitante.
  • Las renovaciones pagadas a través del carrito: el importe almacenado en la moneda de la suscripción se convierte de nuevo a la moneda base antes de que FOX lo convierta otra vez, de modo que no se convierte dos veces.

La página de compatibilidad con WooCommerce Subscriptions describe un método más antiguo que edita archivos dentro de WooCommerce Subscriptions. Usa un solo método, no ambos: si se aplicaron esas ediciones, reinstala una copia limpia de WooCommerce Subscriptions antes de activar el filtro.

Cuotas de alta, pruebas gratuitas y precios fijos

WooCommerce Subscriptions calcula el primer pago cambiando el precio del producto: suma la cuota de alta al precio o, durante una prueba gratuita, usa solo la cuota. FOX convierte después ese importe. Lo que ocurre a continuación depende de si el producto tiene un precio fijo en la moneda del visitante.

ProductoSin precios fijosCon un precio fijo en la moneda
Precio recurrenteconvertido al tipo de cambioel precio fijo
Cuota de alta, sin pruebaprecio más cuota, convertidos juntosel primer pago es el precio fijo; la cuota se descarta
Prueba gratuita, sin cuotanada que pagar hoynada que pagar hoy
Prueba gratuita con cuota de altala cuota, convertidase cobra el precio recurrente fijo en lugar de la cuota

El motivo está en cómo funcionan los precios fijos: FOX sustituye el importe que recibe por el precio fijo, y el importe que Subscriptions envía para el primer pago ya no es el precio simple del producto. Tampoco existe un campo fijo para la propia cuota de alta. Por eso, en los productos de suscripción con cuota de alta, deja vacíos los campos de precio fijo y deja que el tipo de cambio convierta precio y cuota juntos, o elimina la cuota. Los precios fijos en suscripciones sin cuota se comportan como en cualquier otro producto; las reglas están en precio fijo por moneda en WooCommerce.

Los importes convertidos se pueden redondear con los filtros habituales de FOX; consulta redondear los precios convertidos. Redondear el precio recurrente también redondea la suma de precio más cuota del primer pago, no las dos partes por separado.

Renovaciones y pagos fallidos

WooCommerce Subscriptions crea cada pedido de renovación a partir de los importes almacenados en la suscripción, en la moneda de la suscripción. Un cambio posterior del tipo de cambio o de un precio fijo no modifica las suscripciones existentes; se aplica a las nuevas. Con la compatibilidad activada, FOX mantiene la renovación en la moneda de la suscripción, y la pasarela cobra ese pedido tal como está.

  • Las renovaciones automáticas y los reintentos cobran el pedido de renovación que ya existe, de modo que su importe y su moneda no cambian entre intentos.
  • Las renovaciones manuales y el pago de una renovación fallida pasan por el carrito. Ahí es donde un importe que ya está en la moneda de la suscripción puede convertirse por segunda vez si la compatibilidad está desactivada o si otro plugin también ajusta los precios de renovación. Una renovación de 113,99 dólares que pide unos 135 al finalizar la compra, el importe multiplicado una vez más por el tipo de cambio de euro a dólar, es este caso.
  • Cambio de moneda: una suscripción conserva la moneda en que se compró. Un cliente que quiera otra moneda necesita una suscripción nueva.

Prueba estos flujos en una copia de pruebas antes de fiarte de ellos, con solo WooCommerce, WooCommerce Subscriptions, FOX y tu pasarela activos: una suscripción nueva en una segunda moneda, una renovación automática (Procesar renovación (Process renewal) en las acciones de la suscripción), una renovación manual y el pago de una renovación fallida. Compara los totales de los pedidos con la suscripción.

Cambios de plan hacia arriba o hacia abajo e importes en el administrador

Cuando un cliente cambia a otro plan, WooCommerce Subscriptions hace un prorrateo: compara lo pagado por el periodo actual con el precio del nuevo plan. El importe pagado se almacena en la moneda de la suscripción, mientras que el cálculo espera la moneda base, de modo que a un cliente que pagó 524 PLN se le puede abonar como si hubiera pagado 524 EUR. Un síntoma relacionado aparece en el administrador: los importes de suscripciones en otra moneda se muestran con el símbolo de la moneda base, porque FOX devuelve el símbolo de su moneda actual para cada importe. Dos filtros corrigen ambos problemas:

/*
 * FOX + WooCommerce Subscriptions: correct symbols for amounts in other
 * currencies, and base-currency amounts for plan switch proration.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woocommerce_currency_symbol', function ( $symbol, $currency ) {
    global $WOOCS;
    if ( empty( $currency ) || ! isset( $WOOCS ) ) {
        return $symbol;
    }
    $currencies = $WOOCS->get_currencies();
    // An amount in a specific currency gets that currency's symbol.
    if ( $currency !== $WOOCS->current_currency && isset( $currencies[ $currency ]['symbol'] ) ) {
        return $currencies[ $currency ]['symbol'];
    }
    return $symbol;
}, 10000, 2 ); // after FOX, which uses priority 9999

add_filter( 'wcs_switch_total_paid_for_current_period', function ( $total_paid, $subscription ) {
    global $WOOCS;
    if ( ! isset( $WOOCS ) || ! $WOOCS->is_multiple_allowed ) {
        return $total_paid;
    }
    $currency   = $subscription->get_currency();
    $currencies = $WOOCS->get_currencies();
    if ( $currency === $WOOCS->default_currency || empty( $currencies[ $currency ]['rate'] ) ) {
        return $total_paid;
    }
    // Amount paid in the subscription currency, back to the base currency.
    return $total_paid / $currencies[ $currency ]['rate'];
}, 10, 2 );

El segundo filtro usa el tipo de cambio de hoy, no el del pago original, así que un abono puede diferir ligeramente del importe pagado cuando los tipos se han movido. Cuando pruebes el prorrateo, no cambies las fechas de la suscripción a mano: la fecha de inicio no se puede editar y el cálculo da entonces resultados engañosos.

Un "/ mes" repetido después del precio

En algunos temas el texto del periodo aparece dos veces, por ejemplo 9,99 / mes / mes (9.99 / month / month). Ocurre con más frecuencia con Estoy usando un complemento de caché en mi sitio (I am using cache plugin on my site) activada: FOX vuelve a dibujar el precio después de que la página se cargue, el nuevo HTML del precio que llega del servidor ya contiene el texto del periodo, y el texto del periodo de la página en caché se queda junto a él. Oculta la segunda copia con CSS (Apariencia → Personalizar → CSS adicional):

/* WooCommerce Subscriptions: hide the repeated period text */
.price .subscription-details:nth-child(2) {
    display: none;
}

Añádelo solo si el texto está realmente duplicado, y vacía la caché después. Si un tema usa una plantilla de precio distinta, inspecciona los dos elementos en el navegador y ajusta el selector. Por qué ocurre el redibujado se explica en el selector de monedas vuelve a la moneda por defecto.

Otros plugins de suscripciones y una prueba final

La compatibilidad integrada cubre solo WooCommerce Subscriptions. Otros plugins de suscripciones calculan los totales recurrentes, las cuotas y las pruebas en su propio código; estas páginas describen las adaptaciones que conocemos:

Con cualquier plugin de suscripciones, comprueba lo siguiente antes de salir en producción:

  • La página de producto, el carrito y la página de finalizar compra muestran el mismo primer pago y el mismo total recurrente en una segunda moneda.
  • La cuota de alta y la prueba se comportan igual en todas las monedas.
  • La suscripción y su primer pedido de renovación tienen la moneda en la que pagó el cliente, y la pasarela cobró la renovación en ella.
  • Una renovación manual y el pago de una renovación fallida piden el mismo importe que la suscripción.
  • Un total del carrito demasiado alto en una segunda moneda apunta a una doble conversión: consulta doble conversión de moneda en el carrito.

Si los importes siguen sin coincidir, abre un tema en el foro de soporte de FOX con tu plugin de suscripciones y su versión, los ajustes del producto y los importes que esperabas y los que obtuviste, y lo revisaremos.