supersdk

文档中心

文档中心

下载文档

SuperSDK服务端接口文档


备注:此文档仅限于外部游戏使用,自研及发行游戏接入查看supersdk服务端接入指引_内部游戏专用

登录验证接口

登录流程

Screenshot

  1. 游戏App调用SuperSDK框架Login接口后弹出渠道3rd-SDK登录界面,相应3rd-SDK内部向3rd-SDK Server发起登录请求验证 

  2. 用户登录成功, 3rd-SDK获取到3rd Server返回的token 

  3. SuperSDK将从3rd-SDK得到的token,提交给SuperSDK server验证请求。

  4. SuperSDK Server 接收到SuperSDK请求的数据后将去3rd-SDK Server进行用户登录验证

  5. SuperSDK Server收3rd-SDK Server的验证结果  

  6. SuperSDK 将3rd-SDK Server返回统一封装并加密数据

  7. SuperSDK 收到的加密数据(osdk_ticket)抛给Game App,Game App转发给Game Server(此步接入商需自行完成),Game Server对加密数据进行解析并加入自己的业务 (此步骤执行解析操作,在下面有提供PHP的DEMO代码,开发者可以直接使用或者参考实现,osdk_ticket包括:game_id,user_id,login_sdk_name,time) 

  8. Game APP收到返回结果并判断是否登陆成功

osdk_ticket解析算法

1. 将得到的osdk_ticket进行base64解码

2. 得到sign,user_id,login_sdk_name,time等值,将sign与通过签名算法得到的签名进行验证,其中key为配置时获取到的的game_secret;

备注:game_secret在SuperSDK打包工具中添加完游戏后,游戏配置中可查看。

3. 签名算法请见附1:签名算法

范例:
osdk_ticket =base64({
  "osdk_game_id": "132435",
  "user_id": "837263",
  "account_system_id": "0060001",
  "osdk_user_id": "0060001_837263",
  "login_sdk_name": "360",
  "channel_id": "0",
"extend":"", //此参数在配置参数时配置的扩展参数
  "ip": "128.1.1.10",
  "time": 149382731,
  "sign": "21232f297a57a5a743894a0e4a801fc3"
})

参数说明:

参数名称 类型 说明
osdk_game_id string SuperSDK分配的游戏编号
user_id string 3rd Server返回的用户唯一标识
login_sdk_name string 第三方联运商名称
account_system_id string 用户账号系统编号(用户体系按联运平台划分,每个联运平台一个用户帐号系统编号,具体编号可以参考付3:用户帐号系统编号列表)
osdk_user_id string oneskd用户编号,格式:osdk_user_id= account_systemid++user_id
channel_id string 渠道编号
extend string 扩展参数,在打包工具中配置的扩展参数
time int sign生成的时间戳
ip string 客户端请求的ip地址
sign string 签名,签名算法请见附1:签名算法

支付通知

流程图

Screenshot

  1. Game APP调用SuperSDK支付接口(pay),SuperSDK请求 SuperSDK Server生成本次交易订单号 

  2. SuperSDK Server返回本次交易订单号 

  3. SuperSDK调用3rd-SDK支付接口请求3rd-SDK Server支付 

  4. 支付成功后3rd-SDK Server将返回支付成功,Game App不能以此信息来判断是否支付成功,具体支付成功信息请求服务器通知为准。

  5. 3rd-SDK Server完成订单支付后将订单信息异步通知SuperSDK Server,此步需要开发者在3rd-SDK后台将支付通知地址配置为打包工具参数配置界面的支付回调地址 

  6.  SuperSDK Server对3rd-SDK Server订单信息进行校验 ,并返回相应的处理结果 

  7. SuperSDK Server 将订单支付信息推送给Game Server,此通知地址在打包工具配置参数界面配置

  8. Game Server对SuperSDK Server订单信息进行校验 ,并返回相应的处理结果(成功返回ok)

  9. Game Server向GameApp push支付通知 

流程图第七步接口(支付通知)

说明:接口地址接入商提供,接口地址在打包工具支付通知地址中配置

接口地址:接入商自定义

HTTP请求:POST

编码:UTF-8

请求参数:

