当前位置: 首页 > news >正文

APP STORE 付费验证(IAP)服务端验证全过程

手游APP Store付费 服务端验证流程

苹果付费服务端验证

苹果付费服务端验证图解

我把整个过程叫做三方协定,也叫四次握手.

首先,由客户端APP发出购买请求,这里要求要向服务器,苹果APP STORE同时发送购买请求.
服务端接收到请求之后,在数据库log_Purcharse中新增一条记录,并将新增记录的ID返回给客户端.(log_Purcharse表的设计见后文)
苹果APP STORE接收到请求之后,进行扣费,返回一个付费成功详细信息,或者失败信息.
以上我们称之为一次和第二次握手

如果苹果APP STORE返回付费失败,则客户端终止购买流程.
如果苹果APP STORE返回付费成功,则将第一次服务端返回的ID和苹果返回的付费详情字符串一同发送给服务端.
这里是第三次握手开始.

服务端接收到ID和付费详情字符串,首先到数据库中检索ID是否合法(检验方法详见后文),ID不合法则返回给客户端失败,客户端终止购买流程,ID合法则将付费详情字符串发送给苹果APP STORE进行验证.
苹果APP STORE验证付费字符串之后会返回给服务端一个付费验证成功码(0表示成功),或者失败码(很多情况,各有其含义).
这里称作第四次握手.

服务端检测苹果APP STORE返回的成败信息,更新表log_Purcharse对应ID下面的数值.
返回给客户端成功/失败信息,成功客户端增加购买物品,失败客户端终止购买流程.
此处算是第三次握手的结束.

附一:log_Purcharse表结构设计与简单解析:

Id 自增主键,自增主键是一次握手时客户端请求时添加的主键,也就是将此键值返回给客户端.三次握手的时候也将根据此值来定位购买信息
UserId 付费用户ID,用于三次握手时的验证条件之一
GoodsId 购买物品ID
IAPState 苹果返回状态,三次握手的时候将更新此值,以便记录苹果的具体返回情况,方便核对,为后期客服服务提供依据.
ServerState DEFAULT ’0′ 是否付费成功,0未验证,1成功,2不成功
Money 充值钱数
PayTime 付费请求时间,一次握手更新此值
DateTime 付费成功时间,四次握手成功更新此值

附二:检索ID是否合法的方法:
根据ID,检索数据库中对应的字段,此时需要验证UserId是否与发出请求的UserId一致,检测ServerState是否仍处于未验证状态,IAPState是否为未返回状态,如果这几项都符合验证,表明付费成功,给客户端返回成功,增加购买物品.

相关文章:

  • 浅谈MVC模式在游戏开发的应用
  • android广告赚钱[转]
  • 关于苹果PUSH(APNS)机制的那点事
  • .net的socket示例
  • Xcode添加百度移动统计报错处理
  • Java在Web开发语言上败给了PHP
  • Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)
  • 我的阅读编程书籍的好方法
  • 使用WampServer在本地玩转WordPress
  • 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的支付怎么解决这个问题?
  • 判断NSString中是否包含空格
  • Unity3D中文视频教程【超清+精选】
  • cocos2d-x跨平台之路(观点比较清晰)
  • Unity、Cocos2d-2x、UDK 等手机游戏开发引擎分别有什么特性,适合开放哪些类型的游戏?
  • Unity 这个 3D 引擎很厉害吗?听说可以完成各种终端的游戏研发?
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【技术性】Search知识
  • Android系统模拟器绘制实现概述
  • Intervention/image 图片处理扩展包的安装和使用
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js
  • laravel 用artisan创建自己的模板
  • Lucene解析 - 基本概念
  • Node项目之评分系统(二)- 数据库设计
  • uni-app项目数字滚动
  • 服务器从安装到部署全过程(二)
  • 给Prometheus造假数据的方法
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 【干货分享】dos命令大全
  • NLPIR智能语义技术让大数据挖掘更简单
  • #### go map 底层结构 ####
  • #Z2294. 打印树的直径
  • $jQuery 重写Alert样式方法
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)springcloud实战之config配置中心
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .Net Core 中间件验签
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Winform开发笔记(一)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NetCore部署微服务(二)
  • .Net接口调试与案例
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @ResponseBody
  • [ACTF2020 新生赛]Include
  • [Android] Android ActivityManager
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [C++]类和对象(中)