iOS Apple Pay

来源:互联网 发布:淘宝一元抢购在哪里? 编辑:程序博客网 时间:2024/05/18 00:52

Apple Pay 简介:

  1. Apple Pay与微信,支付宝支付的比较:
    Apple Pay:Apple系统级的支付服务,他没有自己的账户,也不参与资金的流动, Apple Pay只是将原有的实体银行卡变成手机上“虚拟的银行卡”。Apple Pay依赖iPhone系统底层的整合。Apple Pay支付的步骤是:拿出手机,靠近pos机,屏幕自动点亮,再指纹确认即可,时间可缩短到2-3秒。
    支付宝和微信支付:应用级的支付服务,微信支付宝扫码付款的步骤是:拿出手机,解锁手机,打开支付宝app,等待欢迎动画,指纹解锁进入界面,打开二维码,最后商家扫码。这一过程尽管已大大优化,仍需8-10秒左右。

  2. Apple Pay 支持设备: iPhone 6, iPhone 6+, iPad Air 2, iPad mini 3。
    这是因为 Apple Pay 需要特定的硬件芯片来支持,这个硬件叫做 Secure Element (简称SE,安全元件),他可以用来存储和加解密信息。

  3. Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的的一种基于NFC(近场通讯)的手机支付,于2014年10月20日在美国正式上线。 2016年2月18日正式登录中国。Apple Pay的本质=刷卡,只不过是用手机来代替了实体的卡片,用Touch ID来代替签名。

  4. Apple Pay支持版本号:iOS8.0以上的版本,最好升级到iOS9.2以上,iOS9.2以上增加了对银联卡的支持。

  5. 首批支持 Apple Pay的银行有:中国农业银行、中国银行、上海银行、中国建设银行、中信银行、招商银行、民生银行、广发银行、中国工商银行、兴业银行、中国邮政储蓄银行、上海浦东发展银行。
    以下银行将会陆续支持 Apple Pay:平安银行、光大银行、广州银行、华夏银行、宁波银行、交通银行、北京银行。

Apple Pay 开发步骤:
1.使用Xcode创建一个项目,并设置好对应的BundleID。
2.注册并配置一个商业标识符。

  • 登录开发者中心,https://developer.apple.com/account/
  • 进入证书配置栏目
  • 添加一个AppID
  • 配置Merchant ID
  • 为Merchant ID配置证书,并下载证书安装到钥匙串
  • 检查安装到钥匙串的证书是否有效
  • 绑定Merchant ID到App ID

3.创建应用,开启Apple Pay支付。

下面详解Apple Pay开发步骤:
1.使用Xcode创建一个项目,并设置好对应的BundleID。
这里写图片描述
2.注册并配置一个商业标识符。
登录开发者中心,https://developer.apple.com/account/,进入证书配置栏目,添加一个AppID,AppID必须支持Apple Pay
这里写图片描述
点击Continue继续,这时,Apple Pay的状态为Configurable,必须配置Merchant ID(商户ID)
这里写图片描述

点击App ID的Edit,配置MerchantID

这里写图片描述

进入以下界面

这里写图片描述
若有Merchant ID,则选择Merchant ID,跳过创建Merchant ID步骤,
进入Merchant ID创建界面,创建Merchant ID,注意Merchant ID必须以Merchant开头。
这里写图片描述

创建Merchant ID完成后,选择App ID界面,选择Edit,你当前创建的Merchant就会显示出来,选择Merchant ID,
这里写图片描述

这时进入App ID界面,就会发现当前Apple Pay可用
这里写图片描述

3,选择Merchant ID,点击Edit,创建CSR证书
这里写图片描述

选择YES
这里写图片描述

点击继续
这里写图片描述

创建证书请求文件
这里写图片描述

进入系统钥匙串,
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

至此,请求证书创建完成

上传请求证书
这里写图片描述

点击Continue,进入证书下载页面,点击下载安装

这里写图片描述

如果出现以下情况
这里写图片描述

这说明安装证书无效,点击https://www.apple.com/certificateauthority/,
这里写图片描述

点击WWDR Certificate(Expiring 02/07/23)下载安装,这时,CSR有效
这里写图片描述

至此,环境配置成功

4.打开Xcode项目,打开Apple Pay服务
这里写图片描述

设置版本号
这里写图片描述

5.代码实现
判断当前设备是否支持Apple Pay

