FOX - WooCommerce Currency Switcher Professional

WooCommerce Subscriptions multi-devises : frais, essais, renouvellements

Une configuration WooCommerce Subscriptions multi-devises comporte plus de rouages qu'une boutique ordinaire : la chaîne de prix sur la page produit, les frais d'inscription, la période d'essai gratuite, le premier paiement, et des renouvellements qui ont lieu des mois plus tard sans que le client soit sur le site. FOX intègre une couche de compatibilité avec WooCommerce Subscriptions depuis la version 2.4.3, activée par un seul filtre. Voici la décision à prendre en premier, ce que fait la compatibilité, comment les frais d'inscription, les essais et les prix fixes interagissent, ainsi que les solutions pour les renouvellements, les changements de formule et les textes « / mois » en double.

Décider d'abord dans quelle devise les abonnés paient

Plusieurs devises autorisées (Is multiple allowed) dans l'onglet Avancé (Advanced) de WooCommerce → Réglages → Devise (WooCommerce → Settings → Currency) en décide :

  • Non (No) : les visiteurs voient des prix convertis, mais chaque commande est passée dans la devise de base. L'abonnement et tous ses renouvellements sont dans la devise de base, et WooCommerce Subscriptions n'a donc besoin de rien de particulier. Les compromis de ce mode sont décrits dans afficher les prix en devise locale, facturer dans la devise de base.
  • Oui (Yes) : le client paie dans la devise sélectionnée, et l'abonnement est créé dans cette devise. Ses renouvellements doivent alors être facturés dans la même devise, ce dont se charge la compatibilité décrite ci-dessous. Chaque passerelle de paiement que vous proposez doit pouvoir facturer chaque devise, à la commande et pour les renouvellements automatiques ; consultez la passerelle de paiement ne prend pas en charge la devise.

Activer la compatibilité avec WooCommerce Subscriptions

La compatibilité est désactivée par défaut. Activez-la avec le filtre 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 lit le filtre à l'initialisation de WordPress ; il doit donc se trouver dans functions.php ou dans un extrait exécuté à chaque requête, et non dans un hook plus tardif. La compatibilité ne se charge que lorsque WooCommerce Subscriptions est actif. Ce qu'elle modifie :

  • Les chaînes de prix des abonnements existants (Mon compte, e-mails) sont affichées dans la devise propre à l'abonnement. FOX bascule dans cette devise pour les afficher ; un client qui ouvre ses abonnements continue donc à naviguer dans cette devise.
  • Les commandes de renouvellement sont construites dans la devise de l'abonnement, et non dans celle que FOX utilise par hasard au moment où le renouvellement planifié s'exécute.
  • Les chaînes de la page produit : les frais d'inscription dans le texte du prix sont convertis au taux actuel (sans la compatibilité, ils affichent le montant de base avec le symbole de la devise du visiteur, alors que le panier facture le bon), et le prix « à partir de » des abonnements variables est tiré de la variation la moins chère dans la devise du visiteur.
  • Les renouvellements payés via le panier : le montant stocké dans la devise de l'abonnement est reconverti dans la devise de base avant que FOX ne le convertisse de nouveau, afin qu'il ne soit pas converti deux fois.

La page de compatibilité avec WooCommerce Subscriptions décrit une méthode plus ancienne qui modifie des fichiers à l'intérieur de WooCommerce Subscriptions. Utilisez une seule méthode, pas les deux : si ces modifications ont été appliquées, réinstallez une copie propre de WooCommerce Subscriptions avant d'activer le filtre.

Frais d'inscription, essais gratuits et prix fixes

WooCommerce Subscriptions calcule le premier paiement en modifiant le prix du produit : il ajoute les frais d'inscription au prix ou, pendant un essai gratuit, utilise les frais seuls. FOX convertit ensuite ce montant. La suite dépend de la présence ou non d'un prix fixe dans la devise du visiteur pour le produit.

ProduitSans prix fixesAvec un prix fixe dans la devise
Prix récurrentconverti au tauxle prix fixe
Frais d'inscription, sans essaiprix plus frais, convertis ensemblele premier paiement est le prix fixe ; les frais sont ignorés
Essai gratuit, sans fraisrien à payer aujourd'huirien à payer aujourd'hui
Essai gratuit avec frais d'inscriptionles frais, convertisle prix récurrent fixe est facturé à la place des frais

La raison tient au fonctionnement des prix fixes : FOX remplace le montant qu'il reçoit par le prix fixe, et le montant que Subscriptions envoie pour le premier paiement n'est plus le simple prix du produit. De plus, il n'existe pas de champ fixe pour les frais d'inscription eux-mêmes. Pour les produits d'abonnement avec frais d'inscription, laissez donc les champs de prix fixes vides et laissez le taux convertir ensemble le prix et les frais, ou supprimez les frais. Les prix fixes sur des abonnements sans frais se comportent comme sur n'importe quel autre produit ; les règles figurent dans prix fixe WooCommerce par devise.

