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授权.就是必须安装 ...
随机推荐
- 2. 托管对象数据模型的基本知识(Core Data 应用程序实践指南)
第一章的例子配置好了持久化存储区.持久化存储协调器.托管对象上下文.但是还没有对象图,本章要介绍托管对象模型的基础知识,并配置范例程序的对象图. 2.1. 托管对象模型是什么 托管对象模型是一种数据结 ...
- C++ STL算法系列1---unique , unique_copy函数
一.unique函数 类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素. 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序 ...
- HDU-2502-月之数
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2502 分析: 比如n=4时,有: 1000 1001 1010 1011 1100 1101 1110 ...
- jquery.cookie实战用法详细解析
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...
- MySQL XtraBackup备份脚本
#backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...
- MyBatis中的条件判断单引号双引号的使用
对于字符串判断, <if test="aIn != 'A'" >会出现问题,系统会试图把'A'转成数字,改为 <if test='aIn != "A&q ...
- 分析器错误消息: 无法识别的属性“targetFramework”。
配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分 ...
- Charlse 使用小记
抓包神器Fiddler 是基于微软的 .Net 技术开发的,没办法直接在 Mac/Linux 下使用,而Charlse是Mac下常用的网络封包截取工具.是一个HTTP代理服务器,HTTP监视器,反转代 ...
- 应用程序初次运行数据库配置小程序(Java版)
应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的 ...
- [转载] ping和telnet的区别
转载自:http://www.cnblogs.com/Jtianlin/p/4045021.html windown7下打开telnet功能: 控制面板 --- > 程序(小图标下直接到[程序和 ...