首先是搜到的大神写的全套知识点:http://www.jianshu.com/p/8d7b86f1d142

http://www.cnblogs.com/dashunzi/archive/2016/02/23/ApplePay.html

银联和Apple Pay的关系

http://www.voidcn.com/blog/l964968324/article/p-5737385.html

创建AppID

给APP添加Apple Pay的权限

申请创建MerchantID

编辑Merchant ID设置支持的支付的国家地区(即是否支持国外支付,上传一个自己生成的CRS文件加密时使用)

创建描述文件,项目设定中开启支付功能,选择自己创建的Merchant ID这个是多选的,应该是可以针对不同的支付对象吧

注意事项和点项总结:

唤起苹果支付必须使用苹果提供的按钮样式否者奔溃:

 //    Type : 类型

 //    PKPaymentButtonTypePlain

 //    PKPaymentButtonTypeBuy

 //    PKPaymentButtonTypeSetUp

 //    style : 样式

 //    PKPaymentButtonStyleWhite

 //    PKPaymentButtonStyleWhiteOutline

 //    PKPaymentButtonStyleBlack

     PKPaymentButton * payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypePlain style:PKPaymentButtonStyleWhiteOutline];

     payButton.center = self.view.center;

     [payButton addTarget:self action:@selector(payAction:) forControlEvents:UIControlEventTouchUpInside];

     [self.view addSubview:payButton];

唤起支付控件,苹果支付只是达到个信息传递功能,至于支付的完成还有成功还是失败的状态判定,需要通过后台和银行之间的接口调用来实现(银行和后台之间交互实现支付功能,后台和前端交互获取支付结果)

-(void)payAction:(PKPaymentButton *)button
{
//系统提供了API来判断当前设备是否支持Apple Pay支付的功能。
if([PKPaymentAuthorizationViewController canMakePayments]){
//设备支持支付
//PKPayment类来创建支付请求
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
//国家 //HK 香港 CN : 中国大陆
request.countryCode = @"CN";
//人民币 // HKD 港币 CNY : 人民币 USD : 美元
request.currencyCode = @"CNY";// 其他国家以及币种的缩写自行百度
///由商家支持的支付网络 所支持的卡类型
//此属性限制支付卡,可以支付。
// PKPaymentNetworkAmex : 美国运通
// PKPaymentNetworkChinaUnionPay : 中国银联
// PKPaymentNetworkVisa : Visa卡
// PKPaymentNetworkMasterCard : 万事达信用卡 // PKPaymentNetworkDiscover
// PKPaymentNetworkInterac
// PKPaymentNetworkPrivateLabel
// PKEncryptionSchemeECC_V2
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkChinaUnionPay, PKPaymentNetworkDiscover, PKPaymentNetworkInterac, PKPaymentNetworkMasterCard, PKPaymentNetworkPrivateLabel, PKPaymentNetworkVisa, PKEncryptionSchemeECC_V2]; // PKMerchantCapability3DS // 美国的一个卡 必须支持
// PKMerchantCapabilityEMV // 欧洲的卡
// PKMerchantCapabilityCredit //信用卡
// PKMerchantCapabilityDebit //借记卡 //商家的支付处理能力
//PKMerchantCapabilityEMV : 他的旗下有三大银行 : 中国银联 Visa卡 万事达信用卡
//也就是说merchantCapabilities指的支付的银行卡的范围。
request.merchantCapabilities = PKMerchantCapabilityDebit | PKMerchantCapabilityCredit | PKMerchantCapabilityEMV; //merchantIdentifier 要和你在开发者中心生成的id保持一致
request.merchantIdentifier = @"merchant.com.ruizhihulian.applePay"; //需要的配送信息和账单信息
request.requiredBillingAddressFields = PKAddressFieldAll;
//(配送信息非必须)
request.requiredShippingAddressFields = PKAddressFieldAll; //运输方式(没有配送也就没有配送方式)
NSDecimalNumber * shippingPrice = [NSDecimalNumber decimalNumberWithString:@"0.01"];
PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"快递公司" amount:shippingPrice];
method.detail = @"24小时送到!";
method.identifier = @"kuaidi";
request.shippingMethods = @[method];
request.shippingType = PKShippingTypeServicePickup; // 2.9 存储额外信息
// 使用applicationData属性来存储一些在你的应用中关于这次支付请求的唯一标识信息,比如一个购物车的标识符。在用户授权支付之后,这个属性的哈希值会出现在这次支付的token中。
request.applicationData = [@"商品ID:123456" dataUsingEncoding:NSUTF8StringEncoding]; //添加物品到支付页
//创建物品并显示,这个对象描述了一个物品和它的价格,数组最后的对象必须是总价格。
//使用PKPaymentSummaryItem来创建商品信息 PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@"商品一" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]]; PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@"商品二" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"收款方名称" amount:[NSDecimalNumber decimalNumberWithString:@"0.02"]]; request.paymentSummaryItems = @[widget1, widget2, total];
// request.paymentSummaryItems = @[widget1]; //显示认证视图
PKPaymentAuthorizationViewController * paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
paymentPane.delegate = self; [self presentViewController:paymentPane animated:TRUE completion:nil]; }else{
//设备不支持支付
NSLog(@"设备不支持支付");
}
}

