Apple Pay 技术分享_陈hong_鑫


知识体系



1.  什么是 Apple Pay?


Apple Pay,是苹果公司2014苹果秋季新品发布会上发布的一种基于NFC的手机支付功能,于2014年10月20日在美国正式上线。2016218日凌晨500 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值