1
yylyyl 2014-12-20 11:30:25 +08:00 via iPhone
应该在服务器端检查 receipt 的合法性。
|
3
wzxjohn 2014-12-20 12:13:55 +08:00 via iPhone
@lshero 如果是单机游戏,那歇歇吧。。。基本无解。。。就算你发回服务器检查别人还是可以抓取你的请求伪造。服务端验证收据只能防初级用户。只有带账号系统的网游才能真正的避免内购欺骗。。。
其实我觉得最好的方法是把单机游戏的重要资源包放到服务器上,并使用账号系统。用户内购之后赋予这个账号下载这个包的权限。当访问内购内容的时候再下载这个包。。。 |
4
lshero OP @wzxjohn 客户端不是游戏,内购也只是内购金币,有账号系统,然后金币可以进行一些虚拟消费。
虽然API用了SSL,但是由于担心抓包所以想的是服务器和客户端约定一个key把交易的信息元素按照一定的顺序排列后md5一下生成签名,服务器校验一下签名就知道是不是合法请求了,单纯的抓包并不知道签名生成规则所以无法生成服务器认可的签名串,但是现在的担心就是如果客户端被反编译了,会不会找到签名的生成方法从而伪造签名。 所以我想的最有效的解决办法就是交易完后服务器对服务器进行通讯,所以想问一下苹果是否提供验证收据有效性的API或者是可以给苹果一个URL内购完之后回掉呢? |
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 一节。话说,要做内购的话不是应该先查官方文档么?
|
6
lshero OP @xmvagrant 十分感谢,年底帮人忙接到一个烂摊子,看之前的接口啥验证都没写所以想让他们知道一下,同时也避免出了问题责任归我
|
7
wzxjohn 2014-12-20 17:38:23 +08:00 via iPhone 1
@lshero 看到的晚了一点,有人已经给出了很好的解决方法~苹果官方当然有检查有效性的Api,服务器做验证即可~不过要注意的是苹果并没有内购然后退款的检测措施,所以这个情况还是避免不了。不过这种情况毕竟是少数,不用过于纠结。只要验证了收据保证不被欺骗即可。
|
12
yellowV2ex 2014-12-23 19:30:03 +08:00
receipt交给服务器验证就好啦
|