iOS开发之ApplePay体验

2016年2月18日凌晨5:00,Apple Pay业务在中国上线。虽然毁誉参半,但是不得不承认国内很多的公司和商家已经开通了Apple Pay的这个事实。

ApplePay开发流程

配置证书

App ID

1.首先我们需要创建一个App ID,登录苹果开发者中心,选择创建一个App ID。

App ID

2.点击“+”添加一个App ID。填写App ID Description,和Bundle ID。

填写AppID 和 Bundle ID

3.这里我们要实现Apple Pay的相关功能,所以我们接下来要勾选一下Apple Pay这一选项。

勾选Apply Pay

4.点击Continue继续下一步我们会看到Apple Pay的状态还是黄色的(Configurable)。

Apple Pay的状态

Merchant ID

1.创建Merchant ID,这里我们需要创建一个商业ID。

Merchant ID

2.同样的填写Description,这里还需要填写一个identifier,这个ID必须是以merchant开头。

创建Merchant ID

3.点击下一步就行了。

配置App ID

1.这个时候我们回到App IDs选项卡下找到我们刚刚创建的App ID。点击选择编辑选项。

Edit

2.这个时候下拉我们就可一看到Apple Pay选项 勾选并点击Edit按钮,进入编辑页面。

Edit

3.选择我们刚刚创建的Merchant ID然后Continue。

关联Merchant ID

创建证书

1.回到Merchant ID 点击选择YES选项。

选择YES

2.下一步,我们可以看到这时候需要一个证书。

需要一个证书
上传证书页面

3.那么创建一个证书。打开钥匙串。

钥匙串

4.点击状态栏的钥匙串,选择证书助理选项,从证书颁发机构请求证书。

从证书颁发机构请求证书

5.创建,选择存储到磁盘。保存到一个容易找到的位置。

存储到磁盘

6.选择刚刚创建的证书文件上传,并点击下一步。

上传证书

7.我们就可以看到Your certificate is ready说明我们的证书已经创建好了。我们点击download下载就好了。

下载证书

8.到这里我们的证书部分就已经配置好了。

证书

代码

1.创建一个工程设置其Bundle ID 必须和描述文件中的Bundle ID一致。

设置工程的Bundle ID

2.在Capability标签中把ApplePay选项打开,并且将Merchant ID选中,

设置merchant ID

3.在工程中导入对应的头文件PassKit/PassKit.h 和AddressBook/AddressBook.h,并且遵循PKPaymentAuthorizationViewControllerDelegate协议。

#import <PassKit/PassKit.h>
#import <AddressBook/AddressBook.h>
@interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>

4.支付响应事件

// 点击支付响应事件
- (IBAction)payAction:(UIButton *)sender {
    
    // 订单请求对象
    PKPaymentRequest *pkPayment = [[PKPaymentRequest alloc]init];
    // 商品订单信息对象
    
    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"BMW" amount:[NSDecimalNumber decimalNumberWithString:@"100"]];
    PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"BenZ" amount:[NSDecimalNumber decimalNumberWithString:@"200"]];
    PKPaymentSummaryItem *item3 = [PKPaymentSummaryItem summaryItemWithLabel:@"Audi" amount:[NSDecimalNumber decimalNumberWithString:@"300"]];
    
    pkPayment.paymentSummaryItems = @[item1,item2,item3];
    
    // 指定国家和地区编码
    pkPayment.countryCode = @"CN";
    // 指定国家货币种类
    pkPayment.currencyCode = @"CNY";
    // 指定的支持的网上银行支付方法
    pkPayment.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkMasterCard];
    
    // 指定APP需要的商业ID
    pkPayment.merchantIdentifier = @"merchant.com.coderqiao.applepay.pay01";
    // 指定支付的权限的范围限制
    pkPayment.merchantCapabilities = PKMerchantCapabilityEMV;
    // 指定订单接受的地址
    pkPayment.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress;
    
    // 支付界面显示对象
    PKPaymentAuthorizationViewController *pvc = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:pkPayment];
    pvc.delegate = self;
    
    if (!pvc) {
        NSLog(@"有问题,请查看");
        @throw [NSException exceptionWithName:@"QQ_Error" reason:@"有问题,请查看" userInfo:nil];
    }else {
        [self presentViewController:pvc animated:YES completion:nil];
    }
}

5.支付回调方法

/ 在支付的过程中进行调用,直接影响支付结果在界面上的显示
// payment代表支付对象,支付相关的信息,存在与这个对象 1.token 2.address
// completion是一个回调block,里面传递的参数直接影响界面结果的显示
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
    // 拿到token
    PKPaymentToken *token = payment.token;
    NSString *city = payment.billingContact.postalAddress.city;
    NSLog(@"city:%@",city);
    // 将token和city地址发送到自己的服务器,有自己的服务器与银行和商家进行接口调用和支付,将结构返回到这里
    // 根据结果生成对应的状态对象,根据状态对象,显示不同的支付结果
    // 状态对象
    PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusSuccess;
    completion(status);
    
    
    
}

// 当支付过程完成的时候调用
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
    [controller dismissViewControllerAnimated:YES completion:nil];
}

END

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

推荐阅读更多精彩内容