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


Bundle ID.png

添加商户的ID


Merchant IDs.png
20160311_6.png

点击创建好的商户ID


商户ID

编辑商户ID


20160311_12.png

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


20160311_13.png

下载配置好的商户ID


20160311_14.png
20160311_15.png

创建对应的App IDs


20160311_16.png
20160311_17.png

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


20160311_18.png

选择Apple Pay 类


20160311_19.png

这时会看到创建好的App IDs


20160311_20.png

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


20160311_34.png

配置支付环境最后的操作


20160311_26.png

App项目内怎么集成 ?

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

#import <PassKit/PassKit.h>

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

@interface ViewController : UIViewController
<PKPaymentAuthorizationViewControllerDelegate>

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

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

具体实现代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)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];
}

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

真机支付
模拟器支付1 ![模拟器支付2.png](http://upload-images.jianshu.io/upload_images/1488790-201c2cf0bea0c519.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 苹果支付(Apple Pay): Apple Pay,简单来说, 就是一种移动支付方式。通过Touch ID/ P...
    西风颂阅读 3,694评论 6 19
  • 转自: http://ksmx.me/apple-pay/ Apple Pay 究竟是什么? 我们熟知的科技公司(...
    天天想念阅读 11,628评论 0 3
  • 版权声明:本文为作者原创文章, 如果有相同的或者相似的,那将是我的荣幸。 Apple Pay是什么? Apple ...
    FMengz阅读 2,743评论 1 5
  • 对中国用户来说,移动支付其实已经不是什么陌生事物,抢红包和支付宝早完成用户启蒙。但与这两者有区别的是,Apple ...
    LuxDark阅读 1,296评论 0 2
  • 为什么他们以为,文案只值3000块? 来到N市以后发现这里的设计师都会写点文案,而文案呢,又多少会点PS。就连招聘...
    畅游小鲨鱼阅读 758评论 0 0