所有文章
Playbook阅读需 7 分钟

你可以自己给 Google Play 订单退款,在拒付发生前处理还能省下银行手续费

对任何三年以内的 Google Play 订单,你都可以用一次 API 调用退款,退款时可选择是否撤销访问权限。在争议演变成拒付之前自己先退款,能省下从 2026 年 8 月 3 日起落到开发者头上的银行手续费。下面讲讲 orders.refund 的用法。

黄昏时分的开发者办公桌,一部手机上显示着订单管理仪表盘,示意如何自己给 Google Play 订单退款

要点

  • Google Play Developer API 中的 `orders.refund` 接口让开发者可以直接为任何一次性购买或订阅订单退款,无需审核、无需理由,也不需要客户提出请求。
  • 退款和撤销是两个独立的操作。`orders.refund` 接受一个可选的 `revoke` 标志。不设置它,买家保留访问权限;设为 true,Google 会立即终止对该项目的访问。
  • 超过三年的订单无法通过 Google Play Developer API 退款。一旦这个窗口关闭,该订单就永远无法处理了。
  • `orders.refund` 只能进行全额退款。对订阅进行按比例的部分退款需要使用较新的 `purchases.subscriptionsv2.revoke` 接口,并带上 `proratedRefund` 上下文。
  • 在为订阅订单退款时将 `revoke` 设为 true,会触发一条 `SUBSCRIPTION_REVOKED` Real-time Developer Notification,因此你的后端能像获知其他订阅事件一样获知这次撤销。
  • 从 2026 年 8 月 3 日起,拒付时 Google 会把购买价款加上银行手续费一并转嫁给开发者。你自己发起的退款只退回购买价款,所以对一笔前景不妙的订单提早退款,可能比让它变成拒付更省钱。
  • 开发者发起的退款是唯一一种你完全掌控的 Google Play 退款流程。48 小时自助退款、客服退款和作废购买都是在没有你参与的情况下决定的。

你不必等到客户提出争议。如果你想把钱退回去,你可以自己直接为 Google Play 订单退款,只需一次 API 调用,或在 Play Console 里点两下。Google 不会问你为什么,也不会质疑你。这是唯一一种由你按下按钮的退款流程,而提早使用它,赶在争议固化成银行拒付之前,往往是代价最小的出路。

唯一真正由你掌控的退款流程

Google Play 上大多数退款是发生在你身上的,而不是经由你完成的。买家在 48 小时内向 Google 提出,就能获得自动的自助退款,无需开发者介入。客服人员可以发起退款,且一经发放即为最终结果。银行拒付是在持卡人和其银行之间决定的。在所有这些情形里,你都只是一个事后才知情的旁观者。

开发者退款是个例外。在这里,是你决定把钱退回去,按你自己的节奏,出于你自己的理由。它是一种善意工具,一种客户服务工具,同时也悄然是一种成本控制工具。准确了解它的行为方式,才能让它从一个应急按钮变成一个深思熟虑的选择。

orders.refund 在一次调用里做了什么

Google Play Developer API 中的 orders.refund 方法为单个订单退款,无论该订单是一次性应用内购买还是订阅付款。你向该订单的退款路径发送一个空的 POST,用你的服务账号进行认证,调用成功后返回一个空的响应体。这就是全部机制。

revoke 标志决定他们是否保留访问权限

这次调用给你的唯一选择就是 revoke 查询标志。Google 的参考文档直白地说明了它的作用:若设为 true,将立即终止对该订阅或应用内项目的访问权限。省略它,钱退回去而客户保留其所购买的一切。这一个布尔值,就是友好退款和干净取消之间的区别。

调用的组成部分
方法和路径POST /androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund
packageName你的应用 id,例如 com.acme.app
orderId购买时向买家显示的订单 id
revoke可选的查询标志。true 会立即终止访问,省略它则退款并保留访问权限
请求体
OAuth 范围https://www.googleapis.com/auth/androidpublisher

默认全额退款,仅订阅可按比例退款

orders.refund 退回整笔订单金额。它没有用于部分金额的字段。如果你需要退回订阅的一部分,就用较新的 purchases.subscriptionsv2.revoke 接口,它接受一个撤销上下文,可以根据周期内剩余的时间发起全额退款或按比例退款。较旧的 purchases.subscriptions.revoke 只做全额退款,这正是 v2 方法存在的主要原因。对于一次性订单,2018 年 3 月之后的购买可以通过 Play Console 网站进行部分退款,付费应用则一律不可。

一张纸质收据放在一张信用卡旁边,代表一次自行发起的 Google Play 退款

