Apple Pay 初级实践

今天看到屏幕被 Apple Pay刷屏了,就觉得研究一下,特以此文记录。本文主要讲解应用内支付。
首先,Apple Pay的支付流程(摘自 https://www.sdk.cn/news/2198)


  1. App 根据使用场景显示 Payment Sheet。
    2.用户选择需要进行支付的卡以及支付需要的个人信息后,进行指纹验证,之后根据情 况,有些银行卡还需要输入卡对应的密码(PIN 码)
    3.iOS 将支付相关信息发送到 Apple 的服务器,进行加密。然后通过回调函数将加密后的支付信息返回给对应 App。
    4.App 在收到回调之后,将对应信息发送到自己的服务器。
    5.服务器在收到 App 发送来的支付信息后,对数据进行解密操作,提取其中需要的信 息,组织银联接口报文,调用银联的接口,完成扣款。

也就是apple只是一个信息传输的工具,扣款是发生在我们将信息发送给自己的服务器后,服务器去调用银联接口进行扣款。(注意不是我们填完密码Apple就把钱扣了,扣钱还是要我们服务器去做的)

流程明白了,接下来进行实践。
1.创建一个新工程
2.创建一个Merchant ID

Apple Pay 初级实践_第1张图片
F@0X5YTC4)MQ@$8K~JO7QKO.jpg

3.在工程的Capabilities中打开Apple Pay的开关,勾选上Merchant ID

Apple Pay 初级实践_第2张图片
T0_U0FGX5}294RFBQ{5X68I.jpg

4.接下来开始编码。

#import 
@interface VC ()

导入库头文件,遵守PKPaymentAuthorizationViewControllerDelegate,我们要用到Apple自带的支付VC。

/**
 组装参数 返回用于支付的Request对象
 */
- (PKPaymentRequest *)makeRequset{
    PKPaymentRequest *payMentRequest = [[PKPaymentRequest alloc] init];
    payMentRequest.countryCode = @"CN";//中国
    payMentRequest.currencyCode= @"CNY";//人民币
    payMentRequest.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkMasterCard,PKPaymentNetworkChinaUnionPay];//PKPaymentNetworkChinaUnionPay 国内用这个
    payMentRequest.merchantCapabilities = PKMerchantCapabilityEMV;
    
    payMentRequest.merchantIdentifier = @"merchant.com.1ydtest.merchantname";//和merchant ID一样
    
    PKPaymentSummaryItem *widget = [PKPaymentSummaryItem summaryItemWithLabel:@"水果" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]];
    PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@"蛋糕" amount:[NSDecimalNumber decimalNumberWithString:@"0.02"]];
    
    //最后一项显示
    PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@"YM" amount:[NSDecimalNumber decimalNumberWithString:@"0.03"] type:(PKPaymentSummaryItemTypeFinal)];
    
    payMentRequest.paymentSummaryItems = @[widget,widget1,widget2];
    return payMentRequest;
}
/**
 显示支付的界面
 */
- (void)presentPayMentVC{
    if([PKPaymentAuthorizationViewController canMakePayments]) {
        if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay]]){
            
            PKPaymentAuthorizationViewController *payVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:[self makeRequset]];
            payVC.delegate = self;
            [self presentViewController:payVC animated:YES completion:nil];
        }else{
            NSLog(@"请先去设置界面进行绑卡操作");
        }
    }else{
        NSLog(@"该设备暂不支持Apple Pay");
    }
}

PKPaymentAuthorizationViewController的代理

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
    //只做简单处理后续逻辑自行添加 支付界面消失
    [controller dismissViewControllerAnimated:YES completion:nil];
}

OK 以上就简单的搭建完毕。后续接入项目时个人觉得用第三方的比较方便,毕竟这是APP与服务端的交互,后台麻烦一点。建议使用Ping++

你可能感兴趣的:(Apple Pay 初级实践)