Apple Pay的实现
首先是搜到的大神写的全套知识点: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的实现的更多相关文章
- Apple Pay 初探
Apple Pay 一.概述 1.支付方式:Touch ID/ Passcode 2.设备要求:iPhone6以上(iphone:线上/线下 ipad:线上 watch:线下) 3.系统要求:iOS8 ...
- 【转】iOS开发 -- Apple Pay
技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...
- Apple Pay的快速实现
一.在Apple开发者中心配置 AppleID 和 Merchant IDs 二.配置好证书后在Xcode中开启Apple Pay 三.代码实现 3.1 判断是否支持Apple Pay,如果支持又将支 ...
- 开发apple pay碰到的问题总结
本来想简单总结一下Apple Pay 开发过程中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 作者对相关资源整理得比较详细, 比较有参考价值 总的来说, 我们做过 APNs 推送的话, ...
- iOS Apple Pay
iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h> ...
- Apple Pay
Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上.目前还不支持企业证书添加. 环境搭建好后可以在模拟器上面运行,xcode7.2.1+ ...
- iOS开发 Apple Pay
一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...
- Apple Pay(转)
Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...
- 集成 Apple Pay
作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...
- Apple Pay强势来袭,开发者应做的事情
"iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...
随机推荐
- iOS try catch
最近看一些第三方的代码有@try,一副看不懂的样子,真心没用过,于是查了些资料收集在这里,以后遇到就不会再蒙比了.其实这东西确实不怎么用,下文有解释.Objective-C 异常机制 :-- 作用 : ...
- yii 前端js动态添加验证规则
在使用 activeForm 生成表单及验证时,默认是按照 model 里的 rules 生成js验证,model 验证在加载完页面后生效,不可修改,如果需要扩展.动态验证,需要使用js来配合 直接上 ...
- 重新生成RF的测试库API文档
在dos窗口下执行如下命令: 命令:python -m robot.libdoc 库名称 生成的API文件名.html 例如:python -m robot.libdoc MongoDBLibrar ...
- 两台Linux主机互传文件可以使用SCP命令来实现
当两台linux主机之间要互传文件时可使用SCP命令来实现 复制文件: (1)将本地文件拷贝到远程 scp 文件名 --用户名@计算机IP或者计算机名称:远程路径 (2)从远程将文件拷回本地 scp ...
- 深入浅出MFC——MFC骨干程序(四)
1. 熟记MFC类层次结构: 2. AppWizard可以为我们制作出MFC程序骨干: 3. Document/View支撑你的应用程序:Document/View的价值在于,这些MFC类已经把一个应 ...
- 微信小程序 禁止ios页面下拉下滑滚动 出现空白的情况
项目需要做了一个图片拖动指定组件上删除,和排序的功能android测试正常, ios会出现拖动图片页面也跟着下滑的尴尬情况. 查文档下拉刷新配置默认是关闭的,后经查找文档发现在本页面page.json ...
- 微信redirect_uri 回调错误,scope权限错误
scope权限错误以及微信redirect_uri回调错误 昨天修改项目的时候,初始时,因为项目最开始使用的是第三方授权处理,拿到的用户openid是第三方账号的,所以需要将获取对方信息的代码修改.只 ...
- 使用__FILE__和__LINE__定位错误
#include <stdio.h> int main() { printf("this fake error is in %s on line %d\n", __FI ...
- GitHub 在使用命令行 git push 时报错:The requested URL returned error: 403
使用 git 的命令行向 GitHub 提交的时候,报错: [Young@localhost OtherLang]$ git push origin master error: The request ...
- 第二步 使用Cordova 3.0(及以上版本) 创建安卓项目(2014-6-25)
参考资料: http://www.cnblogs.com/numtech/p/3233469.html http://blog.sina.com.cn/s/blog_9e245c690101jurr. ...