Apple Pay 接入详细教程

458 查看

Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。

环境搭建好后可以在模拟器上面运行,xcode7.2.1+iPhone6SP9.2系统下,系统会绑定几种虚拟的银行卡,和几个联系人,方便调试,支付也不会发生真实的付款,真的很方便。

业务方面

首先你要明白,ApplePay和支付宝、微信支付最大的不同点:用户的资金不存放在ApplePay。

支付宝、微信支付把用户的钱从银行卡里面拿出来放到阿里腾讯公司,ApplePay没有,钱还是在银行卡里面,所以说ApplePay相当于只是一个卡包,帮你存放实体卡而已。

ApplePay里面的Pay,其实并不属于苹果的业务,只是苹果公司和银行合作产生的一种业务,如果没有银行就没有ApplePay,和银行是强关联的,和苹果公司是弱关联的。

  • 银行会喜欢ApplePay而不是喜欢支付宝、微信,为什么?
    互联网金融时代,支付宝、微信等网络支付渠道把用户的资金从银行卡拿到自己的公司账户里面,导致了银行只看到一条的资金流向是支付宝、微信,但是并不清楚用户把这些钱干嘛了,是投资了还是买买奶粉了。大数据时代这些信息是很珍贵的,(我知道一个做安全的专家从来不在网上购物,即使网上购物已经成了我们生活不可缺少的一部分,知道他怎么做吗,他让自己的秘书去网上帮自己买想要的东西,然后付现金给秘书,注意是现金,不是转账,扯远了)。通过ApplePay银行就可以了解到用户的资金流向了
  • 钱支付成功后去哪了?
    这个问题主要是因为我们没有签约之前发生了虚拟交易,客户端签约方式是和第三方支付平台签约,实体店接入ApplePay的方式是升级POS机,支持NFC的POS机,就是和银行更新合约。
    ApplePay完全不中转用户的资金,只是一个保存信用卡、借记卡信息的钱包,并且省去了用户签名的过程。所以你除了支持用户使用这种支付方式,关键还是要和银行签约。
    客户端方面,苹果目前建议是和第三方合作接入Applepay,比如银联等等,省去了一家家银行签约的过程,由第三方和一家家银行沟通事项,商户之和第三方沟通。所以签约部分就是和第三方支付平台签约了,钱会进入和第三方签约的银行卡内。
    苹果目前提供以下几个第三方平台签约
    中国银联
    连连支付
    首信易支付
    易宝支付
    银联商务

一般来说银联这些第三方支付会把ApplePay的流程代码写入到他们的SDK里面,如果说你不想了解Applepay的内部怎么实现的,就没有必要继续阅读了,你只需要去阅读第三方SDK的接入文档就行了。

准备工作

在接入Apple Pay之前,首先要申请MerchantID及对应证书。
请移步我写的申请MerchantID及对应证书详细图文教程

工程设置

bundleID设置

Capability中启用Apple Pay权限,并选择merchantID。

之后项目会多一个Applepay的配置文件ApplePayYasin.entitlements

需要引用的库

Xcode7.0以上不需要再手动添加需要引用的库了,只需要导入头文件就可以了

设备Applepay权限检测

创建支付请求PKPaymentRequest

  • 初始化PKPaymentRequest
    这里需要注意RMB的币种代码是CNY
  • 设置发票配送信息和货物配送地址信息,用户设置后可以通过代理回调代理获取信息的更新

  • 设置货物的配送方式,不需要不配置

  • 账单信息的设置
    • 每条账单的设置
      账单列表使用PKPaymentSummaryItem添加描述和价格,价格使用NSDecimalNumber
      PKPaymentSummaryItem初始化:
      label为商品名字或者是描述,amount为商品价格,折扣为负数,type为该条账单为最终价格还是估算价格(比如出租车价格预估)
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount;
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount type:(PKPaymentSummaryItemType)type NS_AVAILABLE(NA, 9_0);
    • NSDecimalNumber初始化:
      NSDecimalNumber可以使用数字初始化,也可以使用字符串。
      使用方法请移步我写的NSDecimalNumber–十进制数
    • 添加账单列表:

显示购物信息并进行支付

PKPaymentAuthorizationViewControllerDelegate代理

  • 这里还有两个类要介绍
    • PKPayment 支付成功信息
    • PKContact 联系人信息
  • 代理说明
    送货地址回调