所有文章
Playbook阅读需 7 分钟

同一订阅被扣两次费,通常是用户在两个平台各付了一次,而其中只有一笔退款由你决定

用户为同一订阅被扣两次费,通常是一份通过 App Store 购买,另一份通过 Google Play 或你的网站购买。本文说明每一笔该由谁退款、会让你损失多少,以及如何阻止第二次扣费。

桌上并排放着一部 iPhone 和一部 Android 手机,旁边是一张列有两笔相同扣款的银行账单,表示用户为同一订阅被扣了两次费

要点

  • 为同一订阅被扣两次费的用户,通常是通过两个不同的商店分别购买的,例如 App Store 和 Google Play。每个商店各自独立计费、独立退款。
  • 开发者无法为 App Store 购买退款。由 Apple 决定,用户可以通过 reportaproblem.apple.com 申请,也可以通过应用用 StoreKit 的 beginRefundRequest 打开的退款页面申请。Apple 表示批准或拒绝最多需要 48 小时。
  • 在 Google Play 上,开发者可以在 Play Console 的 Order management 中退款,也可以通过 orders.refund API 退款,但该 API 无法退款超过 3 年的订单。
  • 退款 Google Play 订阅的最新一笔订单,会立即移除该订阅并取消后续续订。退款较早的订单,订阅仍保持有效。
  • Apple 会针对任何产品类型的退款申请发送 CONSUMPTION_REQUEST,包括自动续期订阅。如果用户已同意,开发者须在 12 小时内通过 Send Consumption Information 作出回应。
  • 对于 2026 年 8 月 3 日之后下的 Google Play 订单,一次拒付会让开发者损失购买金额(扣除 Play 的服务费),外加银行的拒付手续费。
  • 在 Apple 购买中设置 appAccountToken,在 Google Play 购买中设置经过混淆的账户 ID,你的服务器就能在第二次扣费发生前,识别出两份商店订阅背后是同一个用户。

Apple 和 Google 的计费系统都不会阻止同一个人在同一个月里为你的订阅分别向两家付款。用户为同一订阅被扣两次费,几乎都是这个原因。他们先在 iPhone 上订阅,后来又在 Android 平板或你的网站上订阅了一次,而你的应用没有识别出第一份方案。用户看到两笔扣款,于是写信给你。问题在于,你只能亲自退其中一笔,而且前提是那一笔不是通过 Apple 购买的。下面说明每一边如何运作、重复订阅让你损失多少,以及如何确保不再发生。

为什么用户会为同一订阅被扣两次费

每个商店只管自己的购买。Apple 负责 App Store 订阅的计费,Google 负责 Google Play 订阅的计费,你的支付服务商负责网页方案的计费。它们彼此都不知道对方存在。你的服务器是这两笔购买唯一能交汇的地方,前提是两笔购买都带有把它们关联到同一账户的 ID。

导致重复扣费的常见情况如下:

  • 用户换了手机,从 iOS 换到 Android 或反过来,因为新应用显示了付费墙,就又订阅了一次。
  • 用户在你的网站上订阅,然后安装应用但没有登录,于是应用又卖给了他一份商店订阅。
  • 用户卸载了应用,以为方案就此结束。Google 的帮助文档说明,卸载应用不会取消其 Google Play 订阅。App Store 方案也会一直续订,直到在 Apple 账户中取消为止。

“你们的应用和网站显然没有互通”

这是你会在客服邮件里读到的抱怨。从用户的角度看,这话不无道理。他们只买了一个产品,却被要求再付一次钱,感觉就像陷阱,即使双方都只是无心之失。最快的降温方式,是直接说清楚哪一笔你可以退,哪一笔需要他们去找 Apple。

每一笔扣款由谁退款

大多数客服回复就是在这里出错的。你只能承诺你能控制的事。

重复订阅的购买渠道退款由谁决定方案如何停止续订你能做什么
App Store只有 Apple,通过 reportaproblem.apple.com 或你的应用内退款页面用户在自己的 Apple 账户中取消CONSUMPTION_REQUEST,如果用户已同意,须在 12 小时内回复
Google Play,购买后 48 小时内用户可以向 Google 申请,或由你退款退款最新一笔订单会取消后续续订Google 的自助退款你无法介入
Google Play,超过 48 小时由你在 Play Console 或通过 orders.refund 退款退款最新一笔订单会取消后续续订由你决定
你的网站由你通过支付服务商退款由你在自己这边取消由你决定

开发者能为 App Store 订阅退款吗?

不能。所有 App Store 退款都由 Apple 处理。你能做的是缩短用户的路程。StoreKit 的 beginRefundRequest 会在你的应用内打开 Apple 的退款页面,购买信息和退款原因列表都已预先填好。Apple 的文档说明,App Store 批准或拒绝申请最多需要 48 小时。在应用之外,用户可以登录 reportaproblem.apple.com,选择“Request a refund”(申请退款),选择原因,再选中该订阅。

自己处理 Google Play 那一笔的退款

在 Google Play 上,主动权在你手里。在 Play Console 中打开 Order management,选择订单并退款。Play Console 帮助文档对订阅有明确说明:退款最新一笔订单,订阅会立即移除,后续续订也会取消。退款较早的订单,订阅仍保持有效。如果要自动化处理,orders.refund API 可以完成同样的工作,它支持 revoke 参数以立即终止访问权限,并且不接受超过 3 年的订单。

