Tous les articles
Guide pratique8 min de lecture

Les remboursements de modules complémentaires d'abonnement Google Play peuvent cibler un seul élément, mais votre client ne peut résilier que le pack entier

Google Play permet à un abonnement de base de porter jusqu'à 49 modules complémentaires sur un seul jeton d'achat. Voici comment fonctionnent les remboursements de modules complémentaires d'abonnement, quel appel d'API rembourse un élément sans toucher au reste, où Google le bloque et ce que chaque voie de remboursement vous coûte.

Une personne à une table de café consulte un téléphone Android à côté d'un ticket détaillé, le type d'achat groupé où les remboursements de modules complémentaires d'abonnement Google Play s'appliquent ligne par ligne

Points clés

  • La fonctionnalité d'abonnement avec modules complémentaires de Google Play regroupe un abonnement de base et jusqu'à 49 modules complémentaires, soit 50 éléments au total, dans un seul achat, et tous les éléments doivent partager la même période de facturation récurrente.
  • Les utilisateurs de Google Play ne peuvent pas résilier un seul module complémentaire depuis le centre des abonnements Play. Ils ne peuvent résilier l'abonnement de base et ses modules qu'ensemble, donc le retrait d'un module doit se faire dans l'application du développeur.
  • La méthode purchases.subscriptionsv2.revoke accepte un itemBasedRefund avec un productId. Si d'autres éléments restent actifs, Google révoque et rembourse intégralement cet élément seul, et l'abonnement continue.
  • Google bloque un remboursement par élément quand l'abonnement est dans un état de paiement refusé, quand l'élément a expiré ou n'est pas possédé, et sur les abonnements prépayés.
  • Un proratedRefund sur un abonnement avec modules complémentaires rembourse la dernière commande de chaque élément, au prorata du temps restant jusqu'au prochain renouvellement, et révoque l'accès à tous les éléments d'un coup.
  • Les notifications en temps réel pour les développeurs d'un abonnement avec modules complémentaires ne contiennent pas de subscriptionId, donc le backend doit appeler purchases.subscriptionsv2.get et lire chaque lineItem pour savoir quels éléments restent accessibles.
  • Le seul flux de remboursement Google Play qui demande des preuves au développeur est une rétrofacturation signalée pour examen via orders.reviewrefund, avec un délai de 24 heures. Pour les commandes passées après le 3 août 2026, une rétrofacturation perdue coûte au développeur le prix d'achat moins les frais de service de Play, plus les frais de la banque.

Vendez un abonnement de base avec trois modules complémentaires sur Google Play et vous pouvez rembourser n'importe lequel de ces modules sans résilier le reste. Votre client ne peut pas faire de même de son côté. Google ne laisse les utilisateurs résilier que le pack entier, donc les outils précis pour les remboursements de modules complémentaires d'abonnement Google Play sont entre vos mains, celles du développeur, et uniquement via l'API. Utilisez-les bien et vous remboursez la ligne qui pose problème. Utilisez le mauvais appel et vous remboursez, ou révoquez, tout.

Comment est construit un abonnement avec modules complémentaires

Google a annoncé le paiement multiproduit pour les abonnements lors de la conférence I/O 2025. Un seul parcours d'achat vend un abonnement de base et des modules complémentaires facultatifs, facturés ensemble selon un même calendrier. Le guide du développeur de Google fixe des limites strictes :

  • Seuls les forfaits de base à renouvellement automatique peuvent porter des modules complémentaires. Les forfaits prépayés ne le peuvent pas.
  • Tous les éléments doivent partager la même période de facturation récurrente. Des modules mensuels sur une base annuelle ne sont pas autorisés.
  • Un achat contient au maximum 50 éléments, soit une base et jusqu'à 49 modules complémentaires.
  • La fonctionnalité n'est pas disponible en Corée du Sud.

Tout repose sur un seul jeton d'achat. Quand vous appelez purchases.subscriptionsv2.get, la réponse contient une liste lineItems, avec une entrée par élément. Chaque élément de ligne a ses propres productId, expiryTime et latestSuccessfulOrderId. C'est ce dernier champ qui rend possibles les remboursements par élément : chaque élément a sa propre dernière commande.

