APP支付之使用ApplePay支付开发步骤

转载 2016年08月30日 20:52:05



最近苹果推出了一种新的支付方式–ApplePay支付,虽然毁誉参半,但是不得不承认国内很多的公司还有商家已经开通了ApplePay,可能最先锋的莫过于肯德基和招商银行了。抛开优劣与否不说,作为一个开发者自然要第一时间把ApplePay搞懂搞通,用不用再另说。

ApplePay的支付流程


在具体去进行每一步操作的时候一定要先了解一下ApplePay的具体的操作流程。
这里是官方给出的开发者文档。所有的流程步骤还有逻辑流程都可以在这里找到答案。
开发者传送门
使用ApplePay开发同样的需要一个商户ID,开通权限,然后根据需求拼接支付请求。Apple Pay会对支付信息进行加密处理,以防止未获授权的第三方获取用户的支付信息。剩下的就是在自己的服务器上进行支付流程和处理了。

ApplePay的开发流程

1 获取证书

详细的官方指导可以参考这里
苹果证书帮助
习惯了苹果开发的人一定会料到,新的苹果支付一定是需要一个新的证书的,没错,需要创建一个新的商业证书。

选择右侧的[Merchant IDs],点击右上角的添加。


点击continue


点击register


现在新添加的Merchant ID已经显示出来了,可以添加到列表里了。


将刚刚添加的MerchantID选中,选择编辑。


将选项改为Yes,点Continue。再继续Continue。然后会需要上传一个证书。这个时候来到本地打开钥匙串,生成本地证书,我这里直接贴每一步的截图了。



将生成的证书放到桌面上。


选择刚才创建的证书进行上传,并且点击生成。


选择描述文件选项,创建一个描述文件,然后点开他的详细信息,点击编辑。


确认ApplePay的两个选项都是enable。如果不是,点击edit将其勾选上。


生成对应的描述文件,在本地运行添加到钥匙串中。

2 工程配置

创建一个新工程,需要注意两点:
1 在BuildIdentifier中设置的必须和描述文件一样。

2 在Capability标签中把ApplePay选项打开,并且将MerchantIDs选中,如下图

3 代码编写

1 导入头文件

导入需要的框架对应的头文件PassKit/PassKit.h 和AddressBook/AddressBook.h,并且遵循PKPaymentAuthorizationViewControllerDelegate

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

2 处理支付页面

支付界面都是采用的PKPaymentAuthorizationViewController,每一条支付信息可以采用PKPaymentSummaryItem来进行编辑,最后调用苹果支付的时候就是调用的这个页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
- (IBAction)payAction:(UIButton *)sender {
    if([PKPaymentAuthorizationViewController canMakePayments]) {
        NSLog(@"支持支付");
        // 我们后面创建出来的支付页面就是根据这个request
        PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
        // 商品目录
        PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@"麻辣烫"
                                                                            amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]];
        PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@"肯德基"
                                                                            amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]];
        PKPaymentSummaryItem *widget3 = [PKPaymentSummaryItem summaryItemWithLabel:@"海鲜大餐"
                                                                            amount:[NSDecimalNumber decimalNumberWithString:@"0.02"]];
        PKPaymentSummaryItem *widget4 = [PKPaymentSummaryItem summaryItemWithLabel:@"coderqi" amount:[NSDecimalNumber decimalNumberWithString:@"0.03"] type:PKPaymentSummaryItemTypeFinal];
        request.paymentSummaryItems = @[widget1, widget2, widget3, widget4];
//        request.countryCode = @"CN";
//        request.currencyCode = @"CNY";//人民币
        request.countryCode = @"US";
        request.currencyCode = @"USD";
        request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
        // 这里填的是就是我们创建的merchat IDs
        request.merchantIdentifier = @"merchant.com.coderqi.applepay.pay";
        request.merchantCapabilities = PKMerchantCapabilityEMV;
        //增加邮箱及地址信息
        request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress;
        // 根据request去创建支付页面
        PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
        // 设置代理
        paymentPane.delegate = self;
        if (!paymentPane) {
            NSLog(@"出问题了");
        } else {
            // 模态推出页面
            [self presentViewController:paymentPane animated:YES completion:nil];
        }
    } else {
        
        NSLog(@"该设备不支持支付");
    }
}

3 编写代理回调

