IOS内购支付server验证模式
IOS 内购支付两种模式:
内置模式
server模式
内置模式的流程:
app从app store 获取产品信息
用户选择须要购买的产品
app发送支付请求到app store
app store 处理支付请求。并返回transaction信息
app将购买的内容展示给用户
server模式的流程:
app从server获取产品标识列表
app从app store 获取产品信息
用户选择须要购买的产品
app 发送 支付请求到app store
app store 处理支付请求,返回transaction信息
app 将transaction receipt 发送到server
server收到收据后发送到app stroe验证收据的有效性
app store 返回收据的验证结果
依据app store 返回的结果决定用户是否购买成功
上述两种模式的不同之处主要在于:交易的收据验证。内建模式没有专门去验证交易收据,而server模式会使用独立的server去验证交易收据。
内建模式简单快捷,但easy被破解。server模式流程相对复杂,但相对安全。
开发之初,苹果方就非常负责的告知:我们的server不稳定。真正开发之后。发现苹果方果然是非常负责的,不仅是不稳定,并且足够慢。app store server验证一个收据须要3-6s时间。
用户是否能忍受3-6s的等待时间
假设app store server 宕机,怎样确保成功付费的用户可以得到正常服务。
对于第一个问题,我们有理由相信用户全然无法忍受,所以採用异步验证的方式,server收到client的请求后,就将请求放到MCQ中去处理。
对于第二个问题,因为苹果人员非常负责人的告知:我们的server不稳定。所以不排除收据验证超时的情况。对于验证超时的收据,保存到数据库中并标记为验证超时。定时任务每隔一定的时间去app store验证,确保可以获取收据的验证结果。
在开发过程中,须要測试应用是否可以正常的进行支付。可是又不能进行实际的支付,因此须要使用苹果提供的sandbox Store測试。
Store Kit不能在iOS模拟器中使用。測试Store必须在真机上进行。
在sandbox中验证receipt:
https://sandbox.itunes.apple.com/verifyReceipt
在生产环境中验证receipt:
https://buy.itunes.apple.com/verifyReceipt
在实际开发过程中,server端通过issandbox字段标识client传递的收据是沙盒环境中的收据还是生产环境中的收据。
在提交苹果审核前。沙盒測试均无问题。提交苹果审核后。被告知购买失败,审核未通过。通过查询日志发现,client发送的交易收据为沙盒收据,可是issandbox字段却标识为生产环境。
结论:
苹果审核app时,仍然在沙盒环境下測试。可是client同事在app提交苹果审核时。将issandbox字段写死。设置为生产环境。这样就导致沙盒收据发送到https://buy.itunes.apple.com/verifyReceipt去验证。
那么怎样自己主动的识别收据是否是sandbox receipt呢?
识别沙盒环境下收据的方法有两种:
1.依据收据字段 environment = sandbox。
2.依据收据验证接口返回的状态码,假设status=21007。则表示当前的收据为沙盒环境下收据, t进行验证。
苹果反馈的状态码。
- 21000App Store无法读取你提供的JSON数据
- 21002 收据数据不符合格式
- 21003 收据无法被验证
- 21004 你提供的共享密钥和账户的共享密钥不一致
- 21005 收据server当前不可用
- 21006 收据是有效的,但订阅服务已经过期。
当收到这个信息时,解码后的收据信息也包括在返回内容中
- 21007 收据信息是測试用(sandbox),但却被发送到产品环境中验证
- 21008 收据信息是产品环境中使用,但却被发送到測试环境中验证
先生产验证后測试验证,可以避免来回切换接口的麻烦。
測试验证仅仅要用你自己申请的測试appid的时候才会用到,用户不会拥有測试appid,所以不会走到測试验证这一步。
即使生产验证出错,应该也不回返回21007状态吗。測试验证通过的username,和充值金额最好用数据库记录下来,方便公司资金核对。
IOS内购支付server验证模式的更多相关文章
- IOS内购支付服务器验证模式
IOS 内购支付两种模式: 内置模式 服务器模式 内置模式的流程: app从app store 获取产品信息 用户选择需要购买的产品 app发送支付请求到app store app store 处理支 ...
- 苹果IOS内购二次验证返回state为21002的坑
项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...
- 【JAVA】IOS内购二次验证及掉单问题解决
这个估计是我踩过的最大的坑,当时做微信支付的时候也没这么坑爹,当然他俩也半斤八两... 苹果官方明确表示:验证支付时,可能会有一定的延迟.第一次处理的时间就专注的解决这个问题了,忽略了掉单的问题(稍后 ...
- iOS - 内购总结
如果有人以后要在做内购这一块.希望可以好好的阅读这篇文章,虽然不是字字珠玑.但是也是本人亲人趟过了无数的坑,希望可以对大家有所帮助! 下面是在研究工程中遇到的问题(iOS 内购的流程如下 1 ...
- iOS 内购讲解
一.总说内购的内容 1.协议.税务和银行业务 信息填写 2.内购商品的添加 3.添加沙盒测试账号 4.内购代码的具体实现 5.内购的注意事项 二.协议.税务和银行业务 信息填写 2.1.协议.税务和银 ...
- JAVA项目之苹果IAP内购JAVA服务器验证流程详解
1.前言 本博客是经历过多个项目检验的, 绝对真实, 适应于对苹果iap内购稍微有些了解的JAVA开发人员, 认真看, 定能完美解决苹果内购问题. 苹果IAP内购支付实际上是"将客户端支 ...
- iOS 内购遇到的坑
一.内购沙盒测试账号在支付成功后,再次购买相同 ID 的物品,会提示如下内容的弹窗.您以购买过此APP内购项目,此项目将免费恢复 原因: 当使用内购购买过商品后没有把这个交易事件关,所以当我们再次去购 ...
- iOS-IAP内购的那些事(iOS内购漏单的问题)
前言 说起内购,其实挺令开发者厌烦的,原因呢,先不说漏单的问题,首先苹果要扣除30%的销售额哦,可恨不?(我觉得可恨),有些想办法先隐藏掉第三方支付(支付宝.微信等),等项目上线了,再跳过内购使用第三 ...
- iOS内购总结
内购流程: 1. 用户先拿到购买产品的单子, 2. 拿着单子去苹果那里交钱,交完钱让苹果在单子上盖个章 3.拿着盖了章的单子传给自己的服务器来验证是否真的支付成功,服务器是跟苹果验证(我们客户端也是可 ...
随机推荐
- enumerate的简单使用
l = [11,22,33,55,"ss","zz"] for i,v in enumerate(l): print(i,v) #打印结果: # 0 11 # ...
- 【Android】17.4 Activity与IntentService的绑定
分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 本示例通过AlarmManager类以固定的时间间隔调用服务(每隔2秒更新一次随机生成的股票数据).如果将此示例的 ...
- 黑客编程教程(三)Windows 网络协议
首先介绍一下网络协议:网络协议是网络上所有设备之间通信规则的集合,他定义了通信时信息必须采用的格式和这些格式的意义.大多数 网络协议都采用分层体系结,每一层都建立在他的下层之上,向他的上一层提供服务, ...
- Spark学习笔记总结-超级经典总结
Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用.减少了延时处理,提高 ...
- angularjs获取元素以及angular.element()用法
addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容 ...
- Hadoop 新 MapReduce 框架 Yarn 详解【转】
[转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/] 简介: 本文介绍了 Hadoop 自 0.23.0 版本 ...
- js中作用域和闭包
作用域链实例 (1) function example() { var age = 23; alert(age) } var age = 25; example(); alert(age); // ...
- python 字符串 大小写转换 以及一系列字符串操作技巧
总结 capitalize() 首字母大写,其余全部小写 upper() 全转换成大写 lower() 全转换成小写 title() 标题首字大写,如"i love python" ...
- C++使用ocilib访问oracle数据库
引用: http://blog.csdn.net/u011311985/article/details/51221898 测试程序我放到 http://download.csdn.NET/detail ...
- jQuery (一)选择器
上一章开始了jQuery的安装,这一张需要开始学习选择器了,不然不进行选择,就无法使用jQuery提供的库的功能不是. 常用的,就列举这么多吧 <!DOCTYPE html> <ht ...