iOS、Android 和 WP7 能否使用第三方支付平台?
结论
不能只按操作系统判断。需要先确认两个问题:应用通过哪个商店分发,以及销售的是数字内容,还是实体商品或线下服务。
- iOS / App Store:在应用内销售数字内容、会员权益或功能解锁,通常必须使用 Apple 的
In-App Purchase。实体商品和线下服务一般可以使用第三方支付。 - Android / Google Play:在应用内销售数字内容,通常必须使用
Google Play Billing。实体商品和线下服务可以使用第三方支付。部分地区或特定项目允许替代计费,但开发者需要满足 Google 的资格、申报和界面要求。 - Amazon Appstore:数字内容通常需要接入 Amazon 的应用内购买方案,实体商品等非数字交易可以使用其他支付方式。实际要求应以目标市场和当前开发者政策为准。
- Windows Phone 7(WP7):该平台及其商店已经停止服务,不适合作为新项目的支付接入目标。如果问题涉及历史应用,需要结合当时的 Marketplace 政策和具体商品类型判断,不能直接套用现在的 Microsoft Store 规则。
因此,能否接入 Stripe、PayPal 或其他第三方支付 SDK,取决于交易类型:实体商品通常允许使用,应用内数字商品通常受商店计费政策限制。
为什么会有这些限制
应用商店的支付规则主要约束在应用内消费的数字权益,例如:
- 去广告或解锁高级功能
- 游戏金币、道具和关卡
- 电子书、音乐、视频等数字内容
- 云服务容量
- 在应用内使用的订阅或会员
- 虚拟礼物、积分等数字资产
这类交易通常需要使用商店自己的购买系统,由商店处理订单、退款、税务、家庭共享和订阅管理。
以下交易通常不属于应用内数字购买:
- 电商实物
- 外卖、打车和酒店预订
- 线下课程、门票或预约服务
- 金融转账
- 面向企业客户的既有服务结算
第三方支付 SDK 即使能在技术上正常运行,也不代表可以通过商店审核。审核关注的是交易用途,而不是 SDK 能否安装或调用。
应该如何选择支付方案
1. 先确定商品类型
每一种收费项目都应单独分类,不能只给整个应用划分一个类型。
| 收费项目 | 常见支付方式 |
|---|---|
| 应用内功能解锁 | 商店内购 |
| 数字会员或内容订阅 | 商店内购,或符合特定地区的替代计费规则 |
| 游戏道具、虚拟币 | 商店内购 |
| 实体商品 | 第三方支付 |
| 打车、外卖、线下预约 | 第三方支付 |
| 跨平台已有订阅的登录使用 | 需检查对应商店对引导购买、外链和账户访问的规定 |
如果应用同时销售实体商品和数字权益,通常需要接入两套支付流程。
2. 按分发渠道分别实现
同一个 Android 应用可能通过 Google Play、Amazon Appstore 或企业渠道分发,但这些渠道的支付规则并不相同。不能因为都运行在 Android 上,就默认共用同一种结算方式。
可以为不同商店建立独立的构建变体,例如:
android {
flavorDimensions += "store"
productFlavors {
googlePlay {
dimension "store"
}
amazon {
dimension "store"
}
enterprise {
dimension "store"
}
}
}
然后在各个变体中接入对应的购买 SDK,并分别配置商品 ID、回调和凭证验证。
3. 根据商品类型路由支付
业务层需要明确区分数字商品与实体交易,不能让客户端任意选择支付渠道:
enum class ProductType {
DIGITAL,
PHYSICAL,
OFFLINE_SERVICE
}
fun checkout(productType: ProductType) {
when (productType) {
ProductType.DIGITAL -> launchStoreBilling()
ProductType.PHYSICAL,
ProductType.OFFLINE_SERVICE -> launchExternalPayment()
}
}
这只是一个架构示例。launchStoreBilling() 需要根据发行渠道调用 Apple、Google Play 或 Amazon 的购买接口,不能统一替换为第三方支付页面。
4. 在服务端验证交易
发放数字商品权益时,不能只依赖客户端回调。客户端应将交易凭据提交给服务端,再由服务端调用相应平台的接口进行验证,并对订单做幂等处理:
{
"store": "google_play",
"productId": "premium_monthly",
"purchaseToken": "TOKEN_FROM_STORE",
"transactionId": "ORDER_ID"
}
服务端至少需要检查:
- 商品 ID 是否与订单匹配
- 交易状态是否有效
- 凭据是否已经使用
- 订阅是否过期、退款或撤销
- 当前用户是否有权获得该权益
Apple、Google Play 和 Amazon 使用不同的凭据结构与验证接口,需要分别实现适配器。
各平台需要特别注意什么
iOS
“iOS 必须使用 Apple 支付”并不表示所有交易都必须通过 Apple 完成。相关限制主要针对应用内数字商品。
如果为数字权益直接嵌入第三方收银台,或者通过按钮和文案引导用户前往外部网站购买,可能会遇到审核问题。某些地区、应用类别或授权项目确实存在例外,但通常需要申请资格,并遵守专用 API、提示文案或费用方面的要求,不能默认所有应用都适用。
Apple Pay 与 In-App Purchase 也不是同一个系统。Apple Pay 主要用于实体商品和服务支付,不能用它绕过数字内容的内购要求。
Google Play
通过 Google Play 分发的应用,数字商品通常需要使用 Google Play Billing Library。侧载、企业分发或其他 Android 商店不一定受 Google Play 结算条款约束,但仍需遵守各自渠道的规则。
部分国家或地区可能提供用户选择计费或其他替代方案。具体能否使用,要看应用类别、开发者资格、用户所在地和当前政策,而且通常仍需向 Google 申报交易。
Amazon Appstore
Amazon Appstore 与 Google Play 是不同的分发渠道,不能假定 Google Play Billing 可以直接用于 Amazon 渠道的数字商品结算。通常需要接入 Amazon 的应用内购买服务,并单独维护商品目录和交易验证逻辑。
销售实体商品或线下服务时,可以考虑使用第三方支付,但发布前仍需核对 Amazon Appstore 当期的开发者协议和支付政策。
Windows Phone 7
WP7 已经退役,其 Marketplace、SDK 和商业服务已不具备现实的接入条件。历史资料中的支付政策只适用于当时的商店版本,不能用于指导现代 Windows 应用。
如果维护的是遗留程序,应优先评估迁移到当前仍受支持的平台,而不是继续设计 WP7 支付流程。
常见误区
- 支付 SDK 能运行,不代表符合上架规则。
- Android 是开放系统,不代表 Google Play 允许数字商品任意计费。
- Apple Pay 不能代替
In-App Purchase销售数字内容。 - 网页支付同样属于支付引导的一部分,不能自然规避商店规则。
- 不同商店应使用独立配置,不要把 Google Play 的商品 ID 或购买凭据用于 Amazon 构建。
- 政策会随地区、应用类别和时间变化。 提交版本前,应重新检查对应商店的最新支付政策、审核指南和开发者协议。
备注:内容仅供参考。
