华山论剑之浅谈iOS的ApplePay


在发布近两年、历经各种周折之后,苹果公司的Apple Pay移动支付服务终于在2016年2月18日来到了中国大陆.对中国用户来说,移动支付其实已经不是什么陌生事物,抢红包和支付宝早完成用户启蒙。但与这两者有区别的是,Apple Pay只是苹果搭建的一个支付服务,它链接银行、店面及用户,但又不像支付宝那样把钱存在自己这。
对于技术人员的我们,不管其市场如何,当我们看到一个新的技术的时候,我们就应该想着如何去使用它,今天作为前端开发者的我就对ApplePay进行一个简单的讲解.


商业证书的配置

当我们使用到ApplePay的时候,首先就是要到我们的开发者中心配置一个证书,这个证书就叫做商业证书,下面我们就看一下商业证书配置的相关问题吧.

首相我们进入到我们证书页面,当我们进入我们的证书页面之后,首先我们需要如图添加一个商业证书.

进入到下面的页面的时候,我们要填写我们的类型名称以及我们的ID,根据要求填写即可.

完成之后点击一下,进入如下的页面

当然了这样我们并没有配置完成.点击register 注册,然后返回到上一页面.如图 找到我们所配置的文件.然后我们就要对我们的证书进行进一步的配置😁

点击Edit进入详情页面

不解释,直接点击下一步就可.

点击下一步之后我们进入如下的页面,这时候跟我们配置证书一个,我们需要从钥匙串中配置一个申请文件出来.

首先先打开我们的钥匙串🔑,如下图进行下一步.点击"证书助理",然后点击 "从证书颁发机构请求而证书".

然后进行如下图的的操作,电子邮箱可以填写的稍微随意一点,😃

填写完整之后,我们点击继续即可,然后我们就需要上传我们的证书请求文件了.

完成之后,就点击下载我们的商业证书就行.

证书配置完了,就要配置我们App ID 和 工程的描述文件.我们首先配置一下App ID,App ID的配置和前面的差不多,唯一的区别就是我们需要勾选Apply Pay功能. 如图所示

当我们点击下一步的时候,发现Apply Pay 的状态是黄色的,所以我们就需要把他变成可用状态.

我们点击Regiser注册完成之后,就在我们的APP ID列表中找到对应的APP ID信息.

如图,找到对应的Apply Pay 信息

进入选择证书的页面,选择我们的证书.

看完下面三张图 我们的App ID 的配置就完成了.


描述文件

上面的App ID 我们已经配置完成了,下面我们就配置我们的 描述文件.


选择对应的ID

完成之后下载我们的描述文件就行.

注意:这里有个问题是关于证书的,就是我们的证书不管怎么下载都会显示的状态是证书是无效的或者证书是未知机构颁发的. 我们需要做的就是去网上下两个证书. 如图所示
---->点击前往证书下载页面


工程配置

当我们完成了我们的证书的配置之后,我们就需要到我们的工程中配置我们的Apple Pay了,首先就要先查看我们的ID.

ID查看完成之后就配置我们的Apply Pay 相关的信息.

当然了,我们还是要配置我们的商业证书和描述文件的


代码部分

当我们的上面两个整完之后,我们就要开始我们的代码部分了.因为是测试,所以我就简单的用storyboard做一下.代码如下


#import "ViewController.h"

//我们要使用Apple Pay 首先要先导入两个库
#import <PassKit/PassKit.h>

#import <AddressBook/AddressBook.h>

//这里要遵守一个协议.
@interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

