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都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...
随机推荐
- Redis 入门指令
-- -- string SET key value GET key GETRANGE key start end GETSET key value GETBIT key offset MGET ke ...
- POJ 3258 River Hopscotch(二分法搜索)
Description Every year the cows hold an event featuring a peculiar version of hopscotch that involve ...
- 【RF库XML测试】Get Element Text
Name:Get Element TextSource:XML <test library>Arguments:[ source | xpath=. | normalize_whitesp ...
- 如何在 Ubuntu 中安装 Node.js
在终端中执行以下命令: sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ...
- PS合成以及分解GIF
http://jingyan.baidu.com/article/3052f5a1c91f0497f31f862a.html 百度上的这个说明很详细了 这里就简单注明一下: PS 时间轴:用来创建动画 ...
- Android设计和开发系列第二篇:Action Bar(Develop—Training)
Adding the Action Bar GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.1 or higher YOU SHOULD AL ...
- 【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
在进行数据迁移时候报错: 特殊字段太长报错, php artisan migrate 现在utf8mb4包括存储emojis支持.如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情. ...
- Delphi应用程序的调试(三)监视变量
监视变量(Watching Variables) 当程序停在一个断点处时,用户做些什么呢?通常用户在断点处停下来是要检查变量的值,某个变量的值是否与预料的取值相同?或者某个变量取什么值(事先并不知道这 ...
- 【VI】如何再执行上一个(历史)命令(已解决)
输入命令提示符( : )+ 上下箭头(<Up/Down>键) 输入 :his 或者 :history 查看历史
- Android6.0中PowerManagerService分析
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=30510400&id=5569393 概述 一直以来,电源管理是 ...