三年之墙和其他限制

硬性边界是时间。Google 明确指出,超过三年的订单无法退款。一旦订单越过这条线,就没有申诉、也没有例外,所以退款是一个带有到期日的决定。还有另外几项限制,界定了这次调用能做什么、不能做什么。

限制含义
三年时限超过三年的订单无法通过 API 退款
仅全额orders.refund 退回整笔订单金额,绝不退部分金额
部分退款订阅可通过 purchases.subscriptionsv2.revoke 处理,一次性订单可对 2018 年 3 月之后的购买通过 Play Console 处理,付费应用一律不可
不可逆退款一经发起便无法撤销

这在钱上为你省下什么

在你按下按钮之前,每一笔退款其实已经是一笔损失,因为你为服务这次购买所花的钱不会随退款回来。如果买家生成了图像、对你的模型发起了 API 调用、消耗了存储,或触发了向第三方的付款,那些成本已经花掉,而且花掉就是花掉。退款只是决定谁来承担在此之上的售价。

自己发起退款的理由,在于如果你不这么做会发生什么。Google 的文档说得很明确:从 2026 年 8 月 3 日起,当客户向其银行就一笔扣款提出争议时,Google 会把购买价款和银行的拒付手续费转嫁给开发者。你通过 orders.refund 发起的退款只退回购买价款。所以对于一笔你本就预计会损失的订单,自行退款比拒付正好少了那笔银行手续费,而且它会在事态升级之前把案子了结。

自行退款在其他退款流程中处于什么位置

把开发者退款和其他所有能从你账户里拉走钱的方式放在一起看会更清楚。这些流程里只有两种会征询你的意见,而只有一种让你能自己发起退款。

退款流程由谁决定你的掌控度
开发者退款(orders.refund完全。你决定是否退、何时退
48 小时自助退款Google无。Google 自动退款
客服退款Google 或 Apple 客服无。一经发放即为最终结果
拒付审查(orders.reviewrefundGoogle,依据你的证据仅有一个 24 小时的举证窗口
Voided Purchases API无人,它是只读的无。你只能读取已经发生的事

如何从头到尾给 Google Play 订单退款

从 Play Console

  • 打开 Play Console,在左侧菜单中选择订单管理。
  • 通过订单 id 或买家的完整电子邮件地址找到该订单。
  • 在价格下方,选择退款并挑选一个退款理由。如果你需要部分退款,请使用网站,而不是移动应用。

从 API

  • 认证一个持有 androidpublisher 范围且在 Play Console 中拥有财务权限的服务账号。
  • 向该订单的退款路径发送一个空的 POST,仅当你也想切断访问时才加上 revoke=true
  • 处理那个空的成功响应;如果你撤销了一个订阅,请预期一条 SUBSCRIPTION_REVOKED 通知会到达你的后端。

开发者退款是一件小而锋利的工具。它让你有一种干净的方式来让客户得到应有的补偿,也提供了一条比拒付更省钱的退路,尤其对一笔你本就要损失的订单。唯一的规则是要有意识地使用它,把 revoke 标志设成你真正想要的样子。

常见问题解答

我能在不取消客户访问权限的情况下给 Google Play 订单退款吗?
可以。调用 `orders.refund` 并不设置 `revoke` 标志。买家拿回钱,同时保留对该项目的访问权限。仅当你也想立即终止对该购买的访问时,才把 `revoke` 设为 true。
在 Google Play 上,我最多能退多久以前的订单?
自购买之日起最多三年。Google Play Developer API 指出,超过三年的订单无法退款,而且那个窗口一旦关闭就没有例外。
orders.refund 支持部分退款吗?
不支持。`orders.refund` 只发起全额订单退款。若要对订阅进行部分或按比例退款,请使用带 `proratedRefund` 上下文的 `purchases.subscriptionsv2.revoke`,或对符合条件的一次性订单通过 Play Console 发起部分退款。
当我在退款时撤销一个订阅,我的后端会知道吗?
会。在为订阅订单退款时将 `revoke` 设为 true,会触发一条 `SUBSCRIPTION_REVOKED` Real-time Developer Notification,因此你的服务器可以像处理其他订阅事件一样更新权益。
自己给订单退款是否比让它变成拒付更好?
从纯成本角度看,往往是的。从 2026 年 8 月 3 日起,一次拒付会让开发者损失购买价款加上银行手续费,而你自己发起的退款只退回购买价款。如果一笔订单明显会走向争议,提早退款可以避免那笔额外的银行手续费。

来源和延伸阅读

RefundHalt

App Store 和 Google Play 退款自动驾驶

继续阅读

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

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