Apple Pay 技术分享_陈hong_鑫

知识体系

这里写图片描述

1. 什么是 Apple Pay?

Apple Pay,是苹果公司在2014苹果秋季新品发布会上发布的一种基于NFC的手机支付功能,于2014年10月20日在美国正式上线。2016年2月18日凌晨5:00, Apple Pay 业务在中国上线.

2. 应用场景

线下:要求商家拥有支持NFC功能的刷卡机
线上:要求App的支持。目前美团、大众、京东等网站均支持。这也是为什么我们现在需要学习Apple Pay集成的原因

3. 与传统第三方支付的区别

硬件要求:Apple Pay要求手机在iPhone6以上设备,iOS8以上的系统。
网络要求:线下支付可以没有网络支持
安全: 更加安全,无需第三方账号
效率: 支付时间短,不需要扫描二维码等操作
使用功能:功能较单一、升级的ATM机可以取款。但不能进行转账理财

4. 线上集成的步骤

1.环境配置

首先创建一个Xcode工厂
登陆开发者账号,证书中心
添加一个AppID,并勾选Apple Pay功能
配置MerchantID,并创建相应的证书,下载并安装到钥匙串中
绑定AppID 与 MerchantID
在Xcode中调到iOS8以上(在中国iOS9.2以后才支持银联)
在Xcode中打开Apple Pay功能,出现三个对勾说明配置完成

2.代码实现:

Apple Pay支付原理图:

这里写图片描述
支付请求原理图
这里写图片描述

具体处理步骤如下:

框架发送支付请求给安全模块,只有安全模块可以访问存储在设备上的标记化的卡信息。
安全模块把特定的卡和商家等支付数据加密,以保证只有苹果可以读取,然后发送给框架。框架会将这些数据发送给苹果。
苹果服务器再次加密这些支付数据,以保证只有商家可以读取。然后服务器对它进行签名,生成支付token,然后发送给设备
框架调用相应的代理方法并传入这个token,然后你的代理方法传送token给你的服务器

步骤:

//判断设备是否支持
[PKPaymentAuthorizationViewControllercanMakePayments];

判断wallet卡包是否绑定银行卡
[PKPaymentAuthorizationViewControllercanMakePaymentsUsingNetworks:@[PKPaymentNetworkMasterCard,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa]];

//创建支付请求
 PKPaymentRequest *requst = [[PKPaymentRequestalloc]init];
    // 配置商家ID
    requst.merchantIdentifier =@"merchant.appyPayDemo1";

    //配置货币代码及国家代码
    requst.countryCode =@"CN";
    requst.currencyCode =@"CNY";
    //配置请求支持的支付网络
    requst.supportedNetworks =@[PKPaymentNetworkVisa,PKPaymentNetworkMasterCard,PKPaymentNetworkChinaUnionPay];
    //配置商户的处理方式
    requst.merchantCapabilities =PKMerchantCapability3DS;
    //配置购买的商品列表,如果有多项 商品 列表信息 最后一项为汇总信息
    NSDecimalNumber *price = [NSDecimalNumberdecimalNumberWithString:@"0.01"];
    PKPaymentSummaryItem *item = [PKPaymentSummaryItemsummaryItemWithLabel:@"苹果6s"amount:price];
    requst.paymentSummaryItems =@[item];
    //配置请求的附加项
     //2.1 是否显示发票收获地址
    requst.requiredBillingAddressFields =PKAddressFieldAll;
    //2.2 是否显示快递收货地址
    requst.requiredShippingAddressFields =PKAddressFieldAll;
    //2.3 配置快递方式

    NSDecimalNumber *price1 = [NSDecimalNumberdecimalNumberWithString:@"0.01"];

    PKShippingMethod *method1 = [PKShippingMethodsummaryItemWithLabel:@"顺丰快递"amount:price1];
    method1.identifier =@"顺丰";

    requst.shippingMethods =@[method1];
    requst.shippingType =PKShippingTypeShipping;

    //添加附件数据
    requst.applicationData = [@"buyID = 1234567"dataUsingEncoding:NSUTF8StringEncoding];


给支付授权
 //验证用户的支付授权
    PKPaymentAuthorizationViewController *avc = [[PKPaymentAuthorizationViewControlleralloc]initWithPaymentRequest:requst];
    avc.delegate =self;
    [selfpresentViewController:avcanimated:YEScompletion:nil];


处理支付凭证
PKPaymentAuthorizationViewControllerDelegate 的方法中处理

// 如果用户授权成功就会调用方法
//参数一、授权控制器
//参数二、支付对象
//参数三、系统给定一个回调代码块,我们需要执行这个代码块,来告诉系统当前的支付状态十分成功
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{

    //这里拿到支付信息,发送给服务器处理,处理完毕服务器会返回一个状态,告诉客户端,是否支付成功,然后由客户端处理
    BOOL success =YES;
    if (success) {
        completion(PKPaymentAuthorizationStatusSuccess);
    }else
    {
        completion(PKPaymentAuthorizationStatusFailure);

    }


}

//执行这里的方法代表支付授权结束或者取消。也是返回上一个界面的时机

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
    NSLog(@"授权结束");
    [selfdismissViewControllerAnimated:YEScompletion:nil];
}

—————–陈洪鑫——————-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章