Tous les articles
Playbook7 min de lecture

Un client facturé deux fois pour le même abonnement a presque toujours payé sur deux plateformes, et un seul de ces remboursements dépend de vous

Quand un client est facturé deux fois pour le même abonnement, il s'agit en général d'une formule achetée sur l'App Store et d'une autre sur Google Play ou sur votre site. Voici qui peut rembourser chaque côté, ce que cela vous coûte et comment empêcher le second prélèvement.

Un iPhone et un téléphone Android côte à côte sur un bureau, à côté d'un relevé bancaire affichant deux prélèvements identiques, illustrant un client facturé deux fois pour le même abonnement

Points clés

  • Un client facturé deux fois pour le même abonnement l'a généralement acheté dans deux stores distincts, comme l'App Store et Google Play, et chaque store facture et rembourse son propre achat de façon indépendante.
  • Les développeurs ne peuvent pas rembourser les achats faits sur l'App Store. C'est Apple qui décide, via reportaproblem.apple.com ou via la fenêtre de remboursement qu'une app peut ouvrir avec beginRefundRequest de StoreKit, et Apple indique qu'il lui faut jusqu'à 48 heures pour accepter ou refuser.
  • Sur Google Play, un développeur peut rembourser une commande depuis Order management dans la Play Console ou via l'API orders.refund, qui ne peut pas rembourser les commandes de plus de 3 ans.
  • Rembourser la commande la plus récente d'un abonnement Google Play supprime immédiatement l'abonnement et annule les renouvellements à venir. Rembourser une commande plus ancienne laisse l'abonnement actif.
  • Apple envoie un CONSUMPTION_REQUEST pour les demandes de remboursement portant sur tout type de produit, y compris les abonnements à renouvellement automatique, et le développeur dispose de 12 heures pour répondre avec Send Consumption Information si le client a donné son consentement.
  • Pour les commandes Google Play passées après le 3 août 2026, une rétrofacturation coûte au développeur le prix d'achat, moins les frais de service de Play, plus les frais de rétrofacturation de la banque.
  • Associer un appAccountToken aux achats Apple et un identifiant de compte obfusqué aux achats Google Play permet à votre serveur de voir un seul client derrière deux abonnements avant que le second prélèvement n'ait lieu.

Rien dans les systèmes de facturation d'Apple ou de Google n'empêche une même personne de payer les deux pour votre abonnement le même mois. Quand un client est facturé deux fois pour le même abonnement, c'est presque toujours ce qui s'est passé. Il s'est abonné sur un iPhone, puis à nouveau sur une tablette Android ou sur votre site, et votre app n'a pas reconnu la première formule. Le client voit deux prélèvements et vous écrit. Le problème, c'est que vous ne pouvez rembourser vous-même qu'un seul des deux, et seulement s'il n'a pas été acheté via Apple. Voici comment fonctionne chaque côté, ce que le doublon vous coûte et comment éviter que cela se reproduise.

Pourquoi des clients sont facturés deux fois pour le même abonnement

Chaque store gère son propre achat. Apple facture l'abonnement App Store, Google facture celui de Google Play et votre prestataire de paiement facture la formule web. Aucun d'eux ne sait que les autres existent. Votre serveur est le seul endroit où les deux achats peuvent se rejoindre, et seulement si les deux portent un identifiant qui les rattache au même compte.

Les scénarios habituels de double facturation sont les suivants :

  • Le client change de téléphone, d'iOS vers Android ou l'inverse, et se réabonne parce que la nouvelle app affiche un paywall.
  • Le client s'abonne sur votre site, installe l'app sans être connecté, et l'app lui vend en plus un abonnement via le store.
  • Le client désinstalle l'app en pensant que cela met fin à la formule. L'aide de Google précise que désinstaller une app n'annule pas son abonnement Google Play, et une formule App Store continue de se renouveler tant qu'elle n'est pas annulée dans le compte Apple.

« Votre app et votre site ne communiquent visiblement pas »

C'est la réclamation que vous lirez dans l'e-mail au support, et du point de vue du client, elle est fondée. Il a payé pour un seul produit. Devoir le payer une seconde fois ressemble à un piège, même si c'est un accident des deux côtés. Le moyen le plus rapide de faire retomber la tension est de dire clairement quel achat vous pouvez rembourser et lequel il doit soumettre à Apple.

