自2014年苹果秋季发布会至今,Apple Pay推出已将近一年时间,我们对其便利性与安全性也早有耳闻,然而时至今日其使用范围仍然只限美国、英国两地区,对于在中国区的引入,我们只能报以期望。
总体来说,在应用内集成Apple Pay需要两个部分:交易授权与交易处理。交易授权在应用内进行,通过PassKit.framework所提供的接口向用户获取支付授权(payment token);而交易处理则需要授权后调用可受理交易的服务器接口(将token传入服务器进行处理),你可以选择某个支付平台来处理交易,或者也可以自己实现交易处理过程,苹果官方比较推荐前者。
准备工作:
在接入Apple Pay之前,首先要申请MerchantID及对应证书。
- 申请 MerchantID
登陆MemberCenter,选择Certificates, Identifiers & Profiles;
在Identifiers下选择Merchant IDs,点击右上角添加按钮添加Merchant ID;
输入描述信息和标识符(格式为merchant.com.company.productid),继续至完成即可。
- 本地生成CSR文件,用于请求证书。
打开钥匙串访问工具,在钥匙串访问下拉菜单选中证书助理-》从证书颁发机构请求证书;
输入appId邮件地址、名称,选择存储到磁盘,勾选让我指定秘钥对信息;
秘钥大小选择256位,算法选择ECC。
- 请求证书
进入MemberCenter,根据之前步骤找到前面申请的Merchant ID;
在这里可以编辑该项,上传之前生成的CSR文件并生成cer证书文件;
下载证书文件即可。
工程设置
在应用内集成Apple Pay,还需要引用依赖库PassKit.framework,并且在Capability中启用Apple Pay权限(在这里需要配置merchantId)。
到这里我们的准备工作就完成了,接下来开始集成Apple Pay。
创建支付请求
在真正创建支付请求之前,我们应该先对当前的支付环境进行检测,看看当前设备(iPhone6以上)、系统(iOS8.0以上)及Apple Pay设置(地区美国或英国,已添加可用的支付卡片)是否满足支付条件。
//检查当前设备是否可以支付
[PKPaymentAuthorizationViewController canMakePayments]
//检查用户是否可进行某种卡的支付,目前仅支持Amex、MasterCard与Visa三种卡
[PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks: @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa]]
在环境检测完成后即可创建支付请求。
- 设置币种、国家码及merchant标识符等基本信息
PKPaymentRequest *request=[PKPaymentRequest new];
request.currencyCode = @"USD";
request.countryCode = @"US";
request.merchantIdentifier = @"merchant.com.example";
- 设置费用项
在这里可以设置费用的各组成部分及最后结算,包括小计、运费、折扣等项,每一项包含标签字符串和金额两个属性。
//小计
NSDecimalNumber *subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2 isNegative:NO];
self.subtotal = [PKPaymentSummaryItem summaryItemWithLabel:@"Subtotal" amount:subtotalAmount];
//折扣
NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithMantissa:200 exponent:-2 isNegative:YES];
self.discount = [PKPaymentSummaryItem summaryItemWithLabel:@"Discount" amount:discountAmount];
// 合计
NSDecimalNumber *totalAmount = [NSDecimalNumber zero];
totalAmount = [totalAmount decimalNu