ios开发——iOS App集成Apple Pay教程

苹果在本周一发布了iOS 8.1版本,并正式开放了Apple Pay支付系统。Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持。即便这项科技并不是彻底的突破性进展,但它足以推动许多公司和零售商来支持这种支付方式,并成为苹果又一项成功的投资。

Apple Pay还给开发者带来了处理支付的新渠道,用户将期望在应用中使用它,因为它将验证和交易极端简化,仅需手指轻轻一触即可完成,如果应用里面有涉及到交易,开发者很有必要集成Apple Pay。那么如何将Apple Pay功能集成到你的应用里呢?

在App里设置Apple Pay

Screen-Shot-2014-10-21-at-1.31.40-PM.png

Xcode 6.1提供了非常方便的界面来设置Apple Pay。第一步先修改target为iOS 8.1,然后在项目Capabilities里将Apple Pay设置为on,这将自动导入需要的库文件,然后添加一个权限文件并设置,最后修改或创建你的App ID。

我们在Xcode里面把Apple pay打开

你可能会注意到上面没有有效的Merchant ID,我们需要创建一个,访问苹果iOS 开发者中心的位于Identifiers > Merchant ID的页面

然后随着流程指引,创建一个Merchant ID并注册它。

在设置 Identifier 的时候要注意 ID 的格式

Merchat IDs identifier 设置


注册成功以后


点击Edit



点击Continue



Choose File



从证书颁发机构请求证书



选择


现在,我们需要给Merchant ID添加一个证书签名请求(Certificate Signing Request),以便加密支付令牌来保证其安全性。为达到这个目的,导航至你的Merchant ID,并点击Edit按钮来修改它。

screen3.png

现在,你需要创建一个证书。点击下面的Create Certificate按钮,并跟随苹果的流程指引完成创建。

screen4.png

现在Merchant ID设置好了,你可以回到Xcode并刷新Merchant ID区块,如果一切正常,你应当看到刚创建的ID出现在列表上。将它选中,然后可以进入下一部分。

screen5.png

编写代码

我们在Github上提供了一个集成Apple Pay的示例项目:cjbeauchamp/ApplePayDemo ,权限文件和App设置文件已经剥离出去了,可以放心将它添加到你自己的项目里。下面我们将讨论一些开发中的要点。

设置项目

Apple Pay使用了PassKit框架,所以你需要在适当的文件里导入头文件:

1
#import <passkit passkit.h=""></passkit>

你还需要接收Apple Pay处理信息的回调,所以确保将委托添加到接收类上:

1
2
@interface ViewController : UIViewController
<pkpaymentauthorizationviewcontrollerdelegate></pkpaymentauthorizationviewcontrollerdelegate>

创建支付请求

首先你需要确认设备是否支持Apple Pay支付,确认的代码是:

1
2
3
if ([PKPaymentAuthorizationViewController canMakePayments]) { 
     ... 
}

在上面的代码块里,你能使用PKPayment类来创建支付请求。下面是相应的代码,你需要将其中一些信息修改成自己的,比如merchantIdentifier需要与你之前创建的Merchant ID相匹配。

1
2
3
4
5
6
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
request.countryCode = @ "US" ;
request.currencyCode = @ "USD" ;
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
request.merchantCapabilities = PKMerchantCapabilityEMV;
request.merchantIdentifier = @ "merchant.com.myMerchantID" ;

添加物品到支付页

你可以使用PKPaymentSummaryItem来创建物品并显示,这个对象描述了一个物品和它的价格,数组最后的对象必须是总价格。

1
2
3
4
5
6
7
PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@ "Widget 1"  amount:[NSDecimalNumber decimalNumberWithString:@ "0.99" ]];
 
PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@ "Widget 2"  amount:[NSDecimalNumber decimalNumberWithString:@ "1.00" ]];
 
PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@ "Grand Total"  amount:[NSDecimalNumber decimalNumberWithString:@ "1.99" ]];
 
request.paymentSummaryItems = @[widget1, widget2, total];

显示认证视图

