V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
lshero
V2EX  ›  iDev

iOS 做内购的话如何确保与服务器安全通信?

  •  
  •   lshero · 2014-12-20 11:22:48 +08:00 · 3558 次点击
    这是一个创建于 3628 天前的主题,其中的信息可能已经有所发展或是发生改变。
    iOS做内购,想的结束后把充值结果发客户端送回服务器,最早想的是客户端生成一个签名串,服务端比对一下就完事了。
    但是想一想客户端是否可能会被反编译到看出签名串的生成方法从而伪造充值请求
    基于这种状况有什么比较好的解决办法呢?
    12 条回复    2014-12-23 19:30:03 +08:00
    yylyyl
        1
    yylyyl  
       2014-12-20 11:30:25 +08:00 via iPhone
    应该在服务器端检查 receipt 的合法性。
    lshero
        2
    lshero  
    OP
       2014-12-20 11:43:52 +08:00
    @yylyyl 但是整个购物流程都实在客户端完成的啊
    wzxjohn
        3
    wzxjohn  
       2014-12-20 12:13:55 +08:00 via iPhone
    @lshero 如果是单机游戏,那歇歇吧。。。基本无解。。。就算你发回服务器检查别人还是可以抓取你的请求伪造。服务端验证收据只能防初级用户。只有带账号系统的网游才能真正的避免内购欺骗。。。
    其实我觉得最好的方法是把单机游戏的重要资源包放到服务器上,并使用账号系统。用户内购之后赋予这个账号下载这个包的权限。当访问内购内容的时候再下载这个包。。。
    lshero
        4
    lshero  
    OP
       2014-12-20 12:27:59 +08:00
    @wzxjohn 客户端不是游戏,内购也只是内购金币,有账号系统,然后金币可以进行一些虚拟消费。

    虽然API用了SSL,但是由于担心抓包所以想的是服务器和客户端约定一个key把交易的信息元素按照一定的顺序排列后md5一下生成签名,服务器校验一下签名就知道是不是合法请求了,单纯的抓包并不知道签名生成规则所以无法生成服务器认可的签名串,但是现在的担心就是如果客户端被反编译了,会不会找到签名的生成方法从而伪造签名。

    所以我想的最有效的解决办法就是交易完后服务器对服务器进行通讯,所以想问一下苹果是否提供验证收据有效性的API或者是可以给苹果一个URL内购完之后回掉呢?
    xmvagrant
        5
    xmvagrant  
       2014-12-20 12:54:58 +08:00   ❤️ 1
    @lshero 苹果提供服务器验证 receipt的方法啊,见https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573-CH105-SW1 Validating Receipts With the App Store 一节。话说,要做内购的话不是应该先查官方文档么?
    lshero
        6
    lshero  
    OP
       2014-12-20 16:04:37 +08:00 via Android
    @xmvagrant 十分感谢,年底帮人忙接到一个烂摊子,看之前的接口啥验证都没写所以想让他们知道一下,同时也避免出了问题责任归我
    wzxjohn
        7
    wzxjohn  
       2014-12-20 17:38:23 +08:00 via iPhone   ❤️ 1
    @lshero 看到的晚了一点,有人已经给出了很好的解决方法~苹果官方当然有检查有效性的Api,服务器做验证即可~不过要注意的是苹果并没有内购然后退款的检测措施,所以这个情况还是避免不了。不过这种情况毕竟是少数,不用过于纠结。只要验证了收据保证不被欺骗即可。
    xmvagrant
        8
    xmvagrant  
       2014-12-20 19:39:19 +08:00
    @wzxjohn 购买后退款没有检测措施这个问题让我很蛋疼。。。
    lshero
        9
    lshero  
    OP
       2014-12-20 21:05:51 +08:00
    @xmvagrant 那这一部分你现在怎么处理的?当坏账还是?
    xmvagrant
        10
    xmvagrant  
       2014-12-22 13:55:55 +08:00
    @lshero 项目做到一半黄了,所以“这一部分”还没产生-_-
    lshero
        11
    lshero  
    OP
       2014-12-22 14:16:20 +08:00
    @xmvagrant 我感觉我接手的烂摊子应该也好不到哪里去,还是把风险告诉她们吧,免得这种帮忙费力又不讨好
    yellowV2ex
        12
    yellowV2ex  
       2014-12-23 19:30:03 +08:00
    receipt交给服务器验证就好啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1556 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:03 · PVG 01:03 · LAX 09:03 · JFK 12:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.