Apple Pay 技术分享_陈hong_鑫

来源:互联网 发布:freeswitch java 编辑:程序博客网 时间:2024/05/22 07:58

知识体系

这里写图片描述

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];}

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

0 0
原创粉丝点击