美文网首页
Apple Pay 初级实践

Apple Pay 初级实践

作者: YM_1 | 来源:发表于2016-02-22 15:46 被阅读76次

    今天看到屏幕被 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

    F@0X5YTC4)MQ@$8K~JO7QKO.jpg

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

    T0_U0FGX5}294RFBQ{5X68I.jpg

    4.接下来开始编码。

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

    导入库头文件,遵守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 初级实践

          本文链接:https://www.haomeiwen.com/subject/fxdbkttx.html