//这里我使用storyboard用一个按钮拖成一个事件
- (IBAction)payAction:(id)sender {
    
    //首先我们要先确定设备是否支持Apple Pay功能,现在支持Apple Pay功能功能的有iPhone 6,iPhone 6 Plus,iPhone 6s, iPhone 6s Plus;iPad Air 2,iPad mini 3,iPad mini 4,iPad Pro;还有Apple Watch.
    if ([PKPaymentAuthorizationViewController canMakePayments]) {
        
        //我们首先创建一个请求支付PKPaymentRequest类的对象
        PKPaymentRequest *request = [[PKPaymentRequest  alloc]init];
        
        //然后设置支付的商品的目录  NSDecimalNumber是用于记录商品的价格的一个类
        PKPaymentSummaryItem * item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"栋哥的87键黑轴纪念版键盘" amount:[NSDecimalNumber decimalNumberWithString:@"400"]];
        
        PKPaymentSummaryItem * item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"栋哥的IE3.0纪念版鼠标" amount:[NSDecimalNumber decimalNumberWithString:@"200"]];
        
        PKPaymentSummaryItem * item3 = [PKPaymentSummaryItem summaryItemWithLabel:@"栋哥的赛睿纪念版霜冻之蓝耳机" amount:[NSDecimalNumber decimalNumberWithString:@"1000"]];
        
        
        PKPaymentSummaryItem * item4 = [PKPaymentSummaryItem summaryItemWithLabel:@"神经骚栋" amount:[NSDecimalNumber decimalNumberWithString:@"6000"] type:PKPaymentSummaryItemTypeFinal];
        
        //设置paymentSummaryItems的数组元素.
        request.paymentSummaryItems = @[item1,item2,item3,item4];
        
        //指定国家区域编号
        request.countryCode = @"CN";
        
        //指定国家货币种类,在下面我会说到各国的货币种类都叫什么,现在我们就用RMB来说吧
        request.currencyCode = @"CNY";
        
        //然后指定支持的网上银行支付手段
        request.supportedNetworks = @[PKPaymentNetworkMasterCard,PKPaymentNetworkVisa];
        
        //指定App需要的商业ID
        request.merchantIdentifier = @"merchant.com.Dong.ApplePay";
        
        //指定支付的权限的范围限制
        request.merchantCapabilities = PKMerchantCapabilityEMV;
        
        //设置订单接受的地址
        request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress;
        
        
        /***********************request支付请求已经设置完成**********************/
        
        //设置支付页面的相关信息
        PKPaymentAuthorizationViewController *payMentVC = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:request];
        
        //设置代理
        payMentVC.delegate = self;
        
        if (!payMentVC) {
            
            NSLog(@"支付页面失败!");
            
        }else{
        
            [self presentViewController:payMentVC animated:YES completion:nil];
            
        }
        

    }else{
    
        NSLog(@"设备不支持Apply Pay 功能!");
    
    }
    
    
    
}

当我们完成上面的工作之后,就要必须完成下面的两个代理方法.


#pragma mark----支付过程中调用这个方法-----

//payment就是支付的对象相关的所有信息都存在这个对象当中.
-(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion{

    //获取到服务器发给用户的token.token里面含有成功或者是失败的信息.
    PKPaymentToken *token = payment.token;
    
    //拿到订单人相关的信息,其实包括地址,姓名,邮箱等等
    NSString *name = payment.billingContact.name.nickname;
    
    NSLog(@"%@",name);
    
    //上面的token和name发送到自己的服务器,由自己的服务器和商家进行接口的调用返回一个结果,我们将这个返回的结果再与客户端的用户进行交互,
    

    //状态结果的类为PKPaymentAuthorizationStatus,因为我们做的是测试,所以我们就先指定他为成功
    PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusSuccess;
    
    completion(status);

}


#pragma mark----支付完成-----

-(void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{

    //隐藏支付界面
    [controller dismissViewControllerAnimated:YES completion:nil];

}


@end


下面就是世界主要货币的英文简写表,希望对大家有所帮助..

国家货币名称 货币英文简写
人民币 CNY
英镑 GBP
比利时法郎 BEF
新西兰元 NZD
港币 HKD
意大利里拉 ITL
奥地利先令 ATS
美元 USD
国家货币名称 货币英文简写
日元 JPY
挪威克朗 NOK
瑞士法郎 CHF
加拿大元 CAD
泰国铢 THB
德国马克 DEM
澳大利亚元 AUD
丹麦克朗 DKK
法国法郎 FRF
西班牙比塞塔 ESP
国家货币名称 货币英文简写
菲律宾比索 PHP
新加坡元 SGD
欧元 EUR
瑞典克朗 SEK
荷兰盾 NLG
芬兰马克 FIM
澳门元 MOP
代码我都做了详细的注释,如果还有不懂的,可以参考我的Demo 以及 下面的资料
-------->点击下载Demo
-------->点击进入codeqi博客
今天的Apply Pay就介绍到这,😃,如果大家有什么意见可以给我留言.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,274评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,713评论 6 342
  • 最近802发生了很多奇怪的事情。 5号床的台灯亮了一整天,直到下午放学才被人发现。 5号床的闹钟会在莫名的时间响起...
    Rainy三三阅读 109评论 0 0
  • 1 《血战钢锯岭》是一部改编自二战上等兵军医戴斯蒙德·道斯的真实经历,讲述他拒绝携带武器上战场,并在冲绳战役中赤手...
    熊注阅读 609评论 0 1