Les montants convertis peuvent être arrondis avec les filtres habituels de FOX ; consultez l'arrondi des prix convertis. Arrondir le prix récurrent arrondit aussi la somme prix plus frais du premier paiement, et non les deux parties séparément.

Renouvellements et paiements échoués

WooCommerce Subscriptions crée chaque commande de renouvellement à partir des montants stockés sur l'abonnement, dans la devise de l'abonnement. Une modification ultérieure du taux de change ou d'un prix fixe ne change pas les abonnements existants ; elle s'applique aux nouveaux. Avec la compatibilité activée, FOX maintient le renouvellement dans la devise de l'abonnement, et la passerelle facture cette commande telle quelle.

  • Les renouvellements automatiques et les nouvelles tentatives facturent la commande de renouvellement qui existe déjà ; son montant et sa devise ne changent donc pas d'une tentative à l'autre.
  • Les renouvellements manuels et le paiement d'un renouvellement échoué passent par le panier. C'est là qu'un montant déjà exprimé dans la devise de l'abonnement peut être converti une seconde fois si la compatibilité est désactivée ou si un autre plugin ajuste aussi les prix de renouvellement. Un renouvellement de 113,99 dollars qui réclame environ 135 à la commande, soit le montant multiplié une fois de plus par le taux euro-dollar, relève de ce cas.
  • Changement de devise : un abonnement conserve la devise dans laquelle il a été acheté. Un client qui souhaite une autre devise a besoin d'un nouvel abonnement.

Testez ces parcours sur une copie de préproduction avant de vous y fier, avec uniquement WooCommerce, WooCommerce Subscriptions, FOX et votre passerelle actifs : un nouvel abonnement dans une deuxième devise, un renouvellement automatique (Traiter le renouvellement (Process renewal) dans les actions de l'abonnement), un renouvellement manuel et le paiement d'un renouvellement échoué. Comparez les totaux des commandes avec l'abonnement.

Montées en gamme, rétrogradations et montants dans l'administration

Lorsqu'un client passe à une autre formule, WooCommerce Subscriptions applique un prorata : il compare ce qui a été payé pour la période en cours au prix de la nouvelle formule. Le montant payé est stocké dans la devise de l'abonnement, alors que le calcul attend la devise de base ; un client qui a payé 524 PLN peut donc être crédité comme s'il avait payé 524 EUR. Un symptôme voisin apparaît dans l'administration : les montants d'abonnement dans une autre devise s'affichent avec le symbole de la devise de base, car FOX renvoie le symbole de sa devise courante pour chaque montant. Deux filtres corrigent les deux problèmes :

/*
 * 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 );

Le second filtre utilise le taux du jour, et non celui du paiement d'origine ; un crédit peut donc différer légèrement du montant payé lorsque les taux ont bougé. Lorsque vous testez le prorata, ne modifiez pas les dates de l'abonnement à la main : la date de début ne peut pas être modifiée et le calcul donne alors des résultats trompeurs.

Un « / mois » répété après le prix

Sur certains thèmes, le texte de la période apparaît deux fois, par exemple 9,99 / mois / mois. Cela arrive le plus souvent lorsque J'utilise un plugin de cache sur mon site (I am using cache plugin on my site) est activé : FOX redessine le prix après le chargement de la page, le nouveau HTML du prix venant du serveur contient déjà le texte de la période, et celui de la page en cache reste à côté. Masquez la seconde copie avec du CSS (Apparence → Personnaliser → CSS additionnel) :

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

Ajoutez-le uniquement si le texte est réellement dupliqué, puis videz le cache. Si un thème utilise un autre modèle de prix, inspectez les deux éléments dans le navigateur et adaptez le sélecteur. La raison pour laquelle le redessin a lieu est expliquée dans le sélecteur de devises revient à la devise par défaut.

Autres plugins d'abonnement et test final

La compatibilité intégrée ne couvre que WooCommerce Subscriptions. Les autres plugins d'abonnement calculent les totaux récurrents, les frais et les essais dans leur propre code ; ces pages décrivent les adaptations que nous connaissons :

Pour tout plugin d'abonnement, vérifiez ceci avant la mise en production :

  • La page produit, le panier et la page de paiement affichent le même premier paiement et le même total récurrent dans une deuxième devise.
  • Les frais d'inscription et l'essai se comportent de la même façon dans chaque devise.
  • L'abonnement et sa première commande de renouvellement ont la devise dans laquelle le client a payé, et la passerelle a facturé le renouvellement dans cette devise.
  • Un renouvellement manuel et le paiement d'un renouvellement échoué réclament le même montant que l'abonnement.
  • Un total de panier beaucoup trop élevé dans une deuxième devise signale une double conversion : consultez la double conversion de devise dans le panier.

Si les montants ne correspondent toujours pas, ouvrez un sujet sur le forum de support de FOX en indiquant votre plugin d'abonnement et sa version, les réglages du produit ainsi que les montants attendus et obtenus, et nous l'examinerons.