You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Apple Wallet及In-App Provisioning中银行应用的已添加银行卡列表?

好问题!咱们分两部分来拆解你的疑问:

一、获取Apple Wallet中本人信用卡/借记卡列表

首先得明确:出于用户隐私保护,iOS不允许第三方应用直接读取Wallet中所有已添加银行卡的完整列表。Apple对Wallet的访问权限做了严格限制,避免用户金融敏感信息泄露。

不过,如果你的应用需要调用支付功能,可以通过PassKit框架的PKPaymentAuthorizationController引导用户选择已添加的支付卡,但你只能获取到脱敏后的卡信息(比如卡号后四位、卡品牌),拿不到完整卡号、有效期这类敏感数据。举个简单的示例代码:

import PassKit

// 先检查设备是否支持Apple Pay
if PKPaymentAuthorizationController.canMakePayments() {
    let paymentRequest = PKPaymentRequest()
    paymentRequest.merchantIdentifier = "你的商户ID" // 需提前在开发者后台配置
    paymentRequest.supportedNetworks = [.visa, .masterCard, .amex]
    paymentRequest.countryCode = "CN"
    paymentRequest.currencyCode = "CNY"
    paymentRequest.paymentSummaryItems = [PKPaymentSummaryItem(label: "测试支付", amount: 0.01)]
    
    let authController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
    authController.delegate = self
    authController.present(completion: nil)
}

// 实现代理方法获取用户选中的卡信息
extension YourViewController: PKPaymentAuthorizationControllerDelegate {
    func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
        // 获取脱敏后的卡信息,格式通常是「Visa 1234」
        let cardInfo = payment.paymentMethod.displayName
        print("用户选择的卡片:\(cardInfo)")
        completion(PKPaymentAuthorizationResult(status: .success, errors: nil))
    }
    
    func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
        controller.dismiss(completion: nil)
    }
}

要注意:这种方式只能在支付流程中触发,没法主动获取Wallet里的全部卡列表。

二、In-App Provisioning场景下,银行应用获取已添加的本人银行卡列表

如果你的应用是发卡行应用(比如银行APP),并且是通过Apple的In-App Provisioning框架把银行卡添加到Wallet的,那你可以用PassKit里的PKIssuerProvisioningController来查询当前用户已添加到Wallet的、属于你家银行的银行卡列表。

前置条件

  • 你的开发者账号已经申请了Issuer Mode权限,并且配置了对应的Merchant ID和Provisioning Profile;
  • 应用已经完成用户身份验证(比如用户登录了银行账号,并且关联了名下的银行卡)。

代码片段

import PassKit

// 先检查设备是否支持In-App Provisioning
guard PKIssuerProvisioningController.isSupported() else {
    print("当前设备不支持In-App Provisioning功能")
    return
}

let provisioningController = PKIssuerProvisioningController()
// cardIdentifiers是你银行系统中用户名下银行卡的唯一标识,需要提前通过接口获取
let userCardIdentifiers = ["用户银行卡ID_1", "用户银行卡ID_2"]

provisioningController.getStatus(forCardIdentifiers: userCardIdentifiers) { statusMap, error in
    if let error = error {
        print("获取卡片状态失败:\(error.localizedDescription)")
        return
    }
    
    // 遍历每个卡片的状态,判断是否已添加到Wallet
    for (cardId, status) in statusMap ?? [:] {
        switch status {
        case .provisioned:
            print("银行卡 \(cardId) 已成功添加到Apple Wallet")
        case .requiresUpgrade:
            print("银行卡 \(cardId) 需要进行版本升级")
        case .notProvisioned:
            print("银行卡 \(cardId) 尚未添加到Apple Wallet")
        @unknown default:
            print("银行卡 \(cardId) 处于未知状态")
        }
    }
}

关键说明

  • cardIdentifiers必须是你银行内部系统中对应用户银行卡的唯一ID,不能随便传;
  • 这个接口只能查询属于你银行发行的卡片,没法获取其他银行的卡片信息,这也是Apple隐私保护机制的一部分;
  • 返回的.provisioned状态就代表该卡已经成功添加到Wallet了。

内容的提问来源于stack exchange,提问作者S P Balu Kommuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:18