Le prorata commence dès le premier jour

Quand un utilisateur ajoute un module complémentaire en cours de cycle, Google facture immédiatement un montant au prorata pour que le module se renouvelle à la même date que la base. L'exemple de Google est un module mensuel à $10 ajouté le 15 août après un essai de 7 jours, facturé $2.90 pour couvrir le reste du mois d'août. Un seul module peut donc avoir une première commande courte et d'un montant inhabituel avant sa première commande complète. Gardez-le en tête quand vous cherchez quelle commande un remboursement va toucher.

Votre client ne peut résilier que le pack entier

La page d'aide de Google destinée aux consommateurs est sans détour. Les utilisateurs ne peuvent résilier l'abonnement de base et les modules complémentaires qu'ensemble, et ils ne peuvent pas résilier de modules individuels depuis Google Play pour le moment. La mise en pause n'est pas disponible non plus. Si un utilisateur refuse une hausse de prix, Google résilie l'abonnement de base et tous ses modules avec lui.

Le client qui veut quitter un module complémentaire n'a donc que deux options dans le Play Store : tout résilier ou demander un remboursement. Aucune n'est bonne pour vous. Le guide de Google indique que votre application peut proposer le retrait à la place. Un module retiré expire à la fin de sa période de facturation en cours, et le reste du pack continue de se renouveler.

Les outils de remboursement des modules complémentaires d'abonnement Google Play, comparés

Google vous donne cinq façons de rendre de l'argent sur un abonnement avec modules complémentaires. Elles diffèrent par ce qu'elles remboursent et par le fait que l'accès prenne fin ou non.

OutilCe qui est rembourséCe qui arrive à l'accès
Remboursement dans la Play Console sur une commande préciseUn montant que vous choisissez sur cette commandeRien n'est révoqué
orders.refund, sans revokeLe montant total d'une commandeRien n'est révoqué
subscriptionsv2.revoke avec itemBasedRefundLa totalité du dernier prélèvement d'un élémentSeul cet élément prend fin, sauf s'il était le dernier élément actif
subscriptionsv2.revoke avec proratedRefundLa dernière commande de chaque élément, au prorata du temps restantTous les éléments prennent fin immédiatement
subscriptionsv2.revoke avec fullRefundLa totalité du dernier prélèvement de chaque élémentTous les éléments prennent fin immédiatement

Google ajoute un avertissement ferme dans son guide des modules complémentaires : n'appelez pas la méthode obsolète purchases.subscriptions.refund sur un abonnement avec modules complémentaires. Par ailleurs, orders.refund ne peut pas agir sur les commandes de plus de trois ans.

Comment se comporte itemBasedRefund

L'objet itemBasedRefund prend un champ obligatoire, productId, qui désigne l'élément à révoquer. Google décrit deux résultats :

  • D'autres éléments sont encore actifs : seul l'élément désigné est révoqué et intégralement remboursé, et l'abonnement continue.
  • Aucun autre élément n'est actif : l'élément est révoqué, intégralement remboursé, et tout l'abonnement est résilié.

Vous pouvez désigner un élément par requête. Pour rembourser deux modules complémentaires, faites deux appels.

Quand Google bloque un remboursement par élément

Google rejette un itemBasedRefund dans trois cas. L'abonnement est dans un état de paiement refusé, quel qu'il soit, ce qui couvre le délai de grâce et la suspension du compte. L'élément désigné n'est pas possédé ou a déjà expiré. Ou l'achat est un abonnement prépayé, pour lequel le retrait d'éléments n'est pas pris en charge du tout.

Ce que fait un remboursement par ID de commande

Le guide de Google précise que l'indicateur revoke de orders.refund ne met fin à l'accès que si la commande est la plus récente de l'abonnement. Sur une commande plus ancienne, le remboursement aboutit et rien n'est révoqué. La Play Console fonctionne de la même façon : remboursez la commande la plus récente et l'abonnement est supprimé, remboursez-en une plus ancienne et il reste actif. Avec des modules complémentaires, choisissez la commande à partir du latestSuccessfulOrderId du bon élément de ligne, sinon vous risquez de rembourser un autre prélèvement que celui visé.

