h5游戏对接

51游戏大约 9 分钟小游戏业务

使用说明

  • 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=open in new window..... 接口地址全服通用(即所有服共用一个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
appkeyvarchar(32)游戏公钥,由51提供
areaidint(5)51平台区服验证编号,不分区游戏无此参数
areasignvarchar(36)服务器ID,由51平台和厂商商量决定
game_rolevarchar(50)角色名称对应健名,用于区分充值到哪个角色,即角色查询接口中的rolekey1,rolekey2 ....
gamebiint(11)游戏币数量
orderidvarchar(32)是 订单号
paytimeint(10)用户提交订单时间,unix_timestamp格式,不要作为接口有效时间来验证
payuservarchar(20)支付用户(付款用户) 51用户名
priceint(11)支付总金额, 单位:分
starttimeint(10)生成订单时间,unix_timestamp格式,不要作为接口有效时间来验证
uservarchar(20)到账用户(游戏币发到此账号)51用户名
sigvarchar(32)加密验证串
memovarchar(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=123open in new window

2.2 请求参数

请求方式:HTTP GET 参数说明:51.com平台将研发有可能需要的参数都传给研发,游戏研发方可以根据具体需求使用其中某些参数。

参数类型说明
platformstring51平台标识,默认51
appkeystring游戏代号
userstring用户名
fcmint是否防沉迷,0:未填写身份信息;1:满了18岁;2:未满18岁
clientint客户端类型,1:微端;0:网页
timeint当前unixtime时间戳,10位整数,可以依此参数判断链接的时间有效性
tokenstring32位小写字符串,由一系列的参数md5加密生成,加密方法如下
issubscribeint1表示是已关注了众号,其它值都没有关注公众号
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方式)

  • 参数说明:

参数类型说明
areasignstring同游戏对接中的goods_sign
userstring同游戏对接中的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=1open in new window 这个链接从微信中进入游戏表示是从订阅号入口来的,可以直接领取礼包,其它方式(包括浏览器)则弹出关注公众号的弹层

3.8 游戏loading页

应用场景 :游戏打开时显示的loading页 调用方法如下:

<script type="text/javascript">
h5sdk_51. loadingPage();
</script>

3.9 创角页加载统计

应用场景:用户选择男女和角色,有“进入江湖”button的页面加载时的数据统计 调用方法如下:

<script type="text/javascript">
h5sdk_51.h5stat('swf1');
</script>