关闭

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

967人阅读 评论(0) 收藏 举报



最近苹果推出了一种新的支付方式–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

0
0
查看评论

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

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

Apple Pay 在线远程支付

Apple Pay 详细集成文档Apple pay刚推出的时候可以说“绑定的过程很崩溃,用的时候很心碎”,为什么要这样说呢?因为刚一推出,就有大量的人同时绑定,银行和银联又处理不过来,就会出现以下界面,用的时候很心碎是指太TMD方便了,几百块说没就没呀,你说心碎不!哭:一:适用于以下设备注:操作系统...
  • lifufa
  • lifufa
  • 2016-04-11 17:51
  • 811

iOS Apple Pay支付

1.申请MerchantID 登录苹果开发者中心:https://developer.apple.com/account/ 在Identifiers 下面的 Merchant IDs 创建,Description取名字可以 ApplePayXXX,Identifier取名字可以 merchant.c...
  • sinat_20037505
  • sinat_20037505
  • 2017-03-17 15:16
  • 1216

微信APP支付——支付流程说明及示例

微信APP支付——支付流程说明及示例
  • flygoa
  • flygoa
  • 2017-02-07 10:21
  • 7303

ApplePay 支付开发

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

玩转苹果自带支付

当你决定在线买一些东西的时候,可能会有一种现代特有的焦虑感涌上心头。虽然没有精确的单词来表达这种焦虑,但如果只想简单的描述的话,可以是:“我的信用卡在哪里?它的号码是多少?我真的需要买这个东西吗?”当你在一个iOS设备上购物时,这种令人抓狂的感觉会放大:你很有可能没有随身携带你的信用卡,而且手里拿着...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2016-05-15 08:11
  • 7444

Apple Pay支付流程详解

前不久Apple Pay开始了,大家做好接入的准备了吗?今天写了个demo,悲催的是开发者账号上设备满了,只能用模拟器给大家看了。。。疑问是:在开发Apple Pay的时候,Xcode 7无法 无证书真机调试吗?求解0、 建新工程,忽略由于想要使用Apple Pay,需要用到Apple颁布的merc...
  • u010731949
  • u010731949
  • 2016-03-02 16:20
  • 8704

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

苹果支付(Apple Pay)中国上线有段时间了,也许是因为国人还不太习惯这种支付方式,也有可能楼主待的城市比较小,从日常生活中感觉用它做支付方式的人还不是很多。但楼主一般能用Apple Pay的时候基本也不太用其他的支付方式(除非有优惠,哈哈)在Apple Pay上线之后,美团、京东等常用支付的A...
  • RunIntoLove
  • RunIntoLove
  • 2016-08-16 17:30
  • 2908

iOS连连支付的坑

接入连连支付遇到的坑
  • qq_30670353
  • qq_30670353
  • 2018-01-29 17:21
  • 155

微信支付开发教程JAVA编[006]-刷卡支付

我承接app和微信公众号开发,如果有谁需要的话,可以惠顾我,谢谢. QQ: 40678884 微信: szuzsq 主页: http://www.wxshaker.com 博客: http://blog.csdn.net/szuzsq -------...
  • szuzsq
  • szuzsq
  • 2017-03-22 18:56
  • 959
    个人资料
    • 访问:99489次
    • 积分:1898
    • 等级:
    • 排名:千里之外
    • 原创:83篇
    • 转载:44篇
    • 译文:0篇
    • 评论:49条
    最新评论