h5游戏对接
使用说明
51.com需要提供以下参数
- appkey: 51.com的游戏标识
- goods_key: 用户充值发货时的加密key
- sec_key: 用户登录游戏时的加密key
游戏研发方需要提供以下url
- 1.登录游戏接口的url
- 2.充值发货接口的url
1.充值接口
1.1发货流程
51.com平台发送成功支付的订单数据到游戏发货接口,游戏发货接口进行数据校验,如果验证不通过,程序在输出整数(不同错误应该有不同返回值,方便查找问题)后终止,如果验证通过,游戏再验证是否是已经发货的订单,如果是已经发货的订单程序直接输出succes(不要包括其他字符)后终止,如果是没有发货的订单则进行发货等操作,请务必在发货成功后输出success(不要包括其他字符),如果发货失败则输出任意整数后终止程序。 51.com平台会对游戏厂商的返回值进行验证,除非收到success,否则51.com平台会认为发货失败再次向游戏发送该订单数据,任何情况下接收51.com平台订单数据通知的程序在终止前一定要有返回值输出。
1.2接口地址
http://xx.xx.xx?appkey=..&areaid=..... 接口地址全服通用(即所有服共用一个url,通过areasign参数的值来区分区服) 注:接口地址由厂商提供
1.3调用方式
- 通过POST方式传递参数,示例如下:
http://xx.xx.xx?appkey=...&areaid=...&areasign=..&game_role=..&gamebi=..&orderid=..&paytime=..&payuser=..&price=..&starttime=..&user=..&sig=....
1.4参数说明
以下所有的参数对于游戏研发方来说不一定全部是必要参数,请根据实际需求和参数描述来应用。
| 参数 | 类型 | 是否必填 | 说明d |
|---|---|---|---|
| appkey | varchar(32) | 是 | 游戏公钥,由51提供 |
| areaid | int(5) | 否 | 51平台区服验证编号,不分区游戏无此参数 |
| areasign | varchar(36) | 是 | 服务器ID,由51平台和厂商商量决定 |
| game_role | varchar(50) | 否 | 角色名称对应健名,用于区分充值到哪个角色,即角色查询接口中的rolekey1,rolekey2 .... |
| gamebi | int(11) | 是 | 游戏币数量 |
| orderid | varchar(32) | 是 订单号 | |
| paytime | int(10) | 是 | 用户提交订单时间,unix_timestamp格式,不要作为接口有效时间来验证 |
| payuser | varchar(20) | 是 | 支付用户(付款用户) 51用户名 |
| price | int(11) | 是 | 支付总金额, 单位:分 |
| starttime | int(10) | 是 | 生成订单时间,unix_timestamp格式,不要作为接口有效时间来验证 |
| user | varchar(20) | 是 | 到账用户(游戏币发到此账号)51用户名 |
| sig | varchar(32) | 是 | 加密验证串 |
| memo | varchar(100) | 是 | 由游戏透传的字段,不参与验证 |
- 加密规则
<!--加密规则:-->
<!--将收到的data里面的数据项sig去掉,然后将data按key排序(从小到大),以$key1=$val1$key2=$val2$key3=$val3…形式拼成字符串,再在末尾追加发货密钥goods_key,最后作md5即生成验证字符串。-->
<!--PHP示例代码 :-->
$goods_key='您的发货密钥goods_key'; // 由51平台提供
$fileds = ['appkey','areaid','areasign','game_role','gamebi','orderid','paytime','payuser','price','starttime','user'];
foreach($fileds as $f){
if(isset($_POST[$f])){
$data[$f] = $_POST[$f];
}
}
//把平台发送过来的上表中全部数据放入$data中
unset( $data['sig']); //把$data中的数据项sig去掉
ksort( $data); // 排序(从小到大)
$str = '';
foreach( $data as $k=>$v){ //组合生成字符串
$str .=$k.’=’.$v;
}
$sig = md5( $str.$goods_key); //生成验证字符串
1.5返回结果
| 说明 | 返回值 |
|---|---|
| 正常订单 | 发货并返回success |
| 重复请求订单 | 不发货,直接返回success |
| 非法订单 | 输出任一整数后终止程序 |
2 游戏登录接口
2.1 接口地址
接口地址由游戏厂商提供,一个游戏只能提供一个URL。接口地址可以带一些参数,直接回传回去,但参数名不要和5.2参数列表中有冲突。 示例:http:// xxx.xyz.com/abc/login?abc=def&ddd=123
2.2 请求参数
请求方式:HTTP GET 参数说明:51.com平台将研发有可能需要的参数都传给研发,游戏研发方可以根据具体需求使用其中某些参数。
| 参数 | 类型 | 说明 |
|---|---|---|
| platform | string | 51平台标识,默认51 |
| appkey | string | 游戏代号 |
| user | string | 用户名 |
| fcm | int | 是否防沉迷,0:未填写身份信息;1:满了18岁;2:未满18岁 |
| client | int | 客户端类型,1:微端;0:网页 |
| time | int | 当前unixtime时间戳,10位整数,可以依此参数判断链接的时间有效性 |
| token | string | 32位小写字符串,由一系列的参数md5加密生成,加密方法如下 |
| issubscribe | int | 1表示是已关注了众号,其它值都没有关注公众号 |
token参数加密算法(PHP程序):
$token = strtolower(md5($appkey.$user.$time.$sec_key));
点号是字符串连接符;其中$sec_key是由51.com提供的加密密钥。
2.3 返回结果
51.com平台根据5.2的参数跳转到研发指定的登录url,研发接口验证参数正确性后进入游戏。
2.4 H5游戏对接调试的业务逻辑
游戏页通过url中的参数和token验证用户的正确性,游戏页面永远放在h5.51.com的iframe下(不放在iframe下无法调用jssdk),h5.51.com提供一个js的sdk程序供游戏页调用,主要的sdk包括:弹出登录窗口;上报数据(角色、等级、战力、剩余元宝);弹出支付窗口;
3.jssdk的使用
3.1 游戏页引入js文件
<script type="text/javascript" src="//h5.51.com/h5/api" charset="UTF-8"></script>
3.2 弹出登录窗口
h5sdk_51.doLogin({});
3.3 上报数据
以下是基础数据示例
var baseData = {
"appkey": 'xxxxxxxxxx', //游戏平台提供的appkey
"open_id": '123456', //游戏平台提供的用户ID
"roleid": '101284', //游戏角色的唯一ID,没有建角色的传0
"role": '我的角色', //游戏中角色的昵称,没有昵称的可以传空字符串
"goods_sign": '88', //游戏区标志,游戏方的区服id
"area_name": '双线88区', //游戏区的名称,游戏方的区服名
}
- 调用方法:
h5sdk_51.gameReport(action, baseData, extendData);
action:表示上报类型,具体描述如下
startGame:点击开始游戏
levelUpgrade:上报角色、等级、战力、剩余金币
3.3.1 点击开始游戏
var extendData = {};
h5sdk_51.gameReport('startGame', baseData, extendData);
3.3.2上报角色、等级、战力、剩余金币
var extendData = {
"level": 12, //整型,默认为0,当前等级
"score": 0, //整型,默认为0,战力、综合评分等
"gold": -1, //整型,默认为-1,没有消费的,剩余的金币或者元宝,当前拿不到剩余元宝的,填-1,平台将无视
};
h5sdk_51.gameReport('levelUpgrade', baseData, extendData);
3.3.2.2角色等级战力查询接口
接口地址: 接口地址全服通用(即所有服共用一个url,通过areasign参数的值来区分区服),51平台通过该接口来查询某个用户在游戏的某个区服是否注册过,若注册过则返回角色名、等级,未注册过返回"sign":1
http请求(GET方式)
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| areasign | string | 同游戏对接中的goods_sign |
| user | string | 同游戏对接中的user |
- 返回结果:
| 参数 | 返回值示例说明 |
|---|---|
| 所有错误返回 | |
| 存在一个角色 | {"sign":2,"data":{"rolekey1":"角色1的名称"},"level":{"rolekey1":"角色1的等级"},"ce":{"rolekey1":"角色1的战力"}} |
| 存在多个角色 | {"sign":2,"data":{"rolekey1":"角色1名称","rolekey2":"角色2名称"},"level":{"rolekey1":"角色1等级","rolekey2":"角色2等级"},"ce":{"rolekey1":"角色1战力","rolekey2":"角色2战力"}} |
| 多个角色键名用rolekey4,rolekey5..递增表示。 | |
| 充值时我们会把用户选择的角色对应的键名即rolekey1,rolekey2... post给厂商,而不是post键值即角色名 | |
| 角色键名最好传真实的角色id(没有角色id才使用rolekey1,rolekey2这种来代替) |
注意:
- 1.等级一定要返回原始等级,而不是转生后的等级。
- 2.如果用户删除了游戏内的某个角色,查询结果不要再返回已经删除的角色。
- 3.原始等级计算规则:转生数*10000+转生后等级 如5转30 就返回50030 未转生的直接返回等级,前边不要加0
- 4.战力一般只针对于传奇游戏
3.3.3 开始支付
var extendData = {
"total_money": 100, //多少钱,单位是分,整数
"memo":'xxxxxxxxx'//透传字符串,必须有,没有传空字符串,通知发货时会传给游戏的发货api,最长100个字符
};
h5sdk_51.doPay(baseData, extendData);
3.4 微信分享成功后,调用游戏内领取礼包接口
应用场景 :分享微信朋友圈后,游戏内会发些奖励 游戏内需要自定义函数名如下:
<script type="text/javascript">
function getShareSuccGift() {
//发放奖励
}
</script>
3.5 游戏内弹层提示右上角的微信分享
应用场景 :游戏内在右上角进行分享弹层提示,引导用户去分享朋友圈 调用方法如下:
<script type="text/javascript">
h5sdk_51.showShareHint();
</script>
3.6 点击开始下载微端接口
作用:上报IP和账号,方便下载微端后同步角色 使用方法:下载微端按钮上添加js点击事件,代码逻辑如下
var extendData = {};
h5sdk_51.startDownLoadWd(baseData, extendData);
<!--注:下载地址是-->
<!--http://h5.51.com/download?appkey=对接游戏时的appkey-->
3.7 游戏内关注微信公众号领取礼包
应用场景 :游戏内点“关注”按钮弹;没有关注公众号的情况下弹出微信公众号弹层,引导用户关注公众号;如果已经关注(从公众号入口进入游戏的),平台sdk回调游戏接口,发放礼包。注意:这个用户已经领取过礼包的,不要再出现关注按钮。 调用方法如下:
<script type="text/javascript">
//判断用户是否关注了公众号,不返回只回调
//回调函数是:isSubscribeWechat
h5sdk_51.isSubscribeWechat();
function isSubscribeWechat(isSubscribeWechat){
//这是平台回调游戏接口
//此接口的功能由游戏实现
//当且仅当isSubscribeWechat==1时
//说明此用户已经关注了微信公众号
}
//点击关注的方法,此方法由平台sdk提供
h5sdk_51. showWechatAccount();
function wechatsubscribeok(){
//这是平台回调游戏发放礼包的接口
//此接口的功能由游戏实现
}
</script>
测试链接:http://tg.51.com/h5/i/web2h5_wtest?issubscribe=1 这个链接从微信中进入游戏表示是从订阅号入口来的,可以直接领取礼包,其它方式(包括浏览器)则弹出关注公众号的弹层
3.8 游戏loading页
应用场景 :游戏打开时显示的loading页 调用方法如下:
<script type="text/javascript">
h5sdk_51. loadingPage();
</script>
3.9 创角页加载统计
应用场景:用户选择男女和角色,有“进入江湖”button的页面加载时的数据统计 调用方法如下:
<script type="text/javascript">
h5sdk_51.h5stat('swf1');
</script>
