iOS快速集成Apple Pay

Apple Pay是什么 ?

Apple Pay目前已正式在国内上线,这意味着我们消费者可通过苹果手机、苹果手表等智能设备进行支付等,它的功能类似一个“卡包”,将实体银行卡虚拟到手机里,用户可以绑定储蓄卡或信用卡实现刷卡支付。

设备支持要求是什么 ?

Apple Pay需要支持NFC功能,目前只限于iPhone 6s、iPhone 6s Plus、iPhone 6、iPhone 6 Plus和Apple Watch这几款设备使用,同时,用户需将手机操作系统版本升级到iOS 9.2以上,Apple Watch则需要Watch OS 2.1版本以上。

Apple Pay怎么使用 ?

iPhone上,先打开系统自带的Wallet应用,后点右上角的符号,这时你有两个选择,一是用摄像头拍卡就能识别,二是可以手动输入,或者通过iTunes绑定,至于Apple Watch怎么使用,因为自己还没有实战过,具体都怎么添加百度一下吧,在这里我就不浪费时间了。

Apple Pay环境怎么配置 ?

配置Bundle ID


iOS快速集成Apple Pay_第1张图片
Bundle ID.png

添加商户的ID


iOS快速集成Apple Pay_第2张图片
Merchant IDs.png
iOS快速集成Apple Pay_第3张图片
20160311_6.png

点击创建好的商户ID


iOS快速集成Apple Pay_第4张图片
商户ID

编辑商户ID


iOS快速集成Apple Pay_第5张图片
20160311_12.png

添加CSR文件(类似Mac的身份证)


iOS快速集成Apple Pay_第6张图片
20160311_13.png

下载配置好的商户ID


iOS快速集成Apple Pay_第7张图片
20160311_14.png
iOS快速集成Apple Pay_第8张图片
20160311_15.png

创建对应的App IDs


iOS快速集成Apple Pay_第9张图片
20160311_16.png
iOS快速集成Apple Pay_第10张图片
20160311_17.png

这时必须选择精确的ID设置,否则下面没法选择Apple Pay服务


iOS快速集成Apple Pay_第11张图片
20160311_18.png

选择Apple Pay 类


iOS快速集成Apple Pay_第12张图片
20160311_19.png

这时会看到创建好的App IDs


iOS快速集成Apple Pay_第13张图片
20160311_20.png

clear项目 如下截图代表上述步骤正确


20160311_34.png

配置支付环境最后的操作


iOS快速集成Apple Pay_第14张图片
20160311_26.png

App项目内怎么集成 ?

Apple Pay使用了PassKit框架,所以你需要导入其头文件

#import 

接收Apple Pay处理信息的回调,需实现其委托代理:

@interface ViewController : UIViewController

为了方便测试,我这里是直接点击控制器的view来触发支付操作

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
// ...
}

