常识篇
版本要求:iOS操作系统9.2及以上系统版本,WatchOS需要2.1及以上版本。
-
设备要求:与 Apple Pay 兼容的设备
- iPhone:iPhone XS、iPhone XS Max、iPhone X、iPhone 8、iPhone 8 Plus、iPhone 7、iPhone 7 Plus、iPhone 6s、iPhone 6s Plus、iPhone 6、iPhone 6 Plus、iPhone SE
- iPad: iPad(第 6 代)、iPad Pro、iPad(第 5 代)、iPad Air 2、iPad mini 4、iPad mini 3
- iWatch:Apple Watch Series 4、Apple Watch Series 3、Apple Watch Series 2、Apple Watch Series 1、Apple Watch(第 1 代)
- Mac:配备触控 ID 功能的 Mac 机型、2012 年或之后推出的 Mac 机型,与支持 Apple Pay 的 iPhone 或 Apple Watch 配合使用
银行要求:官方声明参与的银行和发卡机构
其他要求:安全隐私
证书篇
登录开发者账号
点击进入Certificates, Identifiers & Profiles
点击左侧App IDs
查看
iOS App IDs
中是否有你项目的id
(Bundle identifier),有的话点开编译[编辑的方式参照如下]。为了展示完成的证书创建思路,按照未含有,重写创建处理。
首先我创建一个名为Apple Pay Demo 。Bundle identifier为com.text.checkstand测试Demo。点击证书页面右上角的➕Register iOS App IDs
选中Apple Pay Payment Processing
点击Continue确认,发现Apple Pay Payment Processing 的状态是橘色-Configurable,需要进一步配置
点击Merchant IDs,添加Register Merchant IDs
注册完Merchant IDs 之后回到iOS App IDs页面 点击新建的App ID进行编辑
App ID编辑
选择刚才所建的Merchant ID
确认之后返回,Apple Pay Payment Processing 的状态是绿色-Enabled
到这里Apple Pay证书创建之路已经走完一半,接下来再点击Merchant IDs
,对刚刚生成的Apple Pay Demo Merchant
进行编辑,生成(RSA).cer。
这里着重号❗️❗️❗️❗️表示,如果是接入银联SDK可直接跳过钥匙串部分操作,直接跳到下方银联SDK接入篇-配置处理
电脑打开钥匙串,点击钥匙串访问 -> 证书助理 -> 从证书把发机构请求证书
生成一个.certSigningRequest的白色文件
回到Certificates, Identifiers & Profiles 的 iOS Merchant ID Settings页面点击页面上的 Create Certificate
选择钥匙串生成的白色文件
Download 如下图
双击前去钥匙串中查看
当然你也可能显示是如下的红色文字此证书是由未知颁发机构的签名
点击如下两个链接安装证书,然后移除未知颁发机构的证书、再次双击安装
Worldwide Developer Relations - G2 Certificate 证书
Xcode设置篇
原生实现篇
代码实现思路
导入PassKit框架
进行设备和最低版本判断,参考条件查看最上方
创建PKPayment类来创建支付请求,设置国家代码,币种,由商家支持的支付网络 所支持的卡类型。设置merchantIdentifier-要和你在开发者中心生成的id保持一致如我demo设置的
merchant.com.text.checkstand
。创建PKPaymentSummaryItem来创建商品信息,显示认证视图设置代理-PKPaymentAuthorizationViewControllerDelegate
在paymentAuthorizationViewController代理回调中处理token值和商品的其他信息上传到服务器后台。通过这个字段PKPaymentAuthorizationStatus来判断最终支付结果。
注!我就不直接复制代码块。
接入银联SDK实现篇
配置处理
跳过了钥匙串生成这部是为什么?
因为:生成cer文件是要选择文件上传进行生成,而如果接入银联SDK的话,这个文件是通过银联申请的。
如上图的步骤二取代了钥匙串生成的部分,在选择文件的时候选择的是银联那获取的cer文件。具体银联接入可查看-银联Apple Pay控件接入指引等文件。
然后生成RSA,下载。
代码实现思路
- 导入相关文件和依赖
- UPAPayPlugin 调startPay的类方法
/**
* 支付接口
*
* @param tn 订单信息
* @param mode 接入模式,标识商户以何种方式调用支付控件,00生产环境,01测试环境
* @param viewController 启动支付控件的viewController
* @param delegate 实现 UPAPayPluginDelegate 方法的 UIViewController
* @param mID 苹果公司分配的商户号,表示调用Apple Pay所需要的MerchantID;
* @return 返回函数调用结果,成功或失败
*/
+ (BOOL)startPay:(NSString*)tn
mode:(NSString*)mode
viewController:(UIViewController*)viewController
delegate:(id<UPAPayPluginDelegate>)delegate
andAPMechantID:(NSString* )mID;
- 遵守代理,实现代理方法,获取支付回调
#pragma mark 响应控件返回的支付结果 - 银联Apple Pay <UPAPayPluginDelegate>
- (void)UPAPayPluginResult:(UPPayResult *)result
{
if(result.paymentResultStatus == UPPaymentResultStatusSuccess) {
NSLog(@"付款成功");
//交易成功
}
else if(result.paymentResultStatus == UPPaymentResultStatusFailure) {
NSLog(@"付款失败")
//交易失败
}
else if(result.paymentResultStatus == UPPaymentResultStatusCancel) {
NSLog(@"付款取消")
//交易取消
}
else if(result.paymentResultStatus == UPPaymentResultStatusUnknownCancel) {
NSLog(@"支付过程中取消了,请查询后台确认订单");
//交易取消
}
}