iOS的in-app purchase C#服务器二次验证实现

iOS的in-app purchase实现,早在ios4的时候,我实现了一次,这次升级到ios8,重新看了下文档,ios本身有了更新,加上这次我们要做服务器二次验证,还是好好摸索了下。

首先我要说的是,ios的文档内虽然给出了服务器验证的代码,但是完全是用object-c实现的。我想这本身没什么太多价值吧。至少我还没遇见用oc来实现游戏逻辑服务器的。如果是应用,可能很多人会使用PHP,asp,或者Java来实现服务器,那么这块我就不说了,网上可以搜到非常多的资料。我这里着重介绍C#服务器的实现(为什么游戏服务器用C#,不用C++?项目就是这样,也就不解释了)。客户端的代码网上到处都是了,不再罗列

设计思路:

注意点:

1.ios7以后的版本,transaction中的transactionReceipt已经被淘汰,虽然目前到8.1.3为止,仍旧可以访问该变量,但是谁知道哪天就不行了呢,正确的访问方法

NSURL *url = [[NSBundle mainBundle] appStoreReceiptURL];

NSData *receipt = [NSData datawithContentsOfURL:url];

2.接下来很容易出现问题的部分,按照ios的文档,此时你需要把这个NSData*的收据数据发送到你的服务器上进行二次验证,ios很轻巧的给出了一段oc的范例代码。(但是有几个人会用OC来写游戏服务器啊,范例代码完全没有参考价值)。也就是说,此时,我们需要把NSData*转换成我们服务器能读取的数据格式,大部分的服务器代码(java,php,c++,C#)我们会使用byte数组,或是string,char数组来传递。我们的项目比较特殊,使用了Unity3D的接口,所以只接受string格式。

这里我要说的是,我看到网上有人,包括unity3d的某个插件是在客户端上直接使用httpwebrequest的方式,然后客户端直接处理httpwebresponse,这种做法可以获得正确的验证,但这不是服务器二次验证,因为根本没有递交到服务器上,只是在客户端代为行使了服务器的权利。还有网上有文章介绍在客户端使用httprequest把数据POST到服务器,再由服务器POST给app

store,我没有试过这种方式,但是我一样觉得这完全多此一举,且麻烦。最佳的方式,就应该是像ios文档描述的那样,使用socket发送给服务器,由服务器post给app
store。

但是要注意的是,此时读取出来的NSData*不能直接转NSString*,可能里面由结束符,直接转的话,你将无法获得完整或是正确的字符串。所以直接调用NSData的base64EncodeString,才能转出争取完整的字符串。(其实这步更好的是放到服务器上去加密,假如你不像我一样必须传递给服务器string类型的话,你可以直接把NSData传递给本地的socket,但是我估计,无论此时你本地是C++还是C#,如果你不适用基于64的加密程序,直接转string,都会出现无法正确转出字符串的,如果你能把NSData转byte数组来传递,也许就没有这个问题了)

3.服务器收到加密后的字符串,然后使用httpwebrequest
post数据。注意,post的body主体必须是json字符串,{“receipt-data”:“服务器收到的收据数据”},大括号也是要的哦,我因为没有加大括号,曾不停的出现{“status”:21002}的错误

4.设置HttpwebRequest

method肯定是POST,这个不多说

ContentType可以是"application/x-www-form-urlencoded"或者“application/json”

ContentLength可以设,可以不设,看你怎么传递数据,

Body就是你要传给appstore的JSON字符串,在C#里没有这个变量,直接使用流写入,PHP,java等有,所以看用什么语言实现了

时间: 2024-11-05 15:59:12

iOS的in-app purchase C#服务器二次验证实现的相关文章

iOS IAP 服务器二次验证突然断网了怎么办

如果交易完成后,向自己的服务器进行二次验证(服务器对用户增值操作)的时候,客服端突然断网了或者苹果的服务器连接不上那么怎么办,现在还没找完美的解决办法,现在暂时使用的这种方法: transaction持久化,将加密的Base64字符串保存到本地,每次用户登录的时候自动重新验证. 当二次验证时,用户的客服端断网,就进入重试状态.如果二次验证时,自己的服务器断网,curl会得到一个"couldn't connect to host"这样的错误,就服务器端重试.对于网络超时或无法找到主机的都

AppStore苹果应用支付开发(In App Purchase)翻译

http://yarin.blog.51cto.com/1130898/549141 一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买.当用户需要购买某件产品时,程序调用StoreKit来收集购买信息.下图即为基本的store kit 模型: Store Kit的API只是为程序添加In App Purchase功能的一小部分.你需要决定如何去记录那些你想要提

【IAP支付之二】In app purchase 本地购买和服务器购买两种购买模式

开发者在游戏中通过iap让玩家支付,实际开发中遇到的问题: 1.StoreKit和AppStore之间的通信 一开始有担心游戏内部和AppStore通信的中间环节,其实这个完全不用考虑,StoreKit和AppStore之间的通信完全是有苹果内部处理的,不存在任何问题,我们所需要关心的就是返回给我们支付结果后(购买成功.失败.取消...)等环节的处理 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息(网站后台配置的),并将它们

iOS开发之剖析"秘密"App内容页面效果(二)

@前些天写了一篇"秘密"的Cell效果文章,但是与在工作中想要的效果还是有差距,而且扩展性很不好,于是重写封装,把整体视图都放到scrollView中,基本是和secret app 一模一样的效果了. @代码如下:(模糊效果的类就不写了,大家可以搜"UIImage+ImageEffects",还要导入Accelerate.framework) 1.MTSecretAppEffect.h #import <Foundation/Foundation.h>

iOS开发网络篇—搭建本地服务器

iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache-tomcat-6.0.41.tar eclipse-jee-kepler-SR2-macosx-cocoa-x86_64.tar.gz jdk-8u5-macosx-x64.dmg 二.安装和配置本地服务器环境(java)步骤: (1)在文档路径下,新建一个文件夹(NetWord),解压eclips

《iOS应用逆向工程》学习笔记(二)iOS系统目录结构(部分)

首先下载个iFile,可以用来直观地查看iOS系统的目录结构. 下面记录一些关键的iOS目录结构: /var:"variable"的简写,存放一些经常更改的文件,例如日志.用户数据.临时文件等.其中/var/mobile/Applications下存放了所有App Store App. /Applications:存放所有的系统App和来自Cydia的App,不包括App Store App.越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/App

IOS研究之App转让流程须知详细介绍

 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看IOS研究之网络编程Cocoa Streams使用详解 一,App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:"ready for sale".其他一些条件参考itunes connect中应用详情页面点击"

[转载]IOS研究之App转让流程须知详细介绍

原文地址:http://www.tuicool.com/articles/uQRF3yM 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看  IOS研究之网络编程Cocoa Streams使用详解 一,  App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:”ready for s

玩App怎么赚钱(二)

紧接上篇文章,谈到App前赚钱的一些门道,其实还有很多了,需要你自己去挖掘App到底有什么价值.有价值的东西就能形成交易,而交易的过程中是用金钱作为流通手段,所以说赚钱没那么高大上,它的本质就是价值的流通. App里如何赚钱?这里面就太多方法了,估计能写个几万字都不玩,因为商业模式有很多嘛. 谋哥还是主要介绍几种流行的方法,App里赚钱,主要是:卖软件.插入广告.内支付. (一)卖软件(不是卖源码) 这个其实对App开发者或者经常玩iPhone的用户来说,比较熟悉.苹果的市场AppStore上就