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 发起支付:

swift 复制代码
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"))
]

调用支付:

swift 复制代码
let paymentController = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest)
paymentController.delegate = self
present(paymentController, animated: true)

支付完成后,会返回一个加密的支付令牌(Payment Token):

swift 复制代码
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 从不持有你的钱;钱流在银行体系或第三方支付通道内部。

🏦 四、 商家如何收到钱

方案一:接入第三方支付网关(推荐)

最常见方式是让网关帮你处理资金结算。

流程

  1. 注册 Stripe、Adyen、银联商务或支付宝收单
  2. 填写企业信息、银行账户
  3. 平台自动生成商户号
  4. 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 端

引入依赖:

groovy 复制代码
implementation 'com.google.android.gms:play-services-wallet:19.1.0'

配置请求:

kotlin 复制代码
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")
                })
            })
        })
    })
})

调用支付:

kotlin 复制代码
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:

html 复制代码
<script async src="https://pay.google.com/gp/p/js/pay.js"></script>

配置商户:

javascript 复制代码
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:

json 复制代码
{
  "signature": "...",
  "protocolVersion": "ECv2",
  "signedMessage": {
    "encryptedMessage": "...",
    "ephemeralPublicKey": "...",
    "tag": "..."
  }
}

你需要把这个 Token 发送给你的支付网关(例如 Stripe、Adyen)进行 解密与扣款。

示例(Stripe):

python 复制代码
import stripe
stripe.api_key = "sk_test_..."

stripe.PaymentIntent.create(
  amount=999,
  currency="usd",
  payment_method_data={
    "type": "card",
    "card": {"token": googlePayToken}
  },
  confirm=True
)

💳 三、资金流与结算流程(商户视角)

整个资金链条如下:

markdown 复制代码
用户 → Google Pay → 支付网关 (Stripe / Adyen / 银联等)
                                ↓
                           商户结算账户
                                ↓
                          商户银行账户

详细流程:

  1. 用户通过 Google Pay 发起付款;
  2. Google Pay 生成 支付令牌;
  3. 你的服务器 → 支付网关(例如 Stripe)发起扣款;
  4. 支付网关与发卡行(Issuer Bank)清算;
  5. 收单银行(Acquirer)收到资金;
  6. 收单机构把钱打入你的商户结算账户;
  7. 最后由支付网关周期性(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 收单协议」。

流程如下:

  1. 向合作银行申请 Google Pay 收单资质;
  2. 银行审核公司信息、结算账户;
  3. 银行提供 Merchant ID;
  4. 自行接入 Google Pay API + 银行支付接口;
  5. 银行直接结算至你的账户。

优点:

  • 成本更低(可与银行协商费率);
  • 结算周期可控;
  • 资金直达,无中间方。

缺点:

  • 审核复杂;
  • 开发周期长;
  • 风控和对账需自建。

📆 五、结算周期与对账机制

阶段 说明 时间
用户支付成功 扣款完成 即时
银行清算 发卡行与收单行结算 T+1
网关放款 支付网关入账商户账户 T+1~T+3
商户提现 商户提现至银行账户 T+2~T+5

💡 部分支付网关支持:

  • 实时结算(Stripe Instant Payouts);
  • 周期性自动汇款;
  • 多币种合并结算;
  • 每日结算日报。

💰 六、手续费与分润模型

收费方 内容 比例
银行 / 发卡机构 基础通道费 约 0.2%~0.5%
支付网关 交易手续费 约 1.5%~3.0%
Google 免费 0%(Google 不抽成)

⚠️ 注意:Google Pay 不直接收费,手续费由 PSP 代收。


🔒 七、合规与安全要求

  1. PCI DSS 合规:商户不得直接保存卡号信息;Google Pay token 必须交由 PSP 处理。
  2. HTTPS + 签名验证:所有支付接口必须 HTTPS,服务器端验证签名。
  3. 金额与订单校验:防止客户端金额被篡改。
  4. 风控与限额管理:部分 PSP 提供反欺诈机制(如 3DS、CVV 验证)。
  5. 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

🧾 九、完整流程总结图(说明性文字)

markdown 复制代码
用户 → 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
  • 实现支付流程
  • 测试支付功能

上线前验证

  • 安全合规检查
  • 性能压力测试
  • 用户体验验证
  • 业务逻辑测试

运营维护

  • 监控支付成功率
  • 处理用户反馈
  • 定期安全更新
  • 优化支付体验

本文档基于实际开发经验整理,具体实施时请参考官方最新文档和当地法规要求。

相关推荐
全栈派森2 小时前
初见 Dart:这门新语言如何让你的 App「动」起来?
android·flutter·ios
HarderCoder2 小时前
Swift 内存管理:吃透 ARC 、weak、unowned
ios·swift
Digitally3 小时前
5种将照片从iPhone传输到戴尔PC/笔记本电脑的方法
ios·电脑·iphone
ajassi20003 小时前
开源 Objective-C IOS 应用开发(三)第一个iPhone的APP
ios·开源·objective-c
Daniel_Coder9 小时前
iOS Widget 开发-9:可配置 Widget:使用 IntentConfiguration 实现参数选择
ios·swiftui·swift·widget·intents
非专业程序员Ping12 小时前
Vibe Coding 实战!花了两天时间,让 AI 写了一个富文本渲染引擎!
ios·ai·swift·claude·vibecoding
00后程序员张14 小时前
HTTP抓包工具推荐,Fiddler配置方法、代理设置与使用教程详解(开发者必学网络调试技巧)
网络·http·ios·小程序·fiddler·uni-app·webview
2501_9400940215 小时前
iphone Delta模拟器如何从夸克网盘导入游戏ROM 附游戏资源下载
游戏·ios·iphone
我命由我1234518 小时前
Android 开发 - Android JNI 开发关键要点
android·java·java-ee·android studio·android jetpack·android-studio·android runtime