重复订阅让你损失多少

重复的那笔钱从来就不是你能留下的收入。真正的问题是,在退款之外还要额外付出多少。

简单的情况

假设一位用户在 App Store 和 Google Play 上都按每月 $9.99 付费,过了三个月才发现。重复扣款合计 $29.97。如果你亲自退还这三笔 Google Play 订单,你退回 $29.97,问题当天就结束。如果用户改为把 App Store 那一笔交给 Apple,退多少由 Apple 决定,你只能通过服务器通知得知结果。无论哪种方式,其中一个平台这三个月的收入都要退回去。

代价高昂的情况

真正的损失发生在用户放弃找客服、直接打电话给银行的时候。银行一旦作出决定,拒付就是最终结果。Google Play 给你一次申辩的机会,即拒付审核,你须在 24 小时内通过 orders.reviewrefund 回复。对于 2026 年 8 月 3 日之后下的 Google Play 订单,拒付败诉会让你损失购买金额(扣除 Play 的服务费),外加银行的拒付手续费。一笔你一分钟就能处理的 $29.97 退款,会变成 $29.97 再加一笔你无法控制的手续费。

在此期间你持续付出的成本

两份方案同时有效期间,你的后端服务的是一个人,看到的却是两份订阅。如果你按订阅计算席位、同步数据或调用付费的第三方 API,你可能要为同一个用户支付两倍的计算、存储和 API 调用费用。把两条记录合并,这笔开销就停止了。

一名开发者在笔记本电脑上查看客服收件箱,旁边放着一部智能手机,正在处理一笔重复订阅的退款

客服如何处理重复扣费

回复要快,并且一条消息说完。每多一个来回,用户向银行发起争议的可能性就越大。

  • 按用户的账户查找两笔购买,而不是按他们来信使用的邮箱地址查找。
  • 问他们想保留哪一份方案。通常是他们现在正在使用的设备上的那一份。
  • 如果重复订阅在 Google Play 或你的网站上,你直接退款,并告诉他们已经处理完毕。
  • 如果重复订阅在 App Store 上,引导他们前往 reportaproblem.apple.com,或者使用你应用内的退款按钮(如果你已经做了),并告诉他们在 Apple 账户设置中取消该订阅。
  • 如果 Apple 随后发来 CONSUMPTION_REQUEST 且用户已同意,须在 12 小时内回复准确的使用数据。一份从未使用过的重复方案,Apple 很容易批准退款。

如何在第二次扣费发生前阻止它

预防比任何退款都便宜,而两个商店都已经提供了相应的工具。

把每一笔购买关联到你的账户 ID

在 iOS 上,为每个账户生成一个 UUID,并作为 appAccountToken 购买选项传入。Apple 会在交易信息和订阅续订信息中返回同一个值。如果购买发生在你的应用之外,可以之后通过 Set App Account Token 接口附加或更新该令牌。在 Android 上,向 setObfuscatedAccountId 传入一个不超过 64 个字符的哈希账户 ID,绝不要传入原始个人数据。

显示付费墙之前先检查权益

在付费墙出现之前,先向你自己的服务器查询:已登录的账户是否已经在任一平台上拥有有效方案。先显示登录提示,再只对没有有效方案的账户显示付费墙。

监控同一账户下的两份有效方案

每天检查一次,找出跨商店拥有不止一份有效订阅的账户。在第一周就发现,意味着只需退一个月而不是三个月,只需发一封简短的邮件而不是应对一次拒付。

RefundHalt 会把 App Store 和 Google Play 订阅与你自己的账户 ID 对应起来,因此一个重复付费的用户,会在他的银行发现之前,就以“一个人、两份方案”的形式出现在你面前。

常见问题解答

为什么用户会为同一订阅被扣两次费?
通常是因为他们在两个平台上各买了一次,例如 App Store 和 Google Play,或者某个商店和你的网站。每个商店各自为自己的订阅计费,并不知道另一份订阅的存在,所以两份都会续订,直到其中一份被取消。
我可以为用户的 App Store 订阅退款吗?
不可以。只有 Apple 能为 App Store 购买退款。你可以用 StoreKit 的 beginRefundRequest 在应用内打开 Apple 的退款页面,或者引导用户前往 reportaproblem.apple.com。Apple 表示批准或拒绝申请最多需要 48 小时。
如何为重复的 Google Play 订阅退款?
在 Play Console 的 Order management 中退款该订单,或者调用 orders.refund API。退款最新一笔订单会立即移除订阅并取消后续续订。该 API 无法退款超过 3 年的订单。
退款订阅会同时取消订阅吗?
在 Google Play 上,退款最新一笔订单会取消后续续订,但退款较早的订单,订阅仍保持有效。在 App Store 上,是否退款由 Apple 决定,取消订阅则需要用户在自己的 Apple 账户中操作。
如何防止用户在 iOS 和 Android 上重复订阅?
为每一笔购买附加你自己的账户 ID,在 Apple 上使用 appAccountToken,在 Google Play 上使用经过混淆的账户 ID。然后在显示付费墙之前,先在你的服务器上检查该账户是否已在任一平台拥有有效方案,并请用户先登录。

来源和延伸阅读

RefundHalt

App Store 和 Google Play 退款自动驾驶

继续阅读

下一项退款请求已经在路上。

读完又一封关于未能申辩退款的支持邮件所需的时间,足够您完成 RefundHalt 设置。