必须实现两个回调函数,否者会出现找不到方法而程序出错

#pragma mark -PKPaymentAuthorizationViewControllerDelegate
//这个代理方法指的是支付过程中会进行调用
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{
//payment:代表的是一个支付对象, 支付相关的所有信息都在他的身上:1.token. 2.address //completion : 是一个回调的block ,block回调的参数,直接影响到界面结果的展示。 /*PKPaymentAuthorizationStatus 交易状态 PKPaymentAuthorizationStatusSuccess, // 成功交易
PKPaymentAuthorizationStatusFailure // 没有授权交易
PKPaymentAuthorizationStatusInvalidBillingPostalAddress // 拒绝账单地址
PKPaymentAuthorizationStatusInvalidShippingPostalAddress, // 拒绝收货地址
PKPaymentAuthorizationStatusInvalidShippingContact //提供的信息不够
PKPaymentAuthorizationStatusPINRequired // 交易需要指纹输入
PKPaymentAuthorizationStatusPINIncorrect // 输入不正确,重新输入.
PKPaymentAuthorizationStatusPINLockout// 输入次数超出
*/ PKPaymentToken * token = payment.token;
NSLog(@"获取token---%@", token);
//获取订单地址
NSString * address = payment.billingContact.postalAddress.city;
NSLog(@"获取到地址: %@", address);
NSLog(@"验证通过后, 需要开发者继续完成交易");
// 在这个位置, 我们开发人员需要把token值和商品的其他信息如:地址 id 这些 , 上传到自己公司的服务器。然后公司的服务器和银行的商家接口进行接口的调用,并将接口调用返回的支付结果信息返回到这里。
//根据不同的支付结果状态,让block调用不同的交易状态;
//比如说:服务器调用支付结果是成功的, 就让 completion(PKPaymentAuthorizationStatusSuccess); 如果失败 调用 completion(PKPaymentAuthorizationStatusFailure);
//如:
BOOL isSuccess = YES;
if (isSuccess) {
completion(PKPaymentAuthorizationStatusSuccess);
}else
{
completion(PKPaymentAuthorizationStatusFailure);
}
}
// 当授权成功之后或者取消授权之后会调用这个代理方法
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
NSLog(@"取消或者交易完成");
[self dismissViewControllerAnimated:YES completion:nil];
}

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

  1. Apple Pay 初探

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

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

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

  3. Apple Pay的快速实现

    一.在Apple开发者中心配置 AppleID 和 Merchant IDs 二.配置好证书后在Xcode中开启Apple Pay 三.代码实现 3.1 判断是否支持Apple Pay,如果支持又将支 ...

  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 Pay

    作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...

  10. Apple Pay强势来袭,开发者应做的事情

    "iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...

随机推荐

  1. 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)

    7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...

  2. flexbox子盒子align-self属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 浅谈iPhone OS(iOS)架构

    iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统

  4. win10屏幕投影

    不管是做设计还是看电影玩游戏编代码,多屏幕总是可以带来方便的.屏幕投影之前需要连接屏幕:通过VGA线连接.通过HDMI线连接.或者通过无线连接. 介绍Win10实现屏幕投影设置:https://jin ...

  5. Netty权威指南之NIO通信模型

    NIO简介:与Socket和ServerSocket类相对应,NIO提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现,这两种新通道都支持阻塞和非阻塞两种 ...

  6. Docker-创建和分享应用(3)

          Dockerfile定义容器内环境中发生的事情.对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”哪些 ...

  7. PDF XSS

    漏洞测试: 下面,我们介绍如何把 JavaScript 嵌入到 PDF 文档之中.我使用的是迅捷 PDF 编辑器未注册版本 1.启动迅捷 PDF 编辑器打开一个 PDF 文件,或者使用“创建 PDF ...

  8. Python学习笔记18-发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  9. AngularJS的初步学习(1)

    AngularJS 是一个Javascript框架.它可通过 <script> 标签添加到 HTML 页面.AngularJS 通过 指令 扩展了 HTML,且通过 表达式绑定数据到 HT ...

  10. x64枚举DPC定时器

    @写在前面      不同于x86,x64的DPC是被加密了的.对于x64DPC的兴趣始于我已经流产的scalpel计划.当时问某牛怎么遍历,得到的答案是“500大洋给代码”.真是R了狗了,好歹小哥我 ...