最后,显示由PassKit框架提供的view controller,接下来它将自动处理认证。

1
2
3
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
paymentPane.delegate = self;
[self presentViewController:paymentPane animated:TRUE completion:nil];

实现委托方法

被请求的委托方法是被认证成功和认证完成两个事件调用的。是否解除view controller,以及让用户知道认证是否成功都取决于你。方法的签名如下:

1
2
- (void)paymentAuthorizationViewController:didAuthorizePayment:completion:
- (void)paymentAuthorizationViewControllerDidFinish:

支付验证

在Apple Pay验证了支付之后,仍然需要开发者来完成交易,这可以用didAuthorizePayment委托方法来完成,它需要你连接服务器并上传支付令牌和 其他信息,以完成整个支付流程。在服务器呼叫结束后,你需要调用completion方法,摒弃提供success或failure标记的参数。你可以在 示例代码里找到具体实现。

监控并优化交易

Apple Pay是现有的结账流程非常棒的解决方案,在应用里使用它无疑会让用户们高兴。尽管Apple Pay让支付流程极端简化,仍然有许多变动地方,他们的表现将直接与app的营收挂钩。

交易监控

Crittercism公司的新Transaction Management是一种很棒的方法,用来监控各种交易确保它们工作正常。如果一个API端末或服务执行缓慢,或者如果用户决定取消交易,或者你的应用崩溃了,你需要知道这些信息才能更好的优化它们。你可以到Crittercism官方网站了解更多信息。

代码详细示范
遵循PKPaymentAuthorizationViewControllerDelegate
#pragma mark ----支付状态- (void)paymentAuthorizationViewController:(PKPayme

ntAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{
NSLog(@"花费: %@", payment); BOOL asyncSuccessful = FALSE;    if(asyncSuccessful) {
completion(PKPaymentAuthorizationStatusSuccess);
NSLog(@"支付成功"); } else {
completion(PKPaymentAuthorizationStatusFailure); NSLog(@"支付失败");
}
}#pragma mark ----支付完成- (void)paymentAuthorizationViewControllerDidFinis

h:(PKPaymentAuthorizationViewController *)controller { // 支付完成后让支付页面消失
[controller dismissViewControllerAnimated:YES completion:nil];
}

支付方法
#pragma mark -----点击支付- (IBAction)checkOut:(id)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:@"2个大展"                                                   amount:[NSDecimalNumber decimalNumberWithString:@"0.02"]]; PKPaymentSummaryItem *widget4 = [PKPaymentSummaryItem summaryItemWithLabel:@

"总金额" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"] type:PKPaymentSummaryItemTypeFinal];

request.paymentSummaryItems = @[widget1, widget2, widget3, widget4];

request.countryCode = @"CN";

request.currencyCode = @"CNY";//人民币

request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay, PKPaymentNetwor

kMasterCard, PKPaymentNetworkVisa]; // 这里填的是就是我们创建的merchat IDs

request.merchantIdentifier = @"merchant.com.dazhan.applePayDemo";

request.merchantCapabilities = PKMerchantCapabilityCredit;

//增加邮箱及地址信息

request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldP

ostalAddress;

// 根据request去创建支付页面

PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorization

ViewController alloc] initWithPaymentRequest:request];

// 设置代理

paymentPane.delegate = self;        if (!paymentPane) { NSLog(@"出问题了");

} else { // 模态推出页面

[self presentViewController:paymentPane animated:YES        

completion:nil];

}    
} else { NSLog(@"该设备不支持支付");
}
}



效果图.gif



总结

希望这个入门教程让你更好的理解和使用Apple Pay。别忘了阅读苹果的指南和文档来了解如何与供应商集成,以及用户界面的指导规范。你可以在苹果Apple Pay的官网上找到它们。



文章摘自:http://www.cocoachina.com/ios/20141024/10026.html

                  http://www.wtoutiao.com/p/194sM5l.html

扩展阅读:

苹果官方Apple Pay开发文档(中文版):开始使用Apple Pay 

Apple Pay人机界面指南(1.0版)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值