博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apple Pay的快速实现
阅读量:4646 次
发布时间:2019-06-09

本文共 3764 字,大约阅读时间需要 12 分钟。

一、在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://www.cnblogs.com/walkingzmz/p/6000127.html

你可能感兴趣的文章
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
object-c中管理文件和目录:NSFileManager使用方法
查看>>
Kibana:分析及可视化日志文件
查看>>
nodejs pm2使用
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>