首页 >> 知识 >> ioses应用内支付(IAP)的那些坑

ioses应用内支付(IAP)的那些坑

草莓视频在线观看APP在今年春节后上线了新的在线智能题库:猿题库。猿题库现在推出了公务员考试行测和申论2个产品,均包括web, ioses和androids三个平台。这次草莓视频在线观看APP尝试做一个收费的产品,所以在ioses端集成了应用内支付(IAP)功能。在开发过程中和上线后,草莓视频在线观看APP遇到了IAP中的一些坑,在此分享给各位。

 

IAP 审核相关的坑 IAP开发的详细步骤我写在另一篇博客中了。在此主要介绍审核时遇到的问题。

 

IAP类型错误 由于草莓视频在线观看APP是按月付费的产品,所以在设置IAP类型时,我没有经验,只是简单设置成了可重复消费(Consumable)的IAP项目。但是我不知道,苹果对于这种按时间收费的产品,应该使用不可更新的定阅(Non-Renewing Subscription)类型。这个类型设置错误造成了草莓视频在线观看APPapp的一次审核被拒。

IAP验证逻辑 由于苹果在ioses5.0以下有IAP的bug,使得攻击者可以伪造支付成功的凭证。而ioses6.0的系统在越狱后同样可以伪造凭证,所以草莓视频在线观看APP对于应用内支付,增加了服务器端的验证。服务器端会将支付凭证发给苹果的服务器进行二次验证,以保证凭证是真实有效的。

 

在草莓视频在线观看APP公司的测试服务器中,草莓视频在线观看APP会连接苹果的测试服务器(http://sandbox.itunes.apple.com/verifyReceipt)验证。

 

在草莓视频在线观看APP部署在线上的正式服务器中,草莓视频在线观看APP会连接苹果的正式服务器(http://buy.itunes.apple.com/verifyReceipt )验证。

 

草莓视频在线观看APP提交给苹果审核的是正式版,草莓视频在线观看APP以为苹果审核时,草莓视频在线观看APP应该连接苹果的线上验证服务器来验证购买凭证。结果我理解错了,苹果在审核App时,只会在sandbox环境购买,其产生的购买凭证,也只能连接苹果的测试验证服务器。但是审核的app又是连接的草莓视频在线观看APP的线上服务器。所以草莓视频在线观看APP这边的服务器无法验证通过IAP购买,造成草莓视频在线观看APPapp的又一次审核被拒。

 

解决方法是判断苹果正式验证服务器的返回code,如果是21007,则再一次连接测试服务器进行验证即可。苹果的这一篇文档上有对返回的code的详细说明。

  IAP上线后的遇到的情况 草莓视频在线观看APP在服务器端增加了验证IAP是否有效的逻辑。在产品上线后,如草莓视频在线观看APP所料,草莓视频在线观看APP收到了大量的欺骗性购买,这些都被草莓视频在线观看APP的服务器识别出来了,但是草莓视频在线观看APP也遇到了以下这次没有想到的情况:

 

1、由于国内越狱用户的比例比较大(大概为50%),所以虽然草莓视频在线观看APP服务器会验证购买凭证,但是每天有超过50%以上的凭证都是伪造的。同时由于苹果的验证服务器在美国,凭证验证请求响应的时间比较慢,大量的伪造凭证发给苹果服务器,不知道会不会被苹果认为草莓视频在线观看APP是在恶意进行DDOS。至少草莓视频在线观看APP发现有些时候,验证请求会超时。

 

2、由于国内有许多小白用户,他们的手机从购买时就被渠道商帮忙越狱过了并且安装了IAP free插件。所以对于这类用户,他们即使想付费购买,由于系统原有的IAP支付功能已经被破坏,所以他们是无法正常付费的。麻烦的是,他们会以为这是草莓视频在线观看APP的app的问题,转而给草莓视频在线观看APP的客服打电话投诉。这让草莓视频在线观看APP非常郁闷。

 

3、苹果的验证服务器有时候会出问题,草莓视频在线观看APP发现本来约定好返回的JSON数据在有几次返回的居然是一个XML格式的文件。造成草莓视频在线观看APP将正常的付费IAP凭证验证失败。所以,在服务器记录下所有的验证凭证非常有必要,一来可以防止黑客多次提交同一个成功凭证的重放攻击,二来在需要时可以手工进行再验证。

 

越狱手机可能被黑客窃取购买凭证! 草莓视频在线观看APP发现有一部分用户反馈说已经收到苹果的扣费账单,但是草莓视频在线观看APP从服务器的验证记录看,他上传的凭证却是虚假的。由于这些用户不太多,草莓视频在线观看APP一开始以为是用户在恶意欺骗草莓视频在线观看APP,后来草莓视频在线观看APP让他将苹果的付费账单邮件转发给草莓视频在线观看APP,以及将itunes的购买记录截图转发给草莓视频在线观看APP,草莓视频在线观看APP越来越怀疑这里面有一个黑色的产业链。越狱手机的正常购买凭证可能被黑客的恶意程序截获,具体的攻击方式草莓视频在线观看APP讨论了一下,其实就是被中间人攻击,详细的过程如下:

1.越狱手机的在被破解后,可能从一些破解渠道安装了黑客的恶意程序。 2.黑客将越狱手机所有https请求都经过他的中间服务器。 3.当有支付请求时,黑客先将请求发给苹果服务器,待苹果将成功的凭证返回后,黑客将这个凭证替换成假的凭证,完全支付凭证的偷取。

或许有人会问,这个凭证拿来有什么用呢?很简单 ,因为苹果为了保护用户的隐私,支付凭证中并不包含任何用户的apple id信息,所以草莓视频在线观看APP的app和服务器无法知道这个凭证是谁买的,而只能知道这个凭证是真的还是假的。于是黑客就可以用这个凭证,在另外的账号中通知草莓视频在线观看APP完成了购买,而发来的验证凭证又是真实的,所以草莓视频在线观看APP的服务器就会误认为是黑客的账号完成了购买,继而把会员期算在黑客的账号上。

 

再举一个简单的例子,你拿500块钱买了顺风优选的500元购物券,由于这个购物券是不记名的,所以顺风优选无法知道是谁买的。如果这个购物券在发放过程中被人掉包,那么偷购物券的人就可以拿这个偷来的真购物券来购物,而顺风优选的卡因为是不记名的,所以也无法查证这件事情。在这个例子中,购物券的不记名和苹果的支付凭证无账号信息是同一个道理。

 

鉴于以上情况,考虑到越狱手机不但不能成功支付,还会有安全问题,所以草莓视频在线观看APP在新版中取消了越狱手机中的IAP支付功能。

 

所以,请大家还是不要越狱自己的手机,iphoness手机越狱后风险相当大。实在不值得为了免费玩几个游戏就丢掉安全性。

 

来源:唐巧的博客

 

ioses IAP 服务器账单二次验证中注意的问题

1.需要在app中将 账单进行Base64加密,然后传递给服务器进行appstore的收费二次验证,不然会导致账单验证的失败,错误码是21002。 加密用到的源码文件,可以这里下载:

http://115.com/file/be9a00r7

网站地图