最近公司准备更新一套支付SDK,用于对接网络游戏,做到游戏运营的收入盈利。
之前的版本是1.0,功能上也比较简单:用户登录注册、在支付成功后往后台发统计数据。这次更新的2.0版本,主要添加了一些运营元素:
- 进入游戏后需要加载活动广告
- 登录成功后提示用户可以领取礼包
- 加载礼包列表
- 领取礼包
支付成功后根据后台设置的兑换比例,按充值金额和兑换比例,增加用户的兑换券数量,并提示用户再重置x元即可兑换y商品。 两天做完后端接口,记录一下架构流程……由于对php还是入门阶段,有些代码可能稍微幼稚,日后成为大神再来看看……
首先接口1,提交appid,根据后台的设置,返回url和image
接口2:登录服务器和sdk后端服务器不是在同一服务器和数据库,所以在sdk服务器写了后端接口,提交appid,获取该游戏的礼包数量:
SELECT count(*) FROM `xxxxx` WHERE `appid` = '$appid'
之后在登录接口中,登录成功后,file_get_contents()请求sdk后端接口,提交游戏appid,解析json,获取游戏礼包数量后,返回提醒给前端sdk:欢迎用户:xxxxx,您有x个礼包可以领取。
接口3:获取礼包数量 大概的UI原型如下
前端提交appid和userid,后端这边首先查询所有可用兑换券:
SELECT * FROM `xxxxx` WHERE `appid` LIKE '$appid'
查询到后,返回前端礼包ID、标题、剩余数量和领取状态,主要是领取状态这个地方有些麻烦,我的做法就是在根据在礼包枚举的循环中,根据用户的userid,先判断用户是否已领取礼包
$status = 是否领取判断 ? 1 : 0
如果$status=0,再来检测礼包剩余数量如果为0,返回2,代表无剩余
接口4:领取礼包,提交appid,userid和礼包id,如已领取,返回礼包key,未领取的话,帮用户领取key后返回key。
接口5:接口5是最麻烦的了,因为要同时兼容之前的版本,所以逻辑处理稍微复杂一些。产品提出的需求是充值成功后,如下提示:
之前的版本比较简单,只对充值成功后做统计。更新后,首先充值成功后,检查如果充值状态是success,先读取用户当前的兑换券
SELECT * FROM `xxxxxxx` WHERE `userid` == '$userid'"
之后读取该游戏充值金额发放的兑换券的兑换比例,比例为A,A*price,得到本次增加的兑换券数量:B。之后比较麻烦了,要提示用户再充值xx元可兑换xxx,可兑换的物品必须是用户兑换券金额最靠近的商品。于是,只能读取所有可兑换的商品,先判断 总兑换券>最贵商品所需兑换券,成立的话,就不提示用户。如果不成立的话,进入枚举,从最便宜到最贵,如果总兑换券<当前商品所需兑换券,则
break;
跳出循环哈哈哈,最后就是一个计算:C=ceil((商品所需兑换券-当前兑换券)/兑换券比例),计算出再充值C的金额可兑换某商品,注意要使用ceil函数,如果/兑换券比例获得的金额有小数,进一法提示用户,这样提示的金额才没有问题。
提示用户:成功充值$price元,获得$B兑换券,再充值$C元即可兑换【xxx商品】
大概目前就是这样了,还有一套兑换系统,打算直接网页端做出来,自己看代码,都感觉有些不成熟的地方,如有大神有意见欢迎留言……