PAYATHON 2026

如何获取包含 VAT 的 Google Play Subscription 完整价格?

支付小周

结论

Google Play IAB v3 的 getSkuDetails() 无法提供适用于所有用户和地区的“最终含 VAT 价格”,客户端也不应按固定税率自行计算。

购买前,应用应直接展示 Google Play 返回的本地化 price。Google Play 会根据用户的付款资料、所在地区和当地税务规则,在结账界面确定最终支付金额。交易完成后,如需核对实际收取的商品金额和税费,应查看 Google Play Console 的财务报表或订单数据,不能根据 SKU 价格反推。

为什么不能直接计算完整价格

VAT 或销售税不只取决于商品使用的币种,还可能受以下因素影响:

  • 用户付款资料对应的国家或地区;
  • 当地采用含税定价,还是在结账时另行加税;
  • 商品类型和适用税率;
  • 用户或商家的税务身份;
  • 税率调整、四舍五入和 Google Play 的地区定价规则。

即使接口返回以下字段:

price
price_amount_micros
price_currency_code

仅凭它们也无法可靠计算最终扣款金额。例如,不能假设所有 EUR 价格都适用以下公式:

finalPrice = price_amount_micros * 1.20

用户适用的税率未必是 20%。在采用含税展示的市场中,面向用户显示的价格可能已经包含税费,再次加税会导致计算错误。

购买前应如何展示价格

使用旧版 IAB v3 时,应优先展示 getSkuDetails() 返回的 price。这个字段已经根据用户的 Google Play 地区完成币种和格式本地化。

String formattedPrice = skuDetails.getString("price");
String currencyCode = skuDetails.getString("price_currency_code");
long priceAmountMicros = skuDetails.getLong("price_amount_micros");

priceTextView.setText(formattedPrice);

不要通过 price_amount_micros 自行拼接货币符号。不同地区的小数位数、符号位置和数字格式可能不同。

使用较新的 Google Play Billing Library 时,可以从 ProductDetails 获取格式化价格。订阅商品的价格位于相应 offer 的 pricing phases 中:

val productDetails: ProductDetails = /* queryProductDetailsAsync 返回的结果 */

val pricingPhase = productDetails
    .subscriptionOfferDetails
    ?.firstOrNull()
    ?.pricingPhases
    ?.pricingPhaseList
    ?.firstOrNull()

val formattedPrice = pricingPhase?.formattedPrice
priceTextView.text = formattedPrice ?: ""

订阅可能包含免费试用、首期优惠价和后续续订价,不能默认第一个 pricing phase 就是长期续订价格。应根据用户实际选择的 offerToken,展示完整的价格阶段。

获取实际成交金额

如果需要对账、开票或统计收入,应在购买完成后通过服务端处理:

  1. 客户端取得 purchaseToken 和 productId。
  2. 将购买凭证提交到自己的服务器。
  3. 服务器调用 Google Play Developer API 验证购买状态。
  4. 使用 Google Play Console 提供的订单或财务报表,核对实际销售额、税费、退款和平台费用。

购买验证接口主要用于确认购买状态、有效期和确认状态等信息。不能把其中的商品价格字段直接视为税务报表中的最终实收金额。具体有哪些字段,取决于商品类型和使用的 Google Play Developer API 版本。

注意事项

  • 不要根据币种判断用户所在国家,例如 EUR 覆盖多个采用不同 VAT 税率的地区。
  • 不要在客户端维护 VAT 税率表,税率和适用规则可能发生变化。
  • 不要把 price_amount_micros 直接视为最终扣款金额。
  • 购买按钮附近可以展示 Google Play 返回的本地化价格,最终金额以 Google Play 结账界面为准。
  • 订阅价格需要区分试用期、优惠期、基础方案和续订价格。
  • 如需向用户提供税务凭证,应使用 Google Play 提供的收据或订单信息,不要由应用自行生成税额。

备注:内容仅供参考。