What's new in Wallet and Apple Pay
System & Services 进阶 26m

Wallet 与 Apple Pay 新变化

What's new in Wallet and Apple Pay

2021年6月9日

在 Apple 官方观看视频

一句话判断

Wallet 支持了 App Clip Code、新的通行证类型和订单追踪,Apple Pay 则增加了延期增强(Deffered Payment)和自动 reload —— 苹果正在把 Wallet 从”卡包”变成”万能数字容器”。

这场 Session 讲了什么

Session 覆盖了 Wallet 和 Apple Pay 在 iOS 15 中的多项更新。

Wallet 方面:新增了对 App Clip Code 的支持(扫描后直接打开 App Clip)、新的 pass 类型(酒店钥匙、企业凭证、身份验证)、以及订单追踪功能。用户在 Safari 中完成购买后,可以在 Wallet 中追踪订单状态,无需安装额外 app。

Apple Pay 方面:引入了延期增强支付(Deferred Payment),允许商家在用户确认后一段时间才扣款(如酒店押金、延迟发货的预购)。还新增了自动充值(Auto Reload),当余额低于阈值时自动扣款充值(如交通卡、储值卡)。

还讲解了 pass 文件格式(PKPass)的新字段和 Apple Pay JS / Payment Sheet 的 UI 改进。

值得深挖的点

订单追踪的 Order Tracking API。当用户在 Safari 中完成 Apple Pay 支付后,系统会自动在 Wallet 中创建一个订单追踪条目。实现方式是商家在 Apple Pay 的 payment response 中附加 orderTracking 字段,包含订单详情页 URL、订单号和状态更新 URL。用户可以在 Wallet 中直接查看物流状态。这对电商 app 来说是一个低成本的留存入口。

延期增强支付的风控考量。Deferred Payment 允许你在支付授权后延迟最多 30 天扣款。支付时只做卡片验证和额度冻结,实际扣款在后续触发。这需要商家和支付处理器支持相同的授权模式。苹果在 API 层面通过 PKDeferredPaymentRequest 来配置,但风控逻辑(如何处理冻结失败、如何处理退款)需要商家自己实现。

代码片段

创建订单追踪 Pass

import PassKit

func createOrderTrackingPass() {
    // 在 Apple Pay 完成回调中添加订单追踪信息
    let orderDetails = PKPaymentOrderDetails(
        orderTypeIdentifier: "com.mystore.order",
        orderIdentifier: "ORD-2021-12345",
        webServiceURL: URL(string: "https://api.mystore.com/orders/track")!,
        authenticationToken: "auth_token_xxx"
    )
    // 附加到支付完成回调
    // paymentToken.payment.orderDetails = orderDetails
}

配置延期支付请求

import PassKit

func setupDeferredPayment() {
    let request = PKPaymentRequest()
    request.merchantIdentifier = "merchant.com.yourstore"
    request.paymentSummaryItems = [
        PKPaymentSummaryItem(label: "酒店押金", amount: NSDecimalNumber(value: 500))
    ]

    // 配置延期支付
    let deferredPayment = PKDeferredPaymentRequest(
        paymentDescription: "酒店入住时扣款",
        deferredBillingAddress: nil,
        managementURL: URL(string: "https://hotel.example.com/manage")!,
        freeCancellationDate: Calendar.current.date(byAdding: .day, value: 2, to: Date())!,
        paymentTiming: .deferred
    )
    request.deferredPaymentRequest = deferredPayment
}

配置自动充值

import PassKit

func setupAutoReload() {
    let request = PKPaymentRequest()
    request.merchantIdentifier = "merchant.com.transport"

    // 设置自动充值:余额低于 20 元时自动充值 100 元
    let autoReload = PKAutomaticReloadPaymentRequest(
        paymentDescription: "交通卡自动充值",
        automaticReloadBillingAddress: nil,
        managementURL: URL(string: "https://transport.example.com/manage")!,
        thresholdAmount: NSDecimalNumber(value: 20),   // 触发阈值
        reloadAmount: NSDecimalNumber(value: 100)       // 充值金额
    )
    request.automaticReloadPaymentRequest = autoReload
}

最佳实践

  1. 电商 app 一定要接入 Order Tracking。用户在 Wallet 中看到订单状态会自发打开你的 app 查看,这是零成本的留存入口。只需要在 Apple Pay 回调中多加几个字段。
  2. 延期支付要给用户明确的扣款时间提示。在 Payment Sheet 中显示”将在 X 月 X 日扣款”,降低用户焦虑和退款率。
  3. pass 文件设计要用 Apple 的模板。Wallet 的 UI 有严格的布局规则,自定义 pass 时使用 pass.com.apple 前缀的统一样式,不要尝试做过于花哨的设计。

还有什么值得关注

  • Wallet 新增了对隐私友好型身份验证的支持,用户可以选择性地展示证件中的特定字段。
  • Apple Pay 的 Payment Sheet UI 在 iOS 15 中增加了优惠券和折扣码输入框。
  • 商家可以在 Payment Sheet 中展示配送方式的碳排放信息(环保标签)。
WWDC 2021