(转)[iOS概念]Apple Pay与IAP的区别
Apple Pay是什么?
在Apple Pay的发布会上,Eddy Cue表示,苹果并没有兴趣建立一个收集用户数据的业务,苹果并不知道你购买了什么,不知道你是从哪里购买的,为了这个商品花了多少钱。所以这也就是苹果和支付宝,微信等最大的不同:Apple Pay并不会将资金存放在Apple Pay中。
Apple Pay其实也就是相当于一个卡包,替你保存银行卡的信息,只不过是将这个卡包虚拟化了而已,而且Apple Pay中存储的银行卡信息等都进行了加密,所以非常的安全(当然所有的安全都不会是绝对安全)
Apple Pay中的 Pay业务并不是Apple自己的业务,Apple Pay本身只是一个第三方的桥梁:连接用户和银行。 Pay业务只是银行和Apple之间所合作的一个业务,它和银行之间是强关联的关系,和Apple之间是弱关联的关系,没有银行也就没有pay了,但是支付宝和微信就不一样,用户将资金放在支付宝和微信中,即便没有银行,也可以直接进行支付。
Apple Pay和IAP的区别
什么是IAP呢?其实IAP就是In App purchase,即应用内购买,也就是我们常说的苹果内购,IAP(应用内购买)是最常用的一种支付方式,属于免费应用+应用内购买的模式。IAP主要是应用(App)和App Store服务器之间进行信息的传递,用户在APP内部进行内购操作相当于用户购买了App Store中的某个商品,这是用户和APP Store之间的交易,然后苹果从交易中抽取30%,APP的所有者获得70%。
Apple Pay则不然,Apple Pay实质上就是等同于用户使用银行卡进行刷卡消费,Apple Pay就是一个卡包的作用,它建立的是用户,银行,商家之间的关系:用户购买商家的商品进行消费的时候,实则是通过Apple Pay向银行发送付款信息,然后银行接受消息,进行付款交易,交易完成,用户获得商品,商家获得money。
理解Apple Pay和应用内支付之间的区别是非常重要的。Apple Pay用于销售物理商品,比如食品杂货、衣服和电器,也能用于支付俱乐部的会员资格、酒店预订以及演出门票。另一方面,应用内支付(IPA)只用于销售虚拟物品,如你的App里的高级内容,以及订阅数字内容。
PassKit框架为Apple Pay提供API,应用内支付(IAP)的API则由StoreKit框架提供。
Store Kit代表App和App Store之间进行通信。程序将会从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买。当用户需要购买某件产品时,程序调用Store Kit来收集购买信息。
IAP流程
什么是IAP?全称即In App Purchase,也就是我们所讲的苹果内购,IAP的流程分为两种,一种是直接使用Apple的服务器进行购买和验证,另一种就是自己架设服务器进行验证。由于国内网络连接Apple服务器验证非常慢,而且也是为了防止黑客伪造购买凭证,通常都是选择自己架设服务器进行验证。
使用Apple服务器
自己架设服务器
简单说下第二中情况的流程:
- 用户进入购买虚拟物品页面,App从后台服务器获取产品列表然后显示给用户
- 用户点击购买购买某一个虚拟物品,APP就发送该虚拟物品的productionIdentifier到Apple服务器
- Apple服务器根据APP发送过来的productionIdentifier返回相应的物品的信息(描述,价格等)
- 用户点击确认键购买该物品,购买请求发送到Apple服务器
- Apple服务器完成购买后,返回用户一个完成购买的凭证
- APP发送这个凭证到后台服务器验证
- 后台服务器把这个凭证发送到Apple验证,Apple返回一个字段给后台服务器表明该凭证是否有效
- 后台服务器把验证结果在发送到APP,APP根据验证结果做相应的处理
Apple Pay的支付流程
Apple并不处理和付款相关的逻辑,它只是负责支付信息的传递。Apple通过Touch ID来验证银行卡持有者的身份,实际的扣款行为发生在银联端,接入了Apple Pay的商品(即App)组织好Apple返回的支付信息,向银行发出扣款请求后,该笔交易才会真正发送扣款,所以APP本身是和银联进行结算,Apple Pay只不过是作为一种支付的渠道而已。
Apple Pay的支付流程
整个流程中如下:
- 客户端通过苹果API,在 APP 应用内展示 Apple Pay 支付控件。
- 用户在 Apple Pay 的支付控件上进行生物验证(指纹或者人脸识别)或者手机密码验证。
- 苹果在用户验证通过之后,会生成一个用户选中的银行卡相关的 PaymentToken 加密数据, Apple Pay 必须在有网情况下才能进行,苹果需要从开发者网站上使用证书的公钥进行加密 ,完成后通过 API 回调返回给客户端前端。
- 客户端获取到 PaymentToken 后,给服务端发送扣款请求,等待支付结果。
- 服务端收到客户端上送的 PaymentToken,解密 PaymentToken 取出一些关键字段信息,附带其他订单信息,再与支付供应商(如国内银联)进行通信发起扣款。
- 服务端收到扣款结果后,再返支付结果给手机客户端,最终通知用户支付结果。