游戏平台支付对接模型(以91代币充值为例)

前提准备


平台方

1.会与支付渠道对接好,client端提供sdk提供对login,pay的界面支持。

2.会要求游戏方后台提供notifyURL

3.对每笔订单,不但要提供通知,还要提供查询接口,防止漏单。


以91为例:

1.91的后台配置。 配置一个支付通知地址,必须是80端口。配置虚拟币相关。

2.客户端91提供的接口int  为ndUniPayForCoin(String cooOrderSerial, int needPayCoins, String payDescription ,Context ctx);

  其中 cooOrderSerial  是由游戏方后端生成的唯一订单号。

           payDescription是透传参数。

           needPayCoins   是需要的虚拟币的数量。


游戏方服务端

1. 游戏方服务端DB大致如下


游戏方后端Order表
oid0001 kin(用户名) 50(金币) 新生成订单,短时间不跟平台方通信检查支付状态变更(状态0)
oid0002 kin(用户名) 50(金币)   有效订单,由于支付通常是异步的,要过一段时间开始轮询check(状态1)
oid0003 kin(用户名) 50(金币) 完成订单,支付结束。(状态2,可能支付成功,也可能支付失败)
oid0004 kin(用户名) 50(金币) 关闭订单。(状态3 这个订单不用再管了)


2. 游戏方服务端应该提供 createOrder接口。

    该接口被调用时,生成订单,此时订单为状态0。

    设定一定长时间等待client通知或平台方通知,如果等不到,那么就跟平台方查询订单支付状态一次。

    轮询出结果了,则改订单状态为状态2或4.


   req { uid, coins, [sign]  }   resp { code, oid }     


3. 游戏方服务端提供checkOrder接口。

    该接口被调用时,修改订单为状态1。

    设定一定短时间等待notify,如果等不到,那么就轮询跟平台方查询订单支付状态。

    轮询出结果了,则改订单状态为状态2。

    req { oid, [sign]  }   resp { code, oid,status }   


4.提供notify接口,供平台方通知支付结果。

   只要收到通知,那么就修改订单为状态2.


游戏方客户端

1.首先是使用该平台的账户来登录

2. 调用  createOrder   得到oid

3. 将oid传给 平台的sdk,完成支付。如果平台的sdk返回“支付完成”,那么checkOrder.

4. 跟自己的服务器同步数据即可。


最后说几句

    在这个模型下,订单在( 状态0 && 没有到定时检测时间的间隙  && 没有收到notify)  是唯一可能出现漏单的地方。

    CSDN的博客编辑器真难用。


posted @ 2013-04-26 11:25  林间走寸  阅读(1260)  评论(0编辑  收藏  举报