ApplePay要在项目有里配置,,配置好项目之后,就剩下编码了,做ApplePay首先要检查设备是否支持ApplePay,支持 ApplePay的设备在 iPhone6及以后,  PKPaymentButton按钮在 iOS 8.3以后可以使用,中国银联卡在 iOS 9.2及以后可以使用。

代码:

ViewController

#import "ViewController.h"
#import <PassKit/PassKit.h>
#import "UIView+ShowAlert.h" #define kDevice_SystemVersion [[UIDevice currentDevice].systemVersion floatValue] //用户是否可进行某种卡的支付,是否支持Amex、MasterCard、Visa
#define SupportApplePayNetworks @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa] //用户是否可进行某种卡的支付,是否支持Amex、MasterCard、Visa与银联四种卡
#define SupportApplePayNetworksAndChina @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay] @interface ViewController () <PKPaymentAuthorizationViewControllerDelegate> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // PKPaymentButton 按钮 8.3 之后
if (kDevice_SystemVersion >= 8.3) {
PKPaymentButton *payButton = [[PKPaymentButton alloc] initWithPaymentButtonType:PKPaymentButtonTypeBuy paymentButtonStyle:PKPaymentButtonStyleBlack];
payButton.center = self.view.center;
[self.view addSubview:payButton]; [payButton addTarget:self action:@selector(pay:) forControlEvents:UIControlEventTouchUpInside];
}
} - (IBAction)pay:(id)sender { // 苹果支付 8.3 版本之后可以用,如果在中国是 9.2 之后可以
if (![PKPaymentAuthorizationViewController class] || kDevice_SystemVersion < 8.3) {
[self.view myShowAlertView:@"OS does not support Apple Pay, please upgrade to version 8.3 or above. Only iPhone6 or above devices are supported."];
return;
} //检查当前设备是否可以支付
if(![PKPaymentAuthorizationViewController canMakePayments]) {
[self.view myShowAlertView:@"The device does not support Apple Pay, please upgrade to version 8.3 or above. Only iPhone6 or above devices are supported."];
return;
} //检查用户是否可进行某种卡的支付,银联卡9.2之后才支持。 根据自己项目的需要进行检测
NSArray *supportedNetworks = kDevice_SystemVersion >= 9.2 ? SupportApplePayNetworksAndChina:SupportApplePayNetworks;
if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) {
[self.view myShowAlertView:@"No payment card binding."];
return;
} PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"ROMWE" amount:[NSDecimalNumber decimalNumberWithString:@"33.99"]]; paymentRequest.paymentSummaryItems = @[total]; // currencyCode 设置币种
// paymentRequest.currencyCode = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];//用户当前地区的币种
// // 人民币
paymentRequest.currencyCode = @"CNY"; // countryCode 设置国家
paymentRequest.countryCode = @"CN"; // 中国 注意:currencyCode 和 countryCode 应该是对应的额 // 在 developer.apple.com member center 里设置的 merchantID
paymentRequest.merchantIdentifier = @"merchant.com.romwe.dotfashion"; // PKMerchantCapabilityCredit 在真机上无法回调 `didAuthorizePayment` 方法
paymentRequest.merchantCapabilities = PKMerchantCapability3DS; // 支持哪种结算网关
paymentRequest.supportedNetworks = supportedNetworks; PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
if (paymentVC) {
paymentVC.delegate = self;
[self presentViewController:paymentVC animated:YES completion:NULL];
} else {
[self.view myShowAlertView:@"You can only use debit or credit card provided by:American express, Visa, Mastercard, Union pay"];
} } #pragma mark - Payment delegate
//支付卡选择回调
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectPaymentMethod:(PKPaymentMethod *)paymentMethod completion:(void (^)(NSArray<PKPaymentSummaryItem *> * _Nonnull))completion {
NSLog(@"didSelectPaymentMethod");
completion(@[]);
} //送货地址回调
-(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingContact:(PKContact *)contact completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKShippingMethod *> * _Nonnull, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion {
NSLog(@"didSelectShippingContact");
} //送货方式回调
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingMethod:(PKShippingMethod *)shippingMethod completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion {
NSLog(@"didSelectShippingMethod");
} //付款成功苹果服务器返回信息回调,做服务器验证
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion {
NSLog(@"---------------did authorize payment token: %@, %@", payment.token, payment.token.transactionIdentifier); // 发送网络 请求 做服务器验证
BOOL seccess; // 服务器返回成功
if (/* 请求成功 */seccess) {
completion(PKPaymentAuthorizationStatusSuccess);
} else {
completion(PKPaymentAuthorizationStatusFailure);
}
} //支付完成回调
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
[controller dismissViewControllerAnimated:controller completion:NULL]; // 支付完成之后可以在这里做一些逻辑,比如跳转到订单详情
UIViewController *vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor redColor];
[self.navigationController pushViewController:vc animated:YES];
} @end