具体实现代码如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
   
    //首先判断设备是否支持Apple Pay快捷支付功能
    
    /**
     *  canMakePayments(BOOL) YES 代表设备支持applePay功能 否则不支持
     *  若是用户设备不能进行支付,则不要显示支付按钮,相应的应该退回到其它支付方式(支付宝 微信等)
     *  我这里是直接让其返回 不做其他操作
     */
    if (![PKPaymentAuthorizationViewController canMakePayments]) return;
    
    //其次判断设备是否存在绑定过的并支持的银行卡
    /**
     *  若是设备没有支持的银行卡,则进入设置银行卡界面
     *  我这里判断是不支持Visa、银联、Discover等
     */
    if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkDiscover]]) {
        
        //进入设置银行卡界面
        [[PKPassLibrary alloc] openPaymentSetup];
    }
    
    NSLog(@"该设备支持ApplePay功能,且wallet存在支持绑定好的银行卡");
    
    //最后,则创建支付请求
    PKPaymentRequest *request = [PKPaymentRequest new];
        
    //填写商户ID(merchant IDs)
    request.merchantIdentifier = @"merchant.com.chongzone.cn";
    
    //设置国家代码
    request.countryCode = @"CN"; //中国大陆
    
    //设置支付货币
    request.currencyCode = @"CNY";//人民币
    
    //设置商户的支付标准
    request.merchantCapabilities = PKMerchantCapability3DS; //3DS支付方式是必须支持的,其他方式可选
    
    //设置支持卡的类型
    /**
     *  对支付卡类别的限制
     *  PKPaymentNetworkChinaUnionPay  银联卡
     *  PKPaymentNetworkVisa  国际卡
     *  PKPaymentNetworkMasterCard 万事达卡 国际卡
     *  PKPaymentNetworkDiscover 美国流行的信用卡
     */
    request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkDiscover];
    
    //设置商品参数
    /**
     *  summaryItemWithLabel 商品名称(英文字符默认全部显示大写)
     *  amount 商品的价格 - NSDecimalNumber类型
     *  PKPaymentSummaryItemTypePending 待付款 PKPaymentSummaryItemTypeFinal
     */
    
    NSDecimalNumber *oneAmout = [NSDecimalNumber decimalNumberWithString:@"1.11"];
    NSDecimalNumber *twoAmout = [NSDecimalNumber decimalNumberWithString:@"2.22"];
    NSDecimalNumber *threemAmout = [NSDecimalNumber decimalNumberWithString:@"3.33"];
    
    NSDecimalNumber *itemTotal = [NSDecimalNumber zero];
    itemTotal = [itemTotal decimalNumberByAdding:oneAmout];
    itemTotal = [itemTotal decimalNumberByAdding:twoAmout];
    itemTotal = [itemTotal decimalNumberByAdding:threemAmout];
    
    
    PKPaymentSummaryItem *itemOne = [PKPaymentSummaryItem summaryItemWithLabel:@"itemOne"
                                                                        amount:oneAmout];
    
    PKPaymentSummaryItem *itemTwo = [PKPaymentSummaryItem summaryItemWithLabel:@"itemTwo"
                                                                        amount:twoAmout];
    
    PKPaymentSummaryItem *itemThree = [PKPaymentSummaryItem summaryItemWithLabel:@"itemThree"
                                                                          amount:threemAmout];
    
    PKPaymentSummaryItem *itemSum = [PKPaymentSummaryItem summaryItemWithLabel:@"chongzone" amount:itemTotal];
    
    request.paymentSummaryItems = @[itemOne, itemTwo, itemThree, itemSum];
    
    /**
     *  以上参数都是必须的
     *  以下参数不是必须的
     */
    
    //设置收据内容
    request.requiredBillingAddressFields = PKAddressFieldAll;  //则其余四个必须添加
    
    //设置送货内容 all则其余四个内容必填
    request.requiredShippingAddressFields = PKAddressFieldAll;
    
    //设置送货方式
    PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"菜鸟" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]];
    method.identifier = @"菜鸟物流";
    method.detail = @"12小时到达";
    
    request.shippingMethods = @[method];
    
    //显示支付界面
    PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    
    //遵守代理
    paymentVC.delegate = self;
    
    if (!paymentVC) return;
    
    [self presentViewController:paymentVC animated:YES completion:nil];
}

委托代理的回调

/**
 *  支付的时候回调
 */
#pragma mark - PKPaymentAuthorizationViewControllerDelegate
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
    
    /**
     *  在这个代理方法内部,需支付信息应发送给服务器/第三方的SDK(银联SDK/易宝支付SDK/易智付SDK等)
     *  再根据服务器返回的支付成功与否进行不同的block显示
     *  我这里是直接返回支付成功的结果
     */
    
    completion(PKPaymentAuthorizationStatusSuccess);
    
    NSLog(@"payment --- %@", payment);
}

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
    
    //支付页面关闭
    //点击支付/取消按钮调用该代理方法
    [controller dismissViewControllerAnimated:YES completion:nil];
}

最后附上真机/模拟器支付截图

iOS快速集成Apple Pay_第15张图片
真机支付
iOS快速集成Apple Pay_第16张图片
模拟器支付1 ![模拟器支付2.png](http://upload-images.jianshu.io/upload_images/1488790-201c2cf0bea0c519.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

想要源码的话,下面可以留言…不早了,哎、又晚睡了,晚安咯。。。

你可能感兴趣的:(iOS快速集成Apple Pay)