接下来就是代理回调的处理,服务器接收到了我们的请求之后收到返回信息会调用对应的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma mark ----支付状态
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
    /* //这是老版,已过时
    NSError *error;
    ABMultiValueRef addressMultiValue = ABRecordCopyValue(payment.billingAddress ,kABPersonAddressProperty);
    NSDictionary *addressDictionary = (__bridge_transfer NSDictionary *) ABMultiValueCopyValueAtIndex(addressMultiValue, 0);
    //这里模拟取出地址里的每一个信息。
    NSLog(@"%@",addressDictionary[@"State"]);
    NSData *json = [NSJSONSerialization dataWithJSONObject:addressDictionary options:NSJSONWritingPrettyPrinted error: &error];
    // 这里需要将Token和地址信息发送到自己的服务器上,进行订单处理,处理之后,根据自己的服务器返回的结果调用completion()代码块,根据传进去的参数界面的显示结果会不同
    PKPaymentAuthorizationStatus status; // From your server
    completion(status);
    */
    //这是新版
	//拿到token,
    PKPaymentToken *token = payment.token;
    //拿到订单地址
    NSString *city = payment.billingContact.postalAddress.city;
    NSLog(@"city:%@",city);
    ///在这里将token和地址发送到自己的服务器,有自己的服务器与银行和商家进行接口调用和支付将结果返回到这里
    //我们根据结果生成对应的状态对象,根据状态对象显示不同的支付结构
    //状态对象
    PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusFailure;
    completion(status);
}
#pragma mark ----支付完成
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
    
    // 支付完成后让支付页面消失
    [controller dismissViewControllerAnimated:YES completion:nil];
}

好了,到这里就完事儿了。
最后,将工程的代码贴在后边,各位看官可以随意下载。
代码Demo。

附赠鄙人录得视频地址:
优酷:http://v.youku.com/v_show/id_XMTQ4Njk0NTE2MA==.html

相关文章推荐

iOS开发教你怎么集成ApplePay

ApplePay在中国上线后,就有许多线上app前后脚加入了对其的接入支持,个人比较喜欢的ENJOY也抢在首批接入了ApplePay应用内支付。本文将分享作者的接入经验。 ApplePay是...

Apple Pay开发-项目集成-详细设置

今天公司的 WeChatpay and QQWallet 迎来了新的兄弟:Apple Pay o(╯□╰)o好累啊,都说好不做钱包支付的,结果还是硬做了。 ps:确实比蓝牙控制机器人好做 ...

iOS开发------Apple Pay(证书配置篇)

苹果支付(Apple Pay)中国上线有段时间了,也许是因为国人还不太习惯这种支付方式,也有可能楼主待的城市比较小,从日常生活中感觉用它做支付方式的人还不是很多。但楼主一般能用Apple Pay的时候...

APP支付之使用ApplePay支付开发步骤

最近苹果推出了一种新的支付方式–ApplePay支付,虽然毁誉参半,但是不得不承认国内很多的公司还有商家已经开通了ApplePay,可能最先锋的莫过于肯德基和招商银行了。抛开优劣与否不说,作为一个开发...

es(elasticsearch)5.4下params参数的使用

参考《ES权威指南》时,用到类似于下面的参数进行修改文档的属性时,遇到了问题。报错信息:Variable [new_tag] is not defined....

python批量导入数据进Elasticsearch

ES在之前的博客已有介绍,提供很多接口,本文介绍如何使用python批量导入。ES官网上有较多说明文档,仔细研究并结合搜索引擎应该不难使用。 先给代码 #coding=utf-8 from dat...

ApplePay 开发教程:创造更好的支付体验

当你决定在线买一些东西的时候,可能会有一种现代特有的焦虑感涌上心头。虽然没有精确的单词来表达这种焦虑,但如果只想简单的描述的话,可以是:“我的信用卡在哪里?它的号码是多少?我真的需要买这个东西吗?” ...

ApplePay 支付的简单使用

applePay支付功能出来已经很久了,看着API自己学习了一下,今天想起来总结一下,也算是在学习一下,所以写了这篇笔记,applePay是在iphone 6以上设备才支持这个支付功能的,这一点一定要...

微信APP支付开发步骤及要点

IOS开发要点说明 以下项目开发环境以Xcode6.0,运行环境为IOS7.0为例,说明其开发中需要的操作。 1、项目设置APPID 商户在微信开放平台申请开发APP应用后,...
  • paymm
  • paymm
  • 2017年06月20日 17:26
  • 163

最新《ApplePay支付》接入

前言:              2016是个真正开始走向解放钱包的时代了,从各种卡片开始流行起,不管你用的是磁条卡还是芯片卡,肯定是慢慢的塞满了你的钱包,但随着2月18日Apple Pay在中国上线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:APP支付之使用ApplePay支付开发步骤
举报原因:
原因补充:

(最多只允许输入30个字)