iOS开发-Apple Pay-苹果支付

前言 - 什么是Apple Pay

Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的一种基于NFC(近场通讯)的手机支付功能,2016年2月18日凌晨5点,Apple Pay业务在中国上线。
它的支付方式是通过Touch ID/Passcode验证方式,用户可使用事先已经储存在IPhone 6 ,6p或者更新设备上的银行卡支付证书来授权支付,当然最新的5e,同样支持Apple Pay支付。
也就是说你的苹果设备要在IOS8.0及以上版本,并在wallet应用中,添加银行卡信息,从而使用Apple Pay。
它所支持的银行可以到官方查看,这里给出官方链接
手机怎么添加银行卡,这里不过多介绍,只需要按照手机提示即可。

和支付宝和微信等第三方支付的区别?

首先Apple Pay支付必须要Iphone手机,并且不低于iphone6。
但是Apple Pay对于支付无需联网也可以使用,使用的是NFC近场通讯。
对于支付宝和微信,他们的功能可以说更多,不光支付,还可以进行理财、转账等一系列的玩法,这是因为我们已经将钱转给第三方,而Apple Pay的钱从始至终都在你自己的银行卡里,它所储蓄的只是你银行卡的电子信息,当你进行支付的时候,相当于你与银行直接对接,不会讲钱在经过别的第三方,从而安全性,是支付宝,微信等第三方不可比的。
它的付款流程如下图:

集成

Apple Pay的集成可以说是相当的简单的,只不过在这里需要我们用到证书,苹果也给出了Apple Pay的集成教程,地址在这里.

这里怎么添加证书我只简单的说一下,大家应该都很熟了

1.登录开发者账号,添加App ID(记得勾选下面的Apple Pay)
2.添加Merchant IDs
3.将创建的App ID里面的Apple Pay设置自己的Merchant IDs
4.检查App ID里面的Apple Pay的两个选项是否都为绿色
5.创建Merchant证书,绑定App ID并安装

Apple Pay原理图:

设置Xcode

在Xcode中,将Capabilities中的Apple Pay开启

中间会生成你设置的App ID,将其勾选。

判断当前设备是否可以支付?

首先我们要导入头文件import PassKit.

添加判断代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14

//判断设备是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判断是否添加了银行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{


}else
{

}

创建支付按钮

但我们判断了设备时候支持支付和是否添加银行卡后,我们需要再次创建按钮,这里用到的不是UIButton而是PKPaymentButton 代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//判断设备是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判断是否添加了银行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{
//创建跳转按钮
let btn = PKPaymentButton.init(type: PKPaymentButtonType.SetUp, style: PKPaymentButtonStyle.WhiteOutline)
btn.addTarget(self, action: #selector(ViewController.jumpBankCard), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)

}else
{
//创建支付按钮
let btn = PKPaymentButton.init(type: PKPaymentButtonType.Buy, style: PKPaymentButtonStyle.Black)
btn.addTarget(self, action: #selector(ViewController.buyShop), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)
}

分别创建了两个按钮, 一个在没用添加银行卡的情况下, 另一个是全部通过, 支付按钮

这里我们在 跳转银行卡方法 代码如下

1
2
3
4
5
//跳转添加银行卡页面
func jumpBankCard(){
PKPassLibrary().openPaymentSetup()
print("跳转设置界面")
}

开始支付请求

支付请求按钮 ,里面要特别说明一下,在方法里面,虽然我们可以直接创建支付请求let request = PKPaymentRequest(),并用PKPaymentAuthorizationViewController跳转,但是这样会直接崩溃,因为你的支付请求里面没有添加信息
直接看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//购买
func buyShop(){
print("开始购买")
//1.创建支付请求
let request = PKPaymentRequest()
//2.配置商家ID
request.merchantIdentifier = "yimouelng.com";
//3.配置货币代码和国家代码
request.countryCode = "CN";
request.currencyCode = "CNY";
//4.配置请求支持的支付网络
request.supportedNetworks = [PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
//5.配置处理方式
request.merchantCapabilities = PKMerchantCapability.Capability3DS
//6.配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱
let num = NSDecimalNumber.init(string:"988")

let item = PKPaymentSummaryItem.init(label: "商品", amount: num)
request.paymentSummaryItems = [item]


//附加选项(选填) --------
request.requiredBillingAddressFields = PKAddressField.All//添加收货地址

request.requiredShippingAddressFields = PKAddressField.All//运输地址

//添加快递
let price = NSDecimalNumber.init(string:"988")
let method = PKShippingMethod.init(label: "顺丰", amount: price)
method.identifier = "sf"
method.detail = "货到付款"//备注
request.shippingMethods = [method]

request.applicationData = "id = 1" .dataUsingEncoding(NSUTF8StringEncoding)//添加附加数据

//7.验证用户的支付请求并跳转支付页面
let auth = PKPaymentAuthorizationViewController.init(paymentRequest: request)
self.presentViewController(auth, animated: true, completion: nil)
}

这里附加选项里面的可填可不填,但是上面的内容必填

这里需要注意的是 第6步是配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱
比如你添加了三个商品,前两个每个都是10元, 而最后一个名字最好使用商家名字,加个则是前两个的总和

代码到这里就结束了,没有什么难度,只有几个小点需要注意一下,也都以注明。

总结

代码看一遍就能记住,不需要硬背,如果有错误请及时指出。

Demo用swift写的,后又写了一个OC版的,都会在这里放出,点击下载。
下载:swiftDemoOCDemo

文章目录
  1. 1. 前言 - 什么是Apple Pay
  2. 2. 和支付宝和微信等第三方支付的区别?
  3. 3. 集成
    1. 3.1. 设置Xcode
    2. 3.2. 判断当前设备是否可以支付?
    3. 3.3. 创建支付按钮
    4. 3.4. 开始支付请求
  4. 4. 总结