Qui peut rembourser chaque prélèvement

C'est là que la plupart des réponses du support se trompent. Vous ne pouvez promettre que ce que vous maîtrisez.

Où le doublon a été achetéQui décide du remboursementComment la formule cesse de se renouvelerVotre rôle
App StoreApple uniquement, via reportaproblem.apple.com ou la fenêtre de remboursement de votre appLe client l'annule dans son compte AppleCONSUMPTION_REQUEST, à traiter sous 12 heures si le client a donné son consentement
Google Play, dans les 48 heures suivant l'achatLe client peut le demander à Google, ou vous pouvez le rembourserRembourser la dernière commande annule les renouvellements à venirAucun pour le remboursement en libre-service de Google
Google Play, après 48 heuresVous, depuis la Play Console ou via orders.refundRembourser la dernière commande annule les renouvellements à venirVous décidez
Votre siteVous, via votre prestataire de paiementVous l'annulez de votre côtéVous décidez

Un développeur peut-il rembourser un abonnement App Store ?

Non. Apple gère tous les remboursements de l'App Store. Ce que vous pouvez faire, c'est raccourcir le parcours. beginRefundRequest de StoreKit ouvre la fenêtre de remboursement d'Apple dans votre app, avec les détails de l'achat et une liste de motifs déjà renseignés. La documentation d'Apple indique que l'App Store met jusqu'à 48 heures pour accepter ou refuser la demande. En dehors de l'app, le client se connecte sur reportaproblem.apple.com, choisit « Demander un remboursement », indique un motif et sélectionne l'abonnement.

Rembourser vous-même le côté Google Play

Sur Google Play, c'est vous qui avez la main. Dans la Play Console, ouvrez Order management, sélectionnez la commande et remboursez-la. L'aide de la Play Console est précise sur les abonnements : remboursez la commande la plus récente et l'abonnement est supprimé immédiatement, avec annulation des renouvellements à venir. Remboursez une commande plus ancienne et l'abonnement reste actif. Si vous automatisez, l'API orders.refund fait la même chose, accepte un indicateur revoke pour couper l'accès sur-le-champ et refuse les commandes de plus de 3 ans.

Ce que vous coûte un abonnement en double

Le doublon n'a jamais été un revenu que vous pouviez garder. La vraie question financière, c'est ce qu'il vous coûte en plus du remboursement.

Le cas simple

Imaginons qu'un client ait payé $9.99 par mois à la fois sur l'App Store et sur Google Play pendant trois mois avant de s'en rendre compte. Cela fait $29.97 de prélèvements en double. Si vous remboursez vous-même les trois commandes Google Play, vous rendez $29.97 et le problème est réglé le jour même. Si le client porte plutôt le côté App Store devant Apple, c'est Apple qui décide du montant remboursé, et vous ne l'apprenez que par les notifications de votre serveur. Dans les deux cas, les revenus d'une plateforme sur ces trois mois sont restitués.

Le cas coûteux

La vraie perte arrive quand le client renonce au support et appelle sa banque. Une rétrofacturation est définitive une fois que la banque a tranché. Google Play vous laisse une seule chance de contester, un examen de la rétrofacturation auquel vous répondez sous 24 heures via orders.reviewrefund. Pour les commandes Google Play passées après le 3 août 2026, une rétrofacturation perdue vous coûte le prix d'achat, moins les frais de service de Play, plus les frais de rétrofacturation de la banque. Un remboursement de $29.97 que vous auriez pu faire en une minute se transforme en $29.97 plus des frais que vous ne maîtrisez pas.

Ce que vous continuez de payer en attendant

Tant que les deux formules sont actives, votre backend sert une seule personne mais voit deux abonnements. Si vous comptez des sièges, synchronisez des données ou appelez des API tierces payantes par abonnement, vous payez peut-être deux fois le calcul, le stockage et les appels d'API pour un seul client. Fusionner les deux dossiers règle ce problème.

Un développeur consulte la boîte de réception du support client sur un ordinateur portable à côté d'un smartphone, en traitant le remboursement d'un abonnement en double

Comment gérer une double facturation au support