Qui décide du remboursement, et quand on vous demande des preuves

La plupart des remboursements sur un abonnement avec modules complémentaires sont décidés sans vous, comme pour tout autre abonnement Play. Dans les 48 heures suivant un achat, l'utilisateur peut s'adresser à Google via Signaler un problème, et Google décide. Passé ce délai, Google le renvoie vers vous. Et si vous ne confirmez pas un nouvel achat d'abonnement dans les trois jours, Google rembourse automatiquement l'utilisateur et révoque l'achat.

Un seul flux vous demande votre version des faits. Quand un titulaire de carte dépose une rétrofacturation et que Google la signale pour examen par le développeur, vous recevez une PendingRefundReviewNotification et vous avez 24 heures pour appeler orders.reviewrefund avec une préférence de remboursement et des preuves d'utilisation. Les rétrofacturations elles-mêmes sont tranchées par la banque, et sa décision est définitive.

Suivre les remboursements de modules complémentaires sur votre serveur

La référence RTDN de Google liste SUBSCRIPTION_ITEMS_CHANGED pour les changements d'un élément dans un pack d'abonnement, et SUBSCRIPTION_REVOKED pour un abonnement révoqué avant sa date d'expiration. Le guide de Google indique qu'une révocation via subscriptionsv2.revoke déclenche à la fois une notification SUBSCRIPTION_REVOKED et une VoidedPurchaseNotification, et qu'elle est enregistrée dans la Voided Purchases API.

Le piège, c'est le subscriptionId. Google indique qu'il n'est pas fourni dans les RTDN des abonnements avec modules complémentaires. Ne comptez donc pas sur la notification pour savoir quel élément a changé. À chaque notification concernant un pack :

  • Appelez purchases.subscriptionsv2.get avec le purchaseToken.
  • Lisez chaque lineItem et son expiryTime. Google indique que vous devez actualiser l'expiryTime de tous les éléments, pas seulement de celui que vous attendez.
  • Accordez ou retirez l'accès par productId, pas par jeton d'achat.
  • Interrogez la Voided Purchases API en filet de sécurité. Elle couvre les 30 derniers jours.

Le délai de grâce et la suspension du compte s'appliquent au pack

Un problème de paiement touche tous les éléments à la fois. Google retient le délai de grâce le plus court parmi les éléments actifs et l'applique à tout le renouvellement. Pendant le délai de grâce, l'utilisateur conserve tous les éléments. En cas de suspension du compte, l'accès à tous les éléments est suspendu. Si le paiement n'est jamais rétabli, les éléments refusés expirent et les autres reprennent pour le reste de leurs périodes de facturation.

Le bureau d'un développeur avec un ordinateur portable affichant des graphiques de coûts serveur à côté d'une facture détaillée, où l'on suit les coûts payés derrière chaque module complémentaire d'abonnement Google Play

Ce que chaque voie de remboursement vous coûte en argent

Les modules complémentaires correspondent souvent à quelque chose que vous payez. Le stockage cloud supplémentaire vous est facturé par votre fournisseur de stockage. Un pack de crédits IA se paie en appels à l'API du modèle. Un siège supplémentaire signifie plus de calcul, et un niveau créateur peut déclencher un versement. Chacun de ces coûts survient quand l'utilisateur se sert du module, et un remboursement rend le prix sans vous rendre aucun d'eux.

Rembourser trop

L'erreur coûteuse consiste à choisir fullRefund ou proratedRefund quand la réclamation porte sur un seul module complémentaire. Les deux révoquent tous les éléments, donc vous rendez aussi le prix de la base et vous perdez un abonné qui voulait rester. Un itemBasedRefund ne rend que le dernier prélèvement de ce module. Quand il est bloqué, un orders.refund sur la dernière commande de cet élément rend l'argent sans rien interrompre.

