Skip to content

支付回调通知

支付流程

U8SDK完整支付流程如下图,

U8SDK完整支付流程

上图中各个步骤说明:

1、游戏客户端,向游戏服务器请求充值数据.

2、如果游戏有自己的订单系统,这个时候游戏服务器比如生成一条订单数据,然后将订单号等信息返回给客户端.

3、游戏客户端调用XSDK的支付接口(Pay方法),并将需要在支付通知回调中原封不动传给游戏服务器的数据,比如上一步中的游戏订单号,放入UOrder的cpOrderID中.

4~7、XSDK请求SDK Sever下单,并返回唯一订单号等数据,紧接着SDK吊起微信/支付宝支付,让玩家支付.

8、玩家支付成功后,支付平台(微信/支付宝)会通知到SDK服务器.

9、SDK服务器在校验订单的合法性后,将SDK中的订单状态更新为【支付成功】.

10、并按【本文档协议】通知给游戏服务器.

11、游戏服务器在收到支付回调请求后,需要校验签名、商品ID、角色、金额等的合法性.

12~13、校验通过后,给玩家发放道具或游戏币,并给SDK服务器返回SUCCESS;如果校验失败,返回FAIL.

14、SDK服务器收到SUCCESS时,会将当前订单的通知状态设置为【已通知】,否则SDK服务器会定时重试,最多重试10次.

签名规则

登录认证协议中的sign字段生成规则如下:

1)除了sign字段和值为空的字段, 将其余字段按照字段key值的升序排列, 然后按照key=value&key=value.....拼接成字符串。(注意接收到字段后,需要先进行url decode,再进行签名计算);

2) 将上述生成的字符串,最后附加&secretKey={SDK Key参数}格式生成待签名字符串。 {SDK Key参数}替换为分配的【AppSecret】参数;

3)对上面得到的待签名字符串,做md5(32位大写)计算,生成对应的sign;

4) 将生成的sign和协议请求返回的sign进行比对,如果一致才给玩家发货。

协议内容

当XSDK服务端收到支付平台的支付回调,并校验成功时(失败的时候不会通知游戏服务器),我们会请求游戏服务器的发货通知地址,通知游戏服给玩家发货。

这个回调的地址, 客户端在调用支付接口的时候, 通过payNotifyUrl字段传入; 也可以在SDK后台-》游戏基础配置-》回调地址中配置:

U8SDK完整支付流程

1 请求协议

请求地址:游戏服接收请求的http地址
请求方式:POST
请求参数格式:application/x-www-form-urlencoded
参数编码: UTF-8

请求参数:

参数名称参数类型参数说明
appIDString当前游戏的appID
orderIDStringSDK 平台订单号
platformOrderIDString支付平台订单号
priceString下单金额,单位:分
realPriceString如果有配置折扣,那realPrice是折扣后的实际充值金额;否则,等同于price
currencyString货币单位,固定值:CNY
cpOrderIDString游戏订单号
extraString客户端调用支付接口传入extra字段的值
orderTimeString充值时间,从1970年到现在的时间戳,单位秒
timestampString回调通知时的时间戳,单位毫秒
productIDString商品ID
roleIDString角色ID
serverIDString服务器ID
signString签名,签名算法规则见上方《签名规则》部分,这里使用的secretKey是分配的【AppSecret】参数

2 响应内容

游戏服务器收到支付回调请求之后, 校验签名正确后, 给聚合SDK服务端返回文本字符串:SUCCESS; 否则返回文本字符串:FAIL

3 注意事项

1) 因为SDK服务器在极端情况下,同一笔订单,有可能会重复通知给游戏服务器。 所以,建议游戏服务器做好幂等处理。

2) 游戏服务器收到回调后, 应检查当前商品金额,商品ID(商品ID和金额的匹配性),角色信息(角色和uid的匹配性)是否匹配, 只有匹配的情况下,才应给玩家发货。

3)因为SDK可能会迭代变更, 回调协议参数中可能会增加新的参数。 建议游戏方解析验证签名时,不要写死, 除了sign之外的所有参数, 按签名规则进行验证。

版权所有© 2021-2030 上海丞诺网络科技有限公司