更新日期:2025-06-27H5游戏上架H5渠道接入文档
http://h5.sdk.quicksdk.net/webGame/play/productCode/680675730332272846097893806XXXXX/channelCode/XXXX
备注:
productCode后面的内容替换为QKSDK后台自己游戏产品的productCode;
channelCode后面的内容替换为对应的渠道号,到该链接搜索渠道关键字获取:http://www.quicksdk.com/channel.html
QuickSDK-H5 是一套建立在H5手游和游戏渠道之间的接入中间件,用以统一各H5渠道的差异化,游戏研发只需接入QuickSDK即可直接上线所有H5游戏平台. 并可将游戏链接通过工具加壳成微端用以投放.
QuickSDK的工作流程如下:
· 在QuickSDK后台创建对应平台的产品。
· 游戏研发同学按照本文档接入登录、支付、服务器通知等接口
· 运营同学在QuickSDK后台添加配置各渠道参数.
· 使用对应渠道生成的最终游戏链接进行游戏。
QuickSDK登录流程如下:
· QuickSDK会以iframe的形式加载游戏的链接,同时会给链接中附加token这个参数。
· 游戏服务器使用token调用QuickSDK API换取用户信息,完成用户登录。
· (可选)QuickSDK返回的用户信息中,isLogin为false则表示用户为系统自动为其分配的游客帐号,此帐号虽可进行游戏,但更换设备可能丢失,游戏可通过调用JS API QuickSDK.login() 主动调起登录界面要求完成登录。
备注: 若游戏在QuickSDK加载完毕后台配置的链接后,会产生跳转.则需注意2点:
1.若跳转后的链接以GET参数传递uid.应对uid做签名验证防止篡改.
2.跳转后的链接应保持原有QuickSDK通过iframe加载的所有GET参数.
QuickSDK支付流程如下:
· 当用户在游戏点击购买,游戏可调用QuickSDK.pay(orderInfo,callback)方法调起各自渠道的支付页面.
· 当用户完成购买够,QuickSDK会向游戏事前配置的发送地址POST数据.
· 游戏服务器接收到QuickSDK服务器通知后,根据通知内容向用户发送道具.
· 游戏客户端也可以从callback中渠道支付通知,但此通知仅做UI展示,不能作为发货依据.
引入类库
http://h5.sdk.quicksdk.net/static/lib/libQuickSDK.js
或 https://sdkapi02.quicksdk.net/static/lib/libQuickSDK.js
并调用JS API完成SDK初始化,调用代码如下:
QuickSDK.init(productCode,productKey,debug,channelId);
productCode、productKey由QuickSDK后台分配
debug表示是否输出调试信息,可传true|false.
channelId渠道号,此参数可通过webgameApi/getUserInfo API获取.
假设游戏链接为http://play.game.com . QuickSDK会在iframe中加载游戏链接并附带Token信息。如下:
http://play.game.com?token=@172@84@167@222@216@137@164@152@108@104@104@106@168@162@174...
游戏服务器获取GET参数中的token调用QuickSDK的API:
http://h5.sdk.quicksdk.net/webGameApi/getUserInfo?token=@172@84@167@222@216@137@164@152
注意:此API应由游戏服务器请求,不能在浏览器使用ajax请求.
即可获取玩家的UID信息。接口返回参数如下:
{"status":false,"message":"tokenu6709u8bef","data":{"uid":"","username":"","token":"","isLogin":false,"channelId":301}}
针对H5投放平台,QuickSDK会默认生成游客帐号,登录不是必须的,游戏可根据自身情况调用登录接口要求用户完成登录.
调用QuickSDK的login方法示例如下:
QuickSDK.login(function(callbackData){
var message;
if(callbackData.status){
message = 'GameDemo:QuickSDK登录成功: uid=>' + callbackData.data.uid;
}else{
message = 'GameDemo:QuickSDK登录失败:' + callbackData.message;
}
document.getElementById('loginMessage').innerHTML = message;
});
调用后,会触发回调函数.
回调的callbackData对象类型如下:
| 字段 | 类型 | 说明 |
| status | bool | 是否登录成功,true成功,false失败 |
| data | uid | 渠道UID |
| username | 渠道Username | |
| token | 渠道token | |
| isLogin | 是否游客,登录后此值为true | |
| channelId | 渠道ID | |
| message |
JSON表现如下:
{“status”:true,”data”:{“uid”:”123”,”username”:”quicksdk”,”token”:””,”isLogin”:true},”message”:”登录成功”}
用户点击购买时,游戏可调用pay方法传入orderInfo对象调起支付页面.
调用示例如下:
var orderInfo = new Object();
orderInfo.productCode = “05425578266356246482673853629430”;
orderInfo.uid = “uid”;
orderInfo.userRoleId = 'roleId1';
orderInfo.userRoleName = '小朋友';
orderInfo.serverId = 1;
orderInfo.userServer = '内测1区';
orderInfo.userLevel = 1;
orderInfo.cpOrderNo = 'cpOrderNo000001';
orderInfo.amount = '0.01';
orderInfo.subject = '大袋钻石';
orderInfo.desc = '一大袋钻石60个';
orderInfo.callbackUrl = '';
orderInfo.extrasParams = '';
orderInfo.goodsId = '';
orderInfo.count = 60;
orderInfo.quantifier = '个';
var orderInfoJson = JSON.stringify(orderInfo);
QuickSDK.pay(orderInfoJson,function(payStatusObject){
console.log('GameDemo:下单通知' + JSON.stringify(payStatusObject));
});
支付后,可触发回调函数,函数中可获取是否支付成功,但需要注意,此结果仅仅作为UI展示(或完全不用),发货应以服务器通知为准.
orderInfo对象如下:
| 字段 | 类型 | 说明 |
| productCode | 必传 | QuickSDK后台自动分配的参数 |
| uid | 必传 | 渠道UID |
| username | 选传 | 渠道username |
| userRoleId | 必传 | 游戏内角色ID |
| userRoleName | 必传 | 游戏角色 |
| serverId | 必传 | 角色所在区服ID |
| userServer | 必传 | 角色所在区服 |
| userLevel | 必传 | 角色等级 |
| cpOrderNo | 必传 | 游戏内的订单,服务器通知中会回传 |
| amount | 必传 | 购买金额(元) |
| count | 必传 | 购买商品个数 |
| quantifier | 必传 | 购买商品单位,如,个 |
| subject | 必传 | 道具名称 |
| desc | 选传 | 道具描述 |
| callbackUrl | 选传 | 服务器通知地址 |
| extrasParams | 选传 | 透传参数,服务器通知中原样回传 |
| goodsId | 必传 | 商品ID |
注:选传的字段值可以为空,但是对象必须包含此属性.
回调函数payStatusObject对象中status为true时为支付成功.
服务器通知接口参见《QuickSDK服务器对接文档》
调用示例:
QuickSDK.logout(function(logoutObject){console.log('Game:成功退出游戏');})
logoutObject对象包含status和message属性.
游戏需要在玩家登录或角色发生变化调用此接口.
调用示例如下:
function uploadGameRoleInfo(){
var roleInfo = new Object();
roleInfo.isCreateRole = true;
roleInfo.roleCreateTime = 1490598150;
roleInfo.uid = 12;
roleInfo.serverId = 1;
roleInfo.serverName = '内测1区';
roleInfo.userRoleName = '小朋友';
roleInfo.userRoleId = 'roleId1';
roleInfo.userRoleBalance = 1000;
roleInfo.vipLevel = 1;
roleInfo.userRoleLevel = 1;
roleInfo.partyId = 1;
roleInfo.partyName = '行会名称';
roleInfo.gameRoleGender = '男';
roleInfo.gameRolePower = 100;
roleInfo.partyRoleId = 1;
roleInfo.partyRoleName = '会长';
roleInfo.professionId = '1';
roleInfo.profession = '武士';
roleInfo.friendlist ='';
var roleInfoJson = JSON.stringify(roleInfo);
QuickSDK.uploadGameRoleInfo(roleInfoJson,function(response){
if(response.status){
document.getElementById('uploadMessage').innerHTML = '提交信息成功';
}else{
document.getElementById('uploadMessage').innerHTML = response.message;
}
});
}
roleInfo对象字段如下
| 字段 | 类型 | 说明 |
| isCreateRole | 必传 | 仅创建角色时传true,更新信息时传false |
| uid | 必传 | UID |
| username | 必传 | username |
| serverId | 必传 | 区服ID |
| serverName | 必传 | 区服名称 |
| userRoleId | 必传 | 游戏内角色ID |
| userRoleName | 必传 | 游戏角色 |
| userRoleBalance | 必传 | 角色游戏内货币余额 |
| vipLevel | 必传 | 角色VIP等级 |
| userRoleLevel | 必传 | 角色等级 |
| partyId | 必传 | 公会/社团ID |
| partyName | 必传 | 公会/社团名称 |
| gameRoleGender | 选传 | 角色性别 |
| gameRolePower | 选传 | 角色战力 |
| partyRoleId | 选传 | 角色在帮派中的ID |
| partyRoleName | 选传 | 角色在帮派中的名称 |
| professionId | 选传 | 角色职业ID |
| profession | 选传 | 角色职业名称 |
| friendlist | 选传 | 角色好友列表 |
注:选传的字段值可以为空,但是对象必须包含此属性.
QuickSDK提供数据投递平台。CP可在游戏关键节点向此平台投递自定义事件,后台会记录自定义事件,并根据事件达成数,生成转化漏斗。
数据投递API为:
QuickSDK.dataPut("闪屏完成","deviceId=87774746263457&gameVersion=1.11");
由于游戏需要和SDK通信,故游戏页面需要发送允许跨域的HTTP Header : Access-Control-Allow-Origin
另附H5游戏上架H5渠道后台配置流程:https://www.quicksdk.com/doc-214.html
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538