zoukankan      html  css  js  c++  java
  • Apple Pay的快速实现

    一、在Apple开发者中心配置 AppleID 和 Merchant IDs

    二、配置好证书后在Xcode中开启Apple Pay

    三、代码实现

    3.1 判断是否支持Apple Pay,如果支持又将支持哪些银行卡。

        // 判断是否支持Apple Pay
        if (![PKPaymentAuthorizationViewController canMakePayments]) {
            
            NSLog(@"不支持Apple Pay");
            
            // 如果没有绑定VISA或者银联卡,点击按钮去绑定银行卡
        }else if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]]){
            
            PKPaymentButton *addPayBtn = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleWhiteOutline];
            [addPayBtn addTarget:self action:@selector(addPay) forControlEvents:UIControlEventTouchUpInside];
            addPayBtn.center = self.view.center;
            [self.view addSubview:addPayBtn];
            
            // 如果存在VISA或者银联卡,点击按钮去支付
        }else{
            
            PKPaymentButton *payBtn = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleBlack];
            [payBtn addTarget:self action:@selector(buy) forControlEvents:UIControlEventTouchUpInside];
            payBtn.center = self.view.center;
            [self.view addSubview:payBtn];
        }
        

    3.2 如果没有绑定VISA卡或者银联卡时,点击支付按钮会跳转到绑卡页面

    // 添加银行卡
    -(void)addPay{
        
        PKPassLibrary *pay = [[PKPassLibrary alloc]init];
        [pay openPaymentSetup];
    }
    

    3.3 如果已经绑定银行卡,则去支付,并设置支付信息和商户信息

    // 支付
    -(void)buy{
        
        // 1.创建支付请求
        PKPaymentRequest *request = [[PKPaymentRequest alloc]init];
        // 商户号
        request.merchantIdentifier = @"merchant.com.zhangdinghao.ApplePay";
        // 货币代码和国家代码
        request.countryCode = @"CN";
        request.currencyCode = @"CNY";
        // 请求支付的网络(和之前判断的网络保持一致)
        request.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
        // 商户处理方式
        request.merchantCapabilities = PKMerchantCapability3DS;
        // 商品1
        NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:@"7999.00"];
        PKPaymentSummaryItem *item = [PKPaymentSummaryItem summaryItemWithLabel:@"iPhone 7" amount:price];
        // 商品2
        NSDecimalNumber *price2 = [NSDecimalNumber decimalNumberWithString:@"149.00"];
        PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"iPhone数据线" amount:price2];
        // 商品汇总
        NSDecimalNumber *price3 = [NSDecimalNumber decimalNumberWithString:@"8148.00"];
        PKPaymentSummaryItem *item3 = [PKPaymentSummaryItem summaryItemWithLabel:@"Apple Store" amount:price3];
        
        request.paymentSummaryItems = @[item,item2,item3];
        // 账单或者发票接收地址
        request.requiredBillingAddressFields = PKAddressFieldAll;
        // 快递地址
        request.requiredShippingAddressFields = PKAddressFieldAll;
        
        NSDecimalNumber *kuaidi = [NSDecimalNumber decimalNumberWithString:@"0.00"];
        PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"顺丰" amount:kuaidi];
        method.identifier = @"shangmen";
        method.detail = @"72小时内送货上门";
        request.shippingMethods = @[method];
        
        // 2.验证支付
        PKPaymentAuthorizationViewController *avc = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:request];
        avc.delegate = self;
        [self presentViewController:avc animated:YES completion:nil];
        
    }
    

    3.4 实现支付的代理方法

    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion{
        
        // 拿到支付信息发送给服务器,服务器处理完成后返回支付状态
        BOOL isSucess = YES;
        
        if (isSucess) {
            completion(PKPaymentAuthorizationStatusSuccess);
        }else{
            
            completion(PKPaymentAuthorizationStatusFailure);
        }
    }
    
    -(void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
        
        [self dismissViewControllerAnimated:controller completion:nil];
    }

    四、如图为最终的实现方法,商品信息根据实际设置,配送信息等根据实际商品来选择,如果是虚拟商品则不需要

    applepay04

    https://github.com/CalvinCheungCoder

  • 相关阅读:
    自我介绍
    目前流行的源程序版本管理软件和项目管理软件的优缺点
    四月是你的谎言
    软件分析(Mobile Apps )--百词斩
    程序扩展
    超级无敌小学四则运算题目程序
    4组 团队展示
    2020面向对象设计与构造 第四单元 & 课程 博客总结
    2020面向对象设计与构造 第三单元 博客总结
    2020面向对象设计与构造 第二单元 博客总结
  • 原文地址:https://www.cnblogs.com/walkingzmz/p/6000127.html
Copyright © 2011-2022 走看看