// 1.判断当前设备是否支持Applypayif (![PKPaymentAuthorizationViewController canMakePayments]) {    NSLog(@"当前设备不支持Applypay");    self.payView.hidden = YES;}else {    // 判断当前wallet是否添加了银行卡    if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]]) {       // 创建一个跳转按钮,当用户点击按钮时,跳转到添加银行卡的界面       PKPaymentButton *button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleBlack];        [button addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];            [self.payView addSubview:button];    }else {        // 创建一个支付按钮,当用户点击按钮时,购买商品        PKPaymentButton *button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleBlack];        [button addTarget:self action:@selector(buy) forControlEvents:UIControlEventTouchUpInside];        [self.payView addSubview:button];    }}

点击支付

// 跳转到添加银行卡界面- (void)jump {    PKPassLibrary *pl = [[PKPassLibrary alloc] init];    [pl openPaymentSetup];}// 购买-(void)buy {    NSLog(@"购买商品,开始支付");    //1.创建一个支付请求    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];    //1.1 配置支付请求    //1.1.1 配置商家ID(注意设置为Merchant ID)    request.merchantIdentifier = @"merchant.com.lianranpay";    //1.1.2 配置货币代码,以及国家代码    request.countryCode = @"CN";    request.currencyCode = @"CNY";    //1.1.3 配置请求支持的支付网络    request.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];    //1.1.4 设置商户的处理方式    request.merchantCapabilities = PKMerchantCapability3DS;    //1.1.5 配置购买的商品列表    NSDecimalNumber *price1 = [[NSDecimalNumber alloc] initWithString:@"1.28"];    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"苹果派" amount:price1];    NSDecimalNumber *price11 = [[NSDecimalNumber alloc] initWithString:@"1.28"];    PKPaymentSummaryItem *item11 = [PKPaymentSummaryItem summaryItemWithLabel:@"苹果派" amount:price11];    // 注意支付列表最后一个代表汇总    NSDecimalNumber *price111 = [[NSDecimalNumber alloc] initWithString:@"2.56"];    PKPaymentSummaryItem *item111 = [PKPaymentSummaryItem summaryItemWithLabel:@"祺績财务" amount:price111];    request.paymentSummaryItems = @[item1,item11,item111];    //1.2 配置请求的附加项    //1.2.1 是否显示发票收获地址,显示哪些选项    request.requiredBillingAddressFields = PKAddressFieldAll;    //1.2.2 是否显示快递收获地址,显示哪些选项    request.requiredShippingAddressFields = PKAddressFieldAll;    //1.2.3 配置快递方式    NSDecimalNumber *price2 = [[NSDecimalNumber alloc] initWithString:@"18.0"];    PKShippingMethod *methods1 = [PKShippingMethod summaryItemWithLabel:@"顺风快递" amount:price2];    methods1.detail = @"24小时内送到";    methods1.identifier = @"shunfeng";    NSDecimalNumber *price3 = [[NSDecimalNumber alloc] initWithString:@"10.0"];    PKShippingMethod *methods2 = [PKShippingMethod summaryItemWithLabel:@"韵达快递" amount:price3];    methods2.detail = @"送货上门";    methods2.identifier = @"yunda";    request.shippingMethods = @[methods1,methods2];    //1.2.3.2 配置快递的类型    request.shippingType = PKShippingTypeStorePickup;    //1.3 添加一些附加数据    request.applicationData = [@"buyID=12345" dataUsingEncoding:NSUTF8StringEncoding];    //2.验证用户的支付授权    PKPaymentAuthorizationViewController *authVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];    authVC.delegate = self;    [self presentViewController:authVC animated:YES completion:nil];}

PKPaymentAuthorizationViewControllerDelegate协议方法

// 如果当用户授权成功,调用方法/* controller:授权控制器 payment:支付对象 completion:系统给定的一个回调代码块,我们需要执行这个代码块,来告诉系统当前的支付状态斯否成功 */- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller                       didAuthorizePayment:(PKPayment *)payment                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion{    // 一般在此处,拿到支付信息,发送给服务器处理,处理完毕后,服务器会返回一个状态,告诉可会断,是否支付成功,然后由客户端进行处理    BOOL isSucess = YES;    /*     服务器处理     * 验证支付数据的哈希表与签名     * 为加密过的支付数据解码     * 向支付处理系统提交支付数据     * 向订单追踪系统提交订单     */    if (isSucess) {        completion(PKPaymentAuthorizationStatusSuccess);    }else {        completion(PKPaymentAuthorizationStatusFailure);    }}// 当用户授权成功,或取消授权时使用- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{    NSLog(@"授权结束");    [self dismissViewControllerAnimated:YES completion:nil];}

Apple Pay 支付开发成功,预祝各位码农新年快乐!如有不足,请见谅!

0 0
原创粉丝点击