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];}
—————–陈洪鑫——————-
- Apple Pay 技术分享_陈hong_鑫
- Apple Pay 技术分享_陈hong_鑫
- Apple Pay 技术分享_陈hong_鑫
- Apple Pay支付分享
- Apple Pay之Payment Token技术浅析
- Apple Pay
- Apple Pay
- Apple Pay
- apple Pay
- Apple pay
- apple pay
- Apple Pay
- apple pay
- Apple pay
- 【干货分享】快速玩转Apple Pay开发
- 好奇,Apple Pay用的什么NFC技术呢
- Apple Pay 究竟是什么
- Apple Pay的使用
- 素数筛选法,快速获取素数序列
- 20161101
- 栈内存 堆内存
- ADS2014中的电路符号(symbol)设置及使用
- #include<stdio>与#include"stdio"的区别
- Apple Pay 技术分享_陈hong_鑫
- .tmux.conf设置
- 神经网络九:Regularization(正则化)与Dropout
- PCB Layout Experience
- React Native(RN)-组件生命周期
- 20161101 Python 读书笔记之八皇后问题
- struts2之ModelDriven
- 第二十一章 用于不相交集合的数据结构
- 链队列---队列的链式表示和实现