参数名称 类型 说明
user_id string 第三方联运商用户标识 ==注:此字段不具备惟一性==
account_system_id string 用户账号体系编号(用户体系按联运平台划分,每个联运平台一个用户帐号系统编号;具体编号可以参考付3:用户帐号系统编号列表)
osdk_user_id string 用户标识 格式:osdk_user_id=account_systemid++user_id ==注:此字段为用户惟一标识==
amount float 充值金额,单位请查看currency,国内默认为人民币,国外默认为美元
server_id string 游戏服编号
product_id string 商品编号
product_name string 商品名称
pay_status integer 支付状态
pay_time integer 支付时间
order_id string 订单号
coo_order_id string 第三方联运营商订单号
channel_id string 渠道编号
game_id integer 游戏服编号
game_role_id string 游戏角色编号
is_sandbox integer 是否沙盒充值(沙盒充值指没有使用真钱充值,而是使用联运平台给的测试虚拟平台币)
currency string 货币,使用国际能用货币单位(人民币:CNY)
sdk_pay_extend string sdk客户端充值时传递的扩展参数
custom_data string 打包工具中设置的自定义参数
sign string 签名,验签参考签名算法,请见附1:签名算法,key为打包工具中的game_server_secret

请求示例

http请求body内容

order_id=OS_J8KTP5647PFPC4XYC&user_id=428545488&game_id=196377310
&server_id=&product_name=60&product_id=1&pay_status=1&
pay_time=1415977939&coo_order_id=2-32817-20141114230037-100-1655
&amount=1.00&sdk_pay_extend=123123123123&channel_id=&
game_role_id=&is_sandbox=0¤cy=CNY&account_system_id=0060002
&osdk_user_id=0060002_428545488&custom_data=0
&sign=0e5cf7569b73741effef8cc832966634

返回结果OK

通知机制

充值操作完成后,只有充值支付成功,“SuperSDK 服务器” 才会将充值结果通过“支付通知地址”发送到“GameServer 服务器”。“GameServer 服务器”收到“SuperSDK 服务器”的充值通知后,根据处理结果返回字符串ok(小写) 或其它(如 参数错误:param_error,签名错误:sign_error,系统错误:system_error),ok代表成功。 如果回应其他值或者不回应, 则被认为通知失败, SuperSDK Server会尝试多次通知.

建议

“GameServer 服务器”在接收“SuperSDK 服务器”的充值结果通知时,不管订单是否成功,只要业务逻辑正常,一般都应该返回ok,表示不需要“SuperSDK 服务器”再次发起通知。当业务逻辑异常(如:收到的SuperSDK 服务器的充值结果通知内容的签名不正确、充值结果与提交的充值请求不符等),认为需要再次通知,才返回其它。

重复通知

由于存在多次发送通知的情况,Game Server应防止因收到多次支付通知而给玩家多次加钱,Game Server可以使用同一order_id只当做一笔充值处理。 正常接到消息应该回应ok, 无需SuperSDK Server继续发送通知。

请见附1:签名算法

重复通知间隔为: 1分钟,4分钟 ,9分钟,16分钟 ,25分钟 ,36分钟,49分钟,64分钟,81分钟,100分钟共 10次,直到中间有收到接收成功的反馈消息,或10次发送完,结束周期性发送。

签名算法

1. 所有参数按照参数名字母升序排列,sign不参与签名; 

2. 将排序后的参数名与对应的参数值(非urlencode的值)用&拼接在一起,如:a=1,b=2,c=3拼接得到a=1&b=2&c=3;

3. 然后在直接连接key值,做一次md5加密并转换成小写,得到签名waitSign值 

4. 将waitSign与参数中的sign对比,相同则验证成功 

5. 参数名与参数个数可能会有变动,建义不要把参数写死,可直接把获取到的所有参数除sign以外参与签名

6. key对应的value如果是空的,也要参与签名,见下方示例里面的key:b

范例:收到数据为UTF-8格式,并已经使用urlencode编码: a=%e5%85%83%e5%ae%9d&c=1&b=&sign=5,而:key=k waitSign=md5(“a=元宝&b=&c=1k”) 

代码范例:

function sign($data, $key)
{
	ksort($data);
	$str = array();
	foreach ($data as $k => $v)
	{
		$str[] = $k . "=" . urldecode($v);
	}
	$strData = implode("&", $str) . $key;
	return md5($strData);
}