一、在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];
}

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

https://github.com/CalvinCheungCoder

Apple Pay的快速实现的更多相关文章

  1. 快速玩转Apple Pay开发

    快速玩转Apple Pay开发 更新时间:2016年02月20日09时25分 来源:传智播客 Apple Pay 2016年2月18日上午,苹果公司宣布,与中国银联达成合作,正式在中国大陆上线Appl ...

  2. Apple Pay 初探

    Apple Pay 一.概述 1.支付方式:Touch ID/ Passcode 2.设备要求:iPhone6以上(iphone:线上/线下 ipad:线上 watch:线下) 3.系统要求:iOS8 ...

  3. 【转】iOS开发 -- Apple Pay

    技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...

  4. 开发apple pay碰到的问题总结

    本来想简单总结一下Apple Pay 开发过程中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 作者对相关资源整理得比较详细, 比较有参考价值 总的来说, 我们做过 APNs 推送的话, ...

  5. iOS Apple Pay

    iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h>                     ...

  6. Apple Pay

    Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上.目前还不支持企业证书添加. 环境搭建好后可以在模拟器上面运行,xcode7.2.1+ ...

  7. iOS开发 Apple Pay

    一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...

  8. Apple Pay(转)

    Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...

  9. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

随机推荐

  1. ajax 跨域访问

    后台方法添加 HttpServletResponse response=ServletActionContext.getResponse(); response.addHeader("Acc ...

  2. java aes_cbc_256 加密解密

    在之前我们在openssl上和ios上分别测试了 AES256位cbc模式的加密和解密 今天用java提供的api来测试一下:进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据: 1. 首先通 ...

  3. python3 三级菜单

    python版本3.5 功能: 1.程序执行显示一级菜单,输入内容进入二级菜单: 2.进入二级菜单后,输入二级菜单内容,进入三级菜单:输入b返回一级菜单: 3.进入三级菜单后,输入b返回二级菜单. # ...

  4. ==与equals的区别

    ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致.两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容.pu ...

  5. 1028作业:Java语法基础

    //1.输入长与宽计算长方形面积与周长.(用精度类型计算) package com.lovo.J133; import java.util.Scanner; public class Homework ...

  6. 【转】[特征选择] An Introduction to Feature Selection 翻译

    中文原文链接:http://www.cnblogs.com/AHappyCat/p/5318042.html 英文原文链接: An Introduction to Feature Selection ...

  7. Minimum Depth of Binary Tree [LeetCode]

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  8. thinkPHP的用法之创建新项目

    1 配置文件中 新增数组元素:'DEFAULT_APPS'=> array('api', 'admin', 'home', 'megagame'), 2 新增样式变量 在view.class.p ...

  9. Codeforces Round #374 (Div. 2) D. Maxim and Array

    传送门 分析:其实没什么好分析的.统计一下负数个数.如果负数个数是偶数的话,就要尽量增加负数或者减少负数.是奇数的话就努力增大每个数的绝对值.用一个优先队列搞一下就行了. 我感觉这道题的细节极为多,非 ...

  10. Java—输入输出技术

    在Java中,通过java.io包提供的类来表示流,基本的输入输出流为InputStream和OutputStream.从这两个基本的输入输出流派生出面向特定处理的流,如缓冲区读写流.文件读写流等. ...