Apple Pay 与 Google Pay 开发与结算全流程文档
Apple Pay 与 Google Pay 开发与结算全流程文档
🧩 Apple Pay 开发与结算全流程
Apple Pay 看似只是“快捷支付”,但在开发与资金结算层面,其实涉及三方:
🧩 用户(持卡人)
🏦 银行 / 发卡机构(Issuer)
💼 商户与收单机构(Acquirer)
🧭 一、整体概览:Apple Pay 支付架构
Apple Pay 本身不是支付通道,而是一个安全的"代付接口",核心特征是:
- 不直接处理资金清算
- 所有资金仍通过银行或支付机构(如银联、Stripe、Adyen)流转
- Apple 只提供安全令牌(token)机制与安全认证(Face ID / Touch ID)
📊 架构图示意:
用户 → Apple Pay → 发卡银行(Issuer)↘收单银行/支付网关(Acquirer)↘商户账户(Merchant Account)
⚙️ 二、开发集成流程(iOS App 或网页)
1. 申请 Apple Merchant ID
- 登录 Apple Developer
- 新建 Merchant ID,如:merchant.com.yourcompany.appname
- 下载并配置 Merchant Identity Certificate
2. 配置 Apple Pay 能力
在 Xcode 里:
- 打开
Signing & Capabilities - 添加 `Apple Pay"
- 选择你创建的
Merchant ID - 确保
Entitlements文件自动生成了
com.apple.developer.in-app-payments
3. 选择支付网关
Apple Pay 并不直接向你的银行汇款,它需要一个支付服务提供商(PSP / 支付网关),如:
- 国内:银联商务 / 招行一网通 / 支付宝收单 Apple Pay 通道
- 海外:Stripe / Adyen / Braintree / WorldPay
这些机构负责:
- 向 Apple 提交交易 Token
- 处理清算
- 向商户账户结算
4. 在 App 中调用 Apple Pay
使用 PKPaymentRequest 发起支付:
let paymentRequest = PKPaymentRequest()
paymentRequest.merchantIdentifier = "merchant.com.yourcompany.appname"
paymentRequest.supportedNetworks = [.visa, .masterCard, .amex]
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.countryCode = "CN"
paymentRequest.currencyCode = "CNY"
paymentRequest.paymentSummaryItems = [PKPaymentSummaryItem(label: "商品名称", amount: NSDecimalNumber(string: "100.00"))
]
调用支付:
let paymentController = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest)
paymentController.delegate = self
present(paymentController, animated: true)
支付完成后,会返回一个加密的支付令牌(Payment Token):
func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {// 获取支付令牌let paymentToken = payment.token// 发送到服务端处理
}
5. 服务端处理
App 把 token 发到你自己的服务端,服务端再转发给你的支付网关(例如银联商务、Stripe 等)进行扣款。
💰 三、商户资金流与结算流程
1. 资金流(钱如何走)
| 步骤 | 流程描述 |
|---|---|
| ① 用户付款 | 用户通过 Apple Pay 支付(其实是发卡行代扣) |
| ② 银行扣款 | 发卡行扣款并转交给收单机构(Acquirer) |
| ③ 收单清算 | 收单机构清算后汇入你的商户账户 |
| ④ 商户结算 | 商户从收单账户提现至银行账户 |
注意:Apple 从不持有你的钱;钱流在银行体系或第三方支付通道内部。
🏦 四、 商家如何收到钱
方案一:接入第三方支付网关(推荐)
最常见方式是让网关帮你处理资金结算。
流程:
- 注册 Stripe、Adyen、银联商务或支付宝收单
- 填写企业信息、银行账户
- 平台自动生成商户号
- Apple Pay 支付成功后,网关收款并周期性结算到你的银行卡
🧾 结算周期:
- Stripe / Adyen:通常 T+2 或 T+3 工作日
- 银联商务 / 支付宝:可设置 T+1 或 T+N
- Stripe 等支持实时结算(需开通 Instant Payout)
💳 资金到账:结算到你绑定的公司银行账户(人民币或外币)
方案二:自行申请银行收单账户(复杂)
如果你不想用第三方,可直接向银行申请「商户收单服务」:
流程:
- 到开户银行申请"银联 Apple Pay 收单商户"
- 银行审核企业营业执照、开户许可证
- 银行分配「商户号」
- 通过银行 SDK 或接口完成交易
- 银行按合同周期(一般 T+1 至 T+3)结算
优缺点:
| 优点 | 缺点 |
|---|---|
| 资金安全、直接结算 | 开通流程繁琐 |
| 手续费可谈 | 技术接入复杂、维护成本高 |
📆 五、结算周期与对账
| 阶段 | 内容 | 时间 |
|---|---|---|
| 扣款完成 | 用户 Apple Pay 支付成功 | 即时 |
| 清算处理 | 收单机构清算并准备打款 | T+1~T+3 |
| 商户到账 | 资金入账商户银行账户 | 按合同周期结算 |
| 对账 | 平台提供日报 / 月报文件 | 每日 / 每月 |
一般国内银行 Apple Pay 交易走银联清算通道,结算周期与银联 POS 收单一致。
🧾 六、手续费与收益分配
| 收费方 | 内容 | 范围 |
|---|---|---|
| 银行 / 收单机构 | 通道手续费 | 约 0.38% ~ 0.6% |
| Apple | 不收取交易佣金 | 免费 |
| 支付网关 | 服务费 / 汇率差 | 视平台而定 |
Apple 本身不抽成;所有费用由发卡行、收单机构或第三方支付机构收取。
🧱 七、开发安全与合规注意事项
- 不自行存储卡号等敏感信息;Apple Pay token 必须经支付网关解密
- 使用生产证书,测试证书在真实环境会被拒绝
- 商户端 HTTPS 强制开启;Apple Pay 回调需验证签名
- 遵守银联/银行 PCI-DSS 标准
- 防止订单金额被篡改:在服务端验证签名、金额与订单号一致
- 遵守各国反洗钱与 KYC(实名认证)要求
✅ 八、建议结算方案总结
| 方案 | 适用场景 | 优点 | 结算周期 |
|---|---|---|---|
| 使用 Stripe / Adyen | 海外 App 内购、跨境收款 | 接入简单 | T+2~T+3 |
| 使用 银联商务 / 支付宝 | 国内 iOS App、公众号 | 人民币直结 | T+1 |
| 银行直连 | 大型企业、金融类 App | 成本最低 | T+1~T+3 |
🎯实际建议
- ✅ 个人 / 中小团队 → 用第三方网关(如 Stripe / 支付宝)
- ✅ 大型企业 / 有金融资质 → 直接对接银行收单
- ✅ App 国际版 → Stripe / Adyen + Apple Pay 组合最优
非常好的问题 👍
Google Pay 与 Apple Pay 在“用户体验”上很像,但在 资金流转、开发集成与商户结算机制 上存在一些本质差别。
下面我会从开发者、商户结算、合规、安全、以及不同地区(如国内外)角度帮你做一份完整讲解。
🧭 一、Google Pay 支付体系概览
Google Pay 本质上是一个「支付令牌化系统」——它并不直接持有或清算资金,而是:
🔹 通过支付网关(如 Stripe、Adyen、Braintree、PayPal、Razorpay 等)完成真实资金交易。
换句话说:
💡 Google Pay 只负责“安全认证 + 卡信息加密”,
💰 钱的收取与结算是由 支付处理商(Payment Processor / PSP) 完成。
⚙️ 二、开发集成流程(Android App 或 Web)
1️⃣ 获取商户身份(Merchant ID)
- 注册 Google Pay 商户中心
- 填写企业信息、银行账户(用于结算);
- 完成身份验证(KYC)
- 获取 商户 ID(merchantId)。
2️⃣ 选择支付网关(Payment Processor)
Google Pay 不直接结算资金,必须通过下列 PSP 来处理交易:
| 支付网关 | 适用场景 | 备注 |
|---|---|---|
| Stripe | 全球最常用,简单集成 | 支持 135+ 国家 |
| Adyen | 跨境电商、App 订阅 | 高级结算功能 |
| Braintree | PayPal 旗下,适合中小商户 | 支持 Google Pay |
| Razorpay / PayU | 印度、东南亚 | 本地化强 |
| WorldPay | 欧洲 | 适合传统商户 |
💡 在中国大陆目前无法直接使用 Google Pay(因政策原因),但可通过境外支付渠道支持海外版本。
3️⃣ 前端(App / Web)集成流程
Android 端
引入依赖:
implementation 'com.google.android.gms:play-services-wallet:19.1.0'
配置请求:
val request = PaymentDataRequest.fromJson(JSONObject().apply {put("apiVersion", 2)put("apiVersionMinor", 0)put("allowedPaymentMethods", JSONArray().apply {put(JSONObject().apply {put("type", "CARD")put("parameters", JSONObject().apply {put("allowedAuthMethods", JSONArray().put("PAN_ONLY").put("CRYPTOGRAM_3DS"))put("allowedCardNetworks", JSONArray().put("VISA").put("MASTERCARD"))})put("tokenizationSpecification", JSONObject().apply {put("type", "PAYMENT_GATEWAY")put("parameters", JSONObject().apply {put("gateway", "stripe")put("stripe:version", "2020-08-27")put("stripe:publishableKey", "pk_test_xxx")})})})})
})
调用支付:
val paymentsClient = Wallet.getPaymentsClient(this, Wallet.WalletOptions.Builder().setEnvironment(WalletConstants.ENVIRONMENT_TEST).build())val task = paymentsClient.loadPaymentData(request)
Web 端(Google Pay API for Web)
在页面引入 Google Pay JS:
<script async src="https://pay.google.com/gp/p/js/pay.js"></script>
配置商户:
const paymentsClient = new google.payments.api.PaymentsClient({ environment: 'TEST' });const paymentDataRequest = {merchantInfo: {merchantId: '01234567890123456789',merchantName: 'Your Store Name'},transactionInfo: {totalPriceStatus: 'FINAL',totalPrice: '9.99',currencyCode: 'USD'},allowedPaymentMethods: [...]
};
4️⃣ 后端处理支付令牌(Payment Token)
支付成功后,Google Pay 会返回一个 加密的 Token:
{"signature": "...","protocolVersion": "ECv2","signedMessage": {"encryptedMessage": "...","ephemeralPublicKey": "...","tag": "..."}
}
你需要把这个 Token 发送给你的支付网关(例如 Stripe、Adyen)进行 解密与扣款。
示例(Stripe):
import stripe
stripe.api_key = "sk_test_..."stripe.PaymentIntent.create(amount=999,currency="usd",payment_method_data={"type": "card","card": {"token": googlePayToken}},confirm=True
)
💳 三、资金流与结算流程(商户视角)
整个资金链条如下:
用户 → Google Pay → 支付网关 (Stripe / Adyen / 银联等)↓商户结算账户↓商户银行账户
详细流程:
- 用户通过 Google Pay 发起付款;
- Google Pay 生成 支付令牌;
- 你的服务器 → 支付网关(例如 Stripe)发起扣款;
- 支付网关与发卡行(Issuer Bank)清算;
- 收单银行(Acquirer)收到资金;
- 收单机构把钱打入你的商户结算账户;
- 最后由支付网关周期性(T+N)结算到你的公司银行账户。
🏦 四、商户如何确保资金能到账?
✅ 方法一:使用支付网关(推荐)
这也是 95% 开发者选择的方案。
- 开通账户(如 Stripe、Adyen、PayPal Business);
- 提供企业信息 + 银行账户;
- 支付网关自动处理清算、代收、代付;
- 定期自动结算到你的银行卡。
优势:
- 无需直接与银行交涉;
- 自动汇率转换;
- 统一查看对账、退款、风控。
结算周期:
| 平台 | 结算周期 | 支持币种 |
|---|---|---|
| Stripe | T+2 工作日(支持实时) | 135+ 种货币 |
| Adyen | T+1~T+3 可配置 | 多币种 |
| Braintree | T+2~T+3 | 多币种 |
| Razorpay | T+2(印度本地) | INR |
✅ 方法二:直接银行收单(高级方案)
如果你是大型公司、跨境电商、金融类服务商,可以直接与银行签署「Google Pay 收单协议」。
流程如下:
- 向合作银行申请 Google Pay 收单资质;
- 银行审核公司信息、结算账户;
- 银行提供 Merchant ID;
- 自行接入 Google Pay API + 银行支付接口;
- 银行直接结算至你的账户。
优点:
- 成本更低(可与银行协商费率);
- 结算周期可控;
- 资金直达,无中间方。
缺点:
- 审核复杂;
- 开发周期长;
- 风控和对账需自建。
📆 五、结算周期与对账机制
| 阶段 | 说明 | 时间 |
|---|---|---|
| 用户支付成功 | 扣款完成 | 即时 |
| 银行清算 | 发卡行与收单行结算 | T+1 |
| 网关放款 | 支付网关入账商户账户 | T+1~T+3 |
| 商户提现 | 商户提现至银行账户 | T+2~T+5 |
💡 部分支付网关支持:
- 实时结算(Stripe Instant Payouts);
- 周期性自动汇款;
- 多币种合并结算;
- 每日结算日报。
💰 六、手续费与分润模型
| 收费方 | 内容 | 比例 |
|---|---|---|
| 银行 / 发卡机构 | 基础通道费 | 约 0.2%~0.5% |
| 支付网关 | 交易手续费 | 约 1.5%~3.0% |
| 免费 | 0%(Google 不抽成) |
⚠️ 注意:Google Pay 不直接收费,手续费由 PSP 代收。
🔒 七、合规与安全要求
- PCI DSS 合规:商户不得直接保存卡号信息;Google Pay token 必须交由 PSP 处理。
- HTTPS + 签名验证:所有支付接口必须 HTTPS,服务器端验证签名。
- 金额与订单校验:防止客户端金额被篡改。
- 风控与限额管理:部分 PSP 提供反欺诈机制(如 3DS、CVV 验证)。
- KYC 实名认证:商户必须通过网关实名认证(营业执照 + 银行账户)。
✅ 八、结算方案建议总结
| 方案 | 适用场景 | 优点 | 周期 |
|---|---|---|---|
| Stripe / Adyen / PayPal | 全球中小企业 | 简单、安全、支持多币种 | T+2~T+3 |
| Razorpay / PayU | 印度 / 东南亚市场 | 本地化强 | T+2 |
| 银行直连(Google Pay 收单) | 大型企业 / 金融类 App | 成本低,资金直达 | T+1 |
| Braintree (PayPal) | SaaS / App 内购 | 兼容性强 | T+2~T+3 |
🧾 九、完整流程总结图(说明性文字)
用户 → Google Pay (生成支付令牌)↓支付网关 (Stripe/Adyen)↓发卡行 (Issuer)↓收单行 (Acquirer)↓商户结算账户↓商户银行账户
🎯 十、实操建议
| 目标 | 推荐做法 |
|---|---|
| 想快速上线 | ✅ 用 Stripe 或 Adyen 集成 Google Pay |
| 想节省成本 | ✅ 向银行申请收单商户 |
| 想跨境收款 | ✅ 选 Stripe / Adyen,支持多币种自动结算 |
| 想国内外都支持 | ✅ 国内支付宝 / 微信,海外 Google Pay / Stripe 组合 |
— — — — — — — — — — 分析对比 — — — — — — —
📊 对比分析
Apple Pay vs Google Pay 对比
| 特性 | Apple Pay | Google Pay |
|---|---|---|
| 支持平台 | iOS, macOS, watchOS | Android, Web, Wear OS |
| 认证方式 | Face ID, Touch ID | 指纹、PIN、面部识别 |
| 支付网关 | 需要配置商户ID | 支持多种支付网关 |
| 结算周期 | T+1 到 T+3 | T+1 到 T+3 |
| 手续费 | 银行/网关收取 | 银行/网关收取 |
| 开发复杂度 | 中等 | 中等 |
选择建议
- 目标用户主要为 iOS 用户 → 优先集成 Apple Pay
- 目标用户主要为 Android 用户 → 优先集成 Google Pay
- 需要覆盖全平台 → 同时集成两者
- 跨境业务 → 考虑 Stripe/Adyen 等多币种支持
📋 实施检查清单
开发前准备
- 确定目标市场和用户群体
- 选择合适的支付网关
- 准备必要的商户资质
- 规划技术架构
开发实施
- 配置开发环境
- 集成支付 SDK/API
- 实现支付流程
- 测试支付功能
上线前验证
- 安全合规检查
- 性能压力测试
- 用户体验验证
- 业务逻辑测试
运营维护
- 监控支付成功率
- 处理用户反馈
- 定期安全更新
- 优化支付体验
本文档基于实际开发经验整理,具体实施时请参考官方最新文档和当地法规要求。