Demo:http://files.cnblogs.com/files/10-19-92/ApplePayDemo.zip

ApplePay的更多相关文章

  1. App Store审核指南:WatchKit、HealthKit、ApplePay以及HomeKit部分

    将此前App Store审核指南中的WatchKit.HealthKit.ApplePay以及HomeKit部分进行了整理和摘取. 10. 用户界面 10.1 应用程序必须遵守苹果的<Apple ...

  2. ApplePay高调入华,教你在app里上线ApplePay

      ApplePay在中国上线后,就有许多线上app前后脚加入了对其的接入支持,个人比较喜欢的ENJOY也抢在首批接入了ApplePay应用内支付.本文将分享作者的接入经验. ApplePay是苹果公 ...

  3. iOS集成ApplePay

    Apple Pay正式在国内上线的那天,一起工作的小伙伴就走进了Starbucks,7-11等带有银联闪付的店进行了尝鲜.不管是否要再次输入一次密码,但是它的出现确实给我们带来了极大的便捷.下面就尝试 ...

  4. iOS开发ApplePay的介绍与实现

    1.Apple Pay的介绍 Apple Pay官方 1.1 Apple Pay概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在i ...

  5. 为什么ApplePay在中国一直火不起来?

    今年7月,易观发布<中国第三方移动支付市场2018年第1季度监测报告>.报告显示,2018年第一季度支付宝以53.76%的市场份额占据移动支付头把交椅,腾讯金融(微信支付)则以38.95% ...

  6. ApplePay扩大全球发卡行合作,“苹果税”撑不住了?

    5月11日Apple Pay全面登陆加拿大地区,更为重要的是,苹果终于在一些地区,开始和美国运通之外的发卡行达成了合作.这对于老是因为分账问题不愿意走出下一步的Apple Pay来说,已经是巨大的进步 ...

  7. 关于applePay详细讲解

    https://www.cnblogs.com/diweinan/p/6225501.html

  8. Apple Pay 初探

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

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

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

随机推荐

  1. Env:VIM配置

    注:文章来自于http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配 ...

  2. html中div定位练习

    html中div定位练习,实现简单的计划列表: 记录div定位时主要的属性:float.position等,以及对应的relative和absolute等,同时使用到angular js中的数据绑定, ...

  3. (C#).NET 2.0 ~ 4.0 OS requirements.

    .NET 4.0 requires XP SP3, Win2k3 SP2, Vista, 7, or 2008(R2) .NET 3.5 requires XP SP2 or newer. .NET ...

  4. RMAN_学习实验2_RMAN Duplicate复制数据库过程(案例)

    待整理 对于基于生产环境下的数据库的版本升级或者测试新的应用程序的性能及其影响,备份恢复等等,我们可以采取从生产环境以克隆的方式将其克隆到本地而不影响生产数据库的正常使用.实现这个功能我们可以借助rm ...

  5. Yii 框架ajax搜索分页

    要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层

  6. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

  7. Liferay中actionURL能够执行后台方法 ,但是页面不跳转问题解决方案

    在学习liferay的过程中,遇到了这么一个问题,actionURL能够执行后台方法 ,但是页面不跳转,以下是两种解决方案: 方案1(不推荐此种办法): 强制将页面重定向. 在actionURL执行的 ...

  8. JAVA中压缩与解压缩

    以压缩Zip文件为例.主要是通过ZipOutputStream类实现.解压缩主要使用ZipFile类和ZipInputStream以及ZipEntry类. package main; import j ...

  9. mysql 如何用root 登录

    mysql -uroot -p 如果没有密码,按两下回车就进去了

  10. ArcGIS Engine 下投影坐标和经纬度坐标的相互转换

    ArcGIS Engine 下投影坐标和经纬度坐标的相互转换 投影转经纬度 ); pPoint.Project(pSRF.CreateGeographicCoordinateSystem((int)e ...