iOS集成ApplePay
下面图片是借的别人的

Apple Pay运行环境:
iPhone 6以上设备,当然也包括最新出来的iPhone SE。iOS版本在9.2以上。
Xcode版本号 7.2.1
APP接入ApplePay不需要POS机,但是还是要和银行签约,比如和银联签约。
准备工作
在接入Apple Pay之前,首先要申请MerchantID及对应的证书。

需要以merchant开头的一个字符串

申请App ID,这里和Merchant ID填写一样的名字为了辨别
申请好后再权限里面打开ApplePay功能,并配置merchant证书

配置成功后你会看到

搭建工程文件
bundleID设置,对应手动生成的bundleID

Capability中启用Apple Pay权限,并选择merchantID.

设置需要导入的头文件、引入的库
#import <PassKit/PassKit.h>//用户绑定的银行卡信息 #import <PassKit/PKPaymentAuthorizationViewController.h>//Apple pay的展示控件 #import <AddressBook/AddressBook.h>//用户联系信息相关
在开始Apple Pay支付前需要带代码中进行,系统版本检测,设备是否支持ApplePay检测以及用户是否绑定有对应的银行,三步操作。
if(![PKPaymentAuthorizationViewController class]) { //PKPaymentAuthorizationViewController需iOS8.0以上支持 NSLog(@"操作系统不支持ApplePay,请升级至9.0以上版本,且iPhone6以上设备才支持"); return; }
//检查当前设备是否可以支付
if(![PKPaymentAuthorizationViewController canMakePayments]) { //支付需iOS9.0以上支持 NSLog(@"设备不支持ApplePay,请升级至9.0以上版本,且iPhone6以上设备才支持"); return; }
//检查用户是否可进行某种卡的支付,是否支持Amex、MasterCard、Visa与银联四种卡,根据自己项目的需要进行检测
NSArray*supportedNetworkCards =@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]; if(![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) { NSLog(@"没有绑定支付卡"); return; } NSLog(@"可以支付,开始建立支付请求");
//当以上三种检查都通过后我这里以人民币作为测试
下面是代码:
//
// ViewController.m
// PayDemo
//
// Created by Jackey on 2017/3/2.
// Copyright © 2017年 com.zhouxi. All rights reserved.
// #import <PassKit/PassKit.h> //用户绑定的银行卡信息
#import <PassKit/PKPaymentAuthorizationViewController.h> //Apple Pay的展示控件
#import <AddressBook/AddressBook.h> //用户联系信息相关 #import "ViewController.h" @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate> @property (nonatomic, strong) NSMutableArray *summaryItems; //账单列表
@property (nonatomic, strong) PKPaymentAuthorizationViewController *payVC;
@property (nonatomic, strong) PKPaymentRequest *payRequest; @end @implementation ViewController @synthesize payRequest; - (void)viewDidLoad { [super viewDidLoad]; PKPaymentButton *payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleWhiteOutline];
payButton.center = self.view.center;
[payButton addTarget:self action:@selector(action) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:payButton]; PKPaymentButton *setupButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
setupButton.center = CGPointMake(self.view.center.x, self.view.center.y + );
[setupButton addTarget:self action:@selector(jump2MakePaymentsUsingNetworks) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:setupButton]; //检测当前系统版本是否支持Apple Pay
if (![PKPaymentAuthorizationViewController class]) { NSLog(@"系统版本太低, 请升级至9.0以上版本, 且iPhone6以上设备才支持");
} else { NSLog(@"恭喜您, 当前系统支持Apple Pay!");
} //检查当前设备是否可以支付
if (![PKPaymentAuthorizationViewController canMakePayments]) { NSLog(@"设备不支持Apple Pay, 请升级至9.0以上版本, 且iPhone6以上设备才支持");
} else { NSLog(@"恭喜您, 当前设备支持Apple Pay");
} //检查用户是否可以进行某种银行卡的支付, 是否支持Amex, MasterCard, Visa与银联四中卡
NSArray *supportedNetworkCards = @[PKPaymentNetworkAmex,
PKPaymentNetworkMasterCard,
PKPaymentNetworkVisa,
PKPaymentNetworkChinaUnionPay]; if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworkCards]) { NSLog(@"没有绑定支付卡");
} else { NSLog(@"有绑定支付卡, 可以开始建立支付请求了");
} //开始配置支付信息 payRequest = [[PKPaymentRequest alloc] init];
payRequest.countryCode = @"CN"; //国家代码
payRequest.currencyCode = @"CNY"; //RMB的币种代码
payRequest.merchantIdentifier = @"merchant.com.zhouxi.PayDemo";
//申请的merchantID
payRequest.supportedNetworks = supportedNetworkCards;
//用户可以进行支付的银行卡
payRequest.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV;
//设置支持的交易处理协议, 3DS必须支持, EMV为可选 //payRequest.requiredShippingAddressFields = \
PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldName;
//设置发货地址 payRequest.requiredShippingAddressFields = PKAddressFieldNone;
//空发货地址 payRequest.shippingMethods = @[]; //设置配送方式 NSDecimalNumber *totalAmount = \
[NSDecimalNumber decimalNumberWithString:@"0.01"];
//创建金额 PKPaymentSummaryItem *total = \
[PKPaymentSummaryItem summaryItemWithLabel:@"重庆周希" amount:totalAmount]; self.summaryItems = [NSMutableArray arrayWithArray:@[total]]; payRequest.paymentSummaryItems = self.summaryItems; } - (void)action { //初始化ApplePay控件
self.payVC = \
[[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:payRequest]; self.payVC.delegate = self; [self presentViewController:self.payVC animated:YES completion:nil]; }
//这个方法可以开始配置ApplyPay银行卡
- (void)jump2MakePaymentsUsingNetworks { /**
* 跳转到添加银行卡界面,系统直接就给我们提供了一个方法,直接创建界面,然后open即可
*/
PKPassLibrary *library = [[PKPassLibrary alloc] init]; /**
* 跳转到绑定银行卡界面
*/
[library openPaymentSetup];
} #pragma mark - PKPaymentAuthorizationViewControllerDelegate Methods - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { //支付凭据, 发给服务器端进行验证支付师傅真是有效
PKPaymentToken *payToken = payment.token; //账单信息
PKContact *billingContact = payment.billingContact; //送货信息
PKContact *shippingContact = payment.shippingContact; //送货方式
PKContact *shippingMethod = payment.shippingMethod; //等待服务器返回结果后再进行系统block调用
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //模拟服务器通信
completion(PKPaymentAuthorizationStatusSuccess);
});
} - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil];
} @end
iOS集成ApplePay的更多相关文章
- iOS集成丁香园DXY OAuth 登陆 swift代码示例
问:iOS集成OAuth登陆分几步? 答:和把大象放冰箱里一样. 第一步:打开webview,跳转到登陆页面: let url = "https://auth.dxy.cn/conn/oau ...
- iOS集成支付宝
需要企业和支付宝签约这个是需要审核的[3天左右 以邮件形式告知你] 使用支付宝进行一个完整的支付功能,大致有以下步骤: 1>先与支付宝签约,获得商户ID(partner)和账号ID(sell ...
- iOS 集成Weex入门教程
前言 自Weex发布伊始, 其口号 "Write Once, Run Everywhere"就吸引了大批前端与客户端程序猿纷纷入坑, 我也不能独善其中. 就我目前所学习Weex的经 ...
- iOS 集成百度地图 位置偏移问题
iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图 ...
- 李洪强iOS之集成极光推送三iOS集成指南
李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push S ...
- 驰骋工作流引擎-CCMobile与安卓、IOS集成过程中的问题与解决方案
CCMobile与安卓.IOS集成过程中的问题与解决方案 前言: CCMobile(2019版本)是CCFlow&JFlow 的一款移动端审批的产品.系统基于mui框架开发,是一款可以兼容An ...
- IOS 集成 Bilibili IJKPlayer播放器,播放rtmp视频流
因为公司项目需要,我一个连iPhone都没用过的人竟然跑去开发iOS APP.近一段时间一直忙于赶项目,到今天差不多了,所以记录一下当时遇到的各种坑,先从ios 集成 ijkplayer播放器说起! ...
- iOS开发ApplePay的介绍与实现
1.Apple Pay的介绍 Apple Pay官方 1.1 Apple Pay概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在i ...
- IOS 集成第三方登录
我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...
随机推荐
- Windows与Linux文件系统互访的几种方法
首先,我们知道基于文件的几种服务:ftp,sftp,这两种服务都是文件传输服务,偏重于网络传输,并不是实时互访.通常,我们需要在远程和本地 同时操作同一个目录,如:在Windows下使用各种强大的ID ...
- QT第五天学习
回顾: QFile QTextSream QDataSream QFileInfo QDir Dir entryList 返回目录下所有文件和目录的名字 entryInfoList 返回目录下所有文件 ...
- js如何准确获取当前页面url网址信息
1.window.location.href(设置或获取整个 URL 为字符串) var test = window.location.href;alert(test);返回:http://i.cnb ...
- swift 启动图片的设置
1 .找到Assets.xcassets 2. 在Assets.xcassets里创建 New LaunchImage 拖入相应的图片 3.选中你的项目,点击General 在App Icons an ...
- 将[4,3,2,5,4,3]分割成[4,3,2]、[5,4,3]两个List的算法
将[4,3,2,5,4,3]分割成[4,3,2].[5,4,3]两个List的算法 package com.srie.test; import java.util.ArrayList; import ...
- Spring context:component-scan代替context:annotation-config
Spring context:component-scan代替context:annotation-config XML: <?xml version="1.0" encod ...
- chrome与pdf的事情
chrome如果安装了chrome PDF viewer插件,可以直接开发pdf文档: 如果把chrome PDF viewer插件禁用了就不能打开了: 输入:chrome://plugins进行所有 ...
- Weex系列一、构建Weex工程
Weex比React Native更简单,更容易学习,并且做到真正的跨平台,一套代码可以多个平台运行.所以建议大家都用Weex吧. 一.安装Node 已经安装Node的,请忽略过去. 检查Node是否 ...
- 私有云存储搭建(owncloud)
第一步.搭建LAMP(基于linux7.1.1503) 1 配置yum(网络加本地,下面为网络) [vault.centos.org_7.1.1503_os_x86_64_] name=added f ...
- Android实现先横向横线展现在纵向拉开图片
前段时间产品那边让我做一个动画,要求是先以横线的方式横向展开,在纵向展示图片,最后展示几秒动画在原路返回,随后我在网上查找资料,发现这方面的记录很少,最后自己写了一个 后期还会慢慢改进: 转载请说明出 ...