sdk流程图

来源:互联网 发布:骑士引流软件 编辑:程序博客网 时间:2024/05/18 09:17

分为三方登录 + 三方支付两个模块:

登录:

先说一下对应的原理

对于三方登录,比如用户使用QQ号登录,其实就是用户填写自己的QQ帐号密码,然后我们的客户端拿着去向QQ的服务器做验证,如果用户填写信息无误,则QQ服务器会给客户端返回一个token,客户端把token发送给我们的sdk服务器,我们sdk服务器拿着token去向QQ服务器做验证,如果验证成功,则返回给我们sdk服务器用户的uid,sdk服务器再告诉客户端用户登录成功。

再讲一下我们代码中的处理流程:

登录时,我们sdk服务器只关心上面过程的3、4、5、6步骤。相应的,在代码中,需要新建一个文件(account_xxx.py)+修改一个文件(account_login.py),具体的看下面的过程:

客户端和sdk服务器通信对应的接口是:/open/v3/user/processSnsId,接口与对应的处理函数的映射关系位于:/src/tysdk/cmdcenter/httpuserv3.py 中 35行。

在/src/tysdk/entity/user_common文件夹中新建一个Python文件,取名参考其他文件,比如:account_xy.py,然后仿照其他文件,新建一个类以及类方法。在该方法中,拿着客户端给的类似于token的参数向三方服务器做验证,并将验证结果通知客户端。

具体的参考:/src/tysdk/entity/user_common/account_xy.py文件。

 

支付

支付时,对应的需要改变7个文件:

1、/src/tysdk/cmdcenter/httpgateway.py

2、/src/tysdk/cmdcenter/httppayv3.py

3、/configure/game/global_tmp.py

4、/configure/game/global_third.py

5、/src/tysdk/entity/pay3/charge_conf.py

6、/configure_json/tag-edit/sdk/store_payment/${clientId}.json文件

7、在/src/tysdk/entity/paythird/文件夹下 新建一个payxxxxx.py文件

 

在将代码之前,先讲一下我们sdk的购买流程。

用户的购买行为分为3种:支付金币,支付钻石,兑换道具。

钻石在我们的游戏中,相当于是一种中间货币,可以用钻石兑换金币和道具。但是有一点不同,金币即可以购买,也可以用钻石兑换,但道具只能用钻石来兑换,这一点的原因是:金币是每天登录都会送的,但是想用游戏道具怎么办呢?只能买喽,这就是刺激消费的办法啦。

用户购买金币,走得是/open/v3/pay/consume接口,对应的mustcharge == 1 ,所以,一定会给客户端返回某种支付方式,通知用户支付。

用户兑换道具,走得是/open/v3/pay/consume接口,对应的mustcharge == 0,所以,不一定会返回用户支付方式,而是根据用户钻石数量的多少。如果够兑换,则直接给用户发货,通知用户兑换成功;不够兑换,则返回用户支付方式,通知用户购买相应钻石。

用户购买钻石,走得是/open/v3/pay/charge接口,返回用户相应的支付方式。

用户支付完成后,就是客户端不断轮询服务器,走的是/open/v3/pay/querystatus接口,查询对应的支付状态。

第三方在用户支付成功后,会通知(回掉方式)我们的服务器,这时,我们先对回掉中的参数进行验证(防止恶意刷金币),验证通过后,就通知游戏服务器给用户发相应的道具或钻石(金币也可以看做是道具),走得接口是callback_ok。

客户端在轮训的过程中,发现服务器上对应的订单状态已经完成了,那么就可以弹出发货成功的框框了。

要注意callback_ok这个接口,总是先给用户增加对应金额的钻石,如果用户买的是钻石,那么就直接通知游戏服务器用户购买钻石了;如果是道具,那么,再将用户的钻石扣除,然后通知游戏服务器给用户发放道具。

可以看一下下面的这个图:

下面说一下代码。

下面是这些文件对应的原理:

3、4、5、6文件主要是为用户点击商品后,客户端将商品信息发回服务器端,服务器根据客户端的特点(哪个运营商(phonetype)的用户(userId)用哪部手机(deviced)上的哪款游戏(clientId)点了哪种商品(productid),该商品的价格(price),该用哪种支付方式(paytype))返回给客户端相应的信息,客户端完成支付过程。

5、charge_conf.py:这里会配置从支付方式到对应的charge_data()的对应关系,因为我们有很多种支付方式,比如,支付宝支付,微信支付,短信支付,银行卡支付等等,每种支付需要返回给客户端不同的信息,而这些信息就写在不用文件中的charge_data函数中。再请回头看看上面的图,每一个consume或charge过程,都会最终到charge_conf函数中。

6、${clientId}.json文件:每一个发出的安装包,都回应了一个唯一的clientid,就像是一个人的身份证一样,唯一的。文件里面配置了对应安装包中所有商品的编号以及对应的支付方式。在这里根据商品编号找到支付方式以后,再去charge_conf.py中找对应的charge_data函数。

3、global_tmp.py:这里会配置一个支付方式和对应的编号。

4、global_third.py:这里会配置一些appkey,提示文字一类的内容,由于该文件在上线以后,可以很快的就生效,而不用重启服务器,所以,强烈推荐将代码中需要配置的参数都放在这里面。

 

1、2、7文件主要是为用户支付成功后,三方服务器回掉sdk服务器时提供服务的。

1、httpgateway.py中,负责将/v1/pay/xxxxx/callback/转换成/open/vc/pay/xxxxx/callback,并取出参数中的订单号,根据订单号选择服务器的ip地址,然后向对应的服务器再发一次http://ip/open/vc/pay/xxxxx/callback请求,参数和之前完全一样。

2、httppayv3.py负责接收步骤1中发过来的那个http请求,将请求转换成对应的处理函数,处理函数在文件7中编写。

7、无论是charge_conf(),还是回掉对应的函数,都写在这个文件中,具体的可以参考每一个src/tysdk/entity/paythird/文件夹下面的文件。

0 0
原创粉丝点击