Répondez vite, en un seul message. Chaque échange supplémentaire augmente le risque d'une contestation bancaire.

  • Recherchez les deux achats à partir du compte du client, pas de l'adresse e-mail depuis laquelle il vous a écrit.
  • Demandez-lui quelle formule il souhaite garder. C'est généralement celle de l'appareil qu'il utilise actuellement.
  • Si le doublon est sur Google Play ou sur votre site, remboursez-le vous-même et confirmez-lui que c'est fait.
  • Si le doublon est sur l'App Store, orientez-le vers reportaproblem.apple.com, ou vers le bouton de remboursement de votre app si vous en avez un, et dites-lui de l'annuler dans les réglages de son compte Apple.
  • Si Apple envoie ensuite un CONSUMPTION_REQUEST et que le client a donné son consentement, répondez sous 12 heures avec des données d'utilisation exactes. Une formule en double jamais utilisée est facile à approuver pour Apple.

Comment empêcher le second prélèvement avant qu'il n'ait lieu

Prévenir coûte moins cher que n'importe quel remboursement, et les outils existent déjà dans les deux stores.

Rattachez chaque achat à votre identifiant de compte

Sur iOS, générez un UUID par compte et transmettez-le comme option d'achat appAccountToken. Apple renvoie la même valeur dans la transaction et dans les informations de renouvellement de l'abonnement. Si un achat a eu lieu hors de votre app, l'endpoint Set App Account Token vous permet d'associer ou de mettre à jour le jeton plus tard. Sur Android, transmettez à setObfuscatedAccountId un identifiant de compte haché de 64 caractères maximum, jamais des données personnelles en clair.

Vérifiez les droits d'accès avant d'afficher un paywall

Avant que le paywall n'apparaisse, demandez à votre propre serveur si le compte connecté dispose déjà d'une formule active sur une plateforme, quelle qu'elle soit. Affichez d'abord une invitation à se connecter, puis le paywall uniquement aux comptes sans formule active.

Surveillez les comptes avec deux formules actives

Lancez une vérification quotidienne des comptes ayant plus d'un abonnement actif entre les stores. Le repérer dès la première semaine, c'est rembourser un mois au lieu de trois, et envoyer un court e-mail au lieu de subir une rétrofacturation.

RefundHalt suit les abonnements App Store et Google Play par rapport à vos propres identifiants de compte, si bien qu'un client qui paie deux fois apparaît comme une seule personne avec deux formules avant que sa banque ne s'en aperçoive.

Questions fréquentes

Pourquoi un client a-t-il été facturé deux fois pour le même abonnement ?
Généralement parce qu'il l'a acheté sur deux plateformes, comme l'App Store et Google Play, ou sur un store et sur votre site. Chaque store facture son propre abonnement sans connaître l'autre, donc les deux se renouvellent jusqu'à ce que l'un soit annulé.
Puis-je rembourser un abonnement App Store à un client ?
Non. Seul Apple peut rembourser les achats faits sur l'App Store. Vous pouvez ouvrir la fenêtre de remboursement d'Apple dans votre app avec beginRefundRequest de StoreKit, ou orienter le client vers reportaproblem.apple.com. Apple indique qu'il lui faut jusqu'à 48 heures pour accepter ou refuser la demande.
Comment rembourser un abonnement Google Play en double ?
Remboursez la commande depuis Order management dans la Play Console, ou appelez l'API orders.refund. Rembourser la commande la plus récente supprime immédiatement l'abonnement et annule les renouvellements à venir. L'API ne peut pas rembourser les commandes de plus de 3 ans.
Rembourser un abonnement l'annule-t-il aussi ?
Sur Google Play, rembourser la commande la plus récente annule les renouvellements à venir, mais rembourser une commande plus ancienne laisse l'abonnement actif. Sur l'App Store, le remboursement relève de la décision d'Apple et le client annule l'abonnement depuis son compte Apple.
Comment empêcher les utilisateurs de s'abonner deux fois entre iOS et Android ?
Rattachez votre propre identifiant de compte à chaque achat, avec appAccountToken chez Apple et un identifiant de compte obfusqué sur Google Play. Vérifiez ensuite sur votre serveur s'il existe une formule active sur une plateforme avant d'afficher un paywall, et demandez d'abord à l'utilisateur de se connecter.

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.