Remboursements partiels et frais

La Play Console vous permet d'émettre des remboursements partiels sur les commandes d'abonnement, et Google indique que le pourcentage remboursé s'applique aussi à votre versement et aux frais de service. Remboursez la moitié d'une commande et la moitié des frais de Google vous revient avec. Vos propres coûts pour fournir ce module, eux, ne reviennent pas.

Rétrofacturations sur un pack

Pour les commandes passées après le 3 août 2026, Google fait porter le coût des rétrofacturations aux développeurs. Quand une rétrofacturation aboutit, vous payez le prix d'achat moins les frais de service de Play, plus les frais facturés par la banque. Une commande groupée avec plusieurs modules complémentaires représente une plus grosse commande à perdre. Des journaux d'utilisation par module, liés à l'ID de compte obscurci, sont ce que vous enverriez lors d'un examen de 24 heures.

Une checklist pour les remboursements de modules complémentaires

  • Proposez dans l'application un moyen de retirer un module complémentaire, puisque Google Play n'en propose pas.
  • Enregistrez le productId, l'expiryTime et le latestSuccessfulOrderId de chaque lineItem à chaque notification.
  • Utilisez itemBasedRefund par défaut quand le problème vient d'un seul module.
  • Quand l'abonnement est en délai de grâce ou en suspension de compte, remboursez plutôt la commande de l'élément avec orders.refund.
  • N'appelez jamais la méthode obsolète purchases.subscriptions.refund sur un pack.
  • Journalisez l'utilisation des modules par compte pour qu'un examen de rétrofacturation puisse partir en moins de 24 heures.
  • Suivez les taux de remboursement par module complémentaire, pas seulement par abonnement, pour qu'un module faible ne se cache pas dans les chiffres du forfait de base.

Questions fréquentes

Un utilisateur peut-il résilier un seul module complémentaire d'un abonnement Google Play ?
Pas depuis Google Play. La page d'aide de Google indique que les utilisateurs ne peuvent résilier l'abonnement de base et les modules complémentaires qu'ensemble. Votre application peut proposer le retrait d'un seul module, qui expire alors à la fin de sa période de facturation en cours.
Comment rembourser un module complémentaire sans résilier l'abonnement ?
Appelez purchases.subscriptionsv2.revoke avec un itemBasedRefund qui désigne le productId du module. Si d'autres éléments restent actifs, Google révoque et rembourse intégralement cet élément seul. Vous pouvez aussi rembourser la dernière commande de l'élément avec orders.refund sans l'indicateur revoke, ce qui rend l'argent sans toucher à l'accès.
Pourquoi mon appel itemBasedRefund a-t-il échoué ?
Google le bloque quand l'abonnement est dans un état de paiement refusé, quand l'élément n'est pas possédé ou a expiré, et sur les abonnements prépayés. Vérifiez l'expiryTime de l'élément de ligne et l'état de l'abonnement avant l'appel.
Un remboursement au prorata fonctionne-t-il sur un abonnement avec modules complémentaires ?
Oui, mais il révoque tout. Google rembourse la dernière commande de chaque élément, au prorata du temps restant jusqu'au prochain renouvellement, et l'accès à tous les éléments prend fin immédiatement.
Quelle RTDN m'indique qu'un module complémentaire a été remboursé ?
Le guide de Google indique que la révocation déclenche SUBSCRIPTION_REVOKED et une VoidedPurchaseNotification, et que SUBSCRIPTION_ITEMS_CHANGED couvre les changements d'un élément dans un pack. Comme le subscriptionId est absent pour les packs, appelez purchases.subscriptionsv2.get et lisez chaque lineItem pour voir ce qui a changé.

Sources et lectures complémentaires

RefundHalt

Le pilote automatique des remboursements pour l'App Store et Google Play

Poursuivre la lecture

La prochaine demande de remboursement est déjà en route.

Configurez RefundHalt dans le temps qu'il vous faudrait pour lire un nouvel e-mail d'assistance au sujet d'un remboursement que vous n'avez pas pu contester.