项目总结:关于支付SDK的后端架构

最近公司准备更新一套支付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商品】

大概目前就是这样了,还有一套兑换系统,打算直接网页端做出来,自己看代码,都感觉有些不成熟的地方,如有大神有意见欢迎留言……

根据相关法律法规和政策,留言功能不予开放