H5游戏对接文档

一.如何集成

  1. H5SDK推荐使用标签方式引入JS

     <script src="https://sdk.yema6.cn/sdktools/h5sdk.aspx"></script>

        请保持域名及路径不变,我们会保持版本最新,请不要下载下来使用,避免受到旧版本的影响

二.接口调用

  1. 接口调用之前需要初始化

    gwsdk.init(app_id)

三.登录

  1. 登录

    我方按照你方提供的login_url携带以下参数进行跳转,签名验证成功则进入游戏.Get参数:

    参数 类型 说明
    app_id string 我方分配的游戏唯一编号
    ip string IP地址
    ext string 透传信息,不参与签名
    timestamp string 当前时间戳
    uid string 我方玩家唯一标识
  2. 签名算法

    1.需要签名的字符串A=按照key=value的格式,用&连接并按照参数名ASCII字典序排序(即字母顺序)

    2.待签名的字符串B=需要签名的字符串A+"&sign_key="+签名KEY

    3.对待签名的字符串B进行MD5签名,编码为UTF-8

     var B= "app_id=" + app_id + "&ip=" + ip + "&timestamp=" + timestamp + "&uid=" + uid+ "&sign_key=" + login_key; //待签名字符串,这里使用login_key签名

    说明:只有我方登录成功,才会执行该跳转

  3. 退出登录

    方法名称:gwsdk.logout(logout_callback)

    参数说明:

    logout_callback(status):执行退出登录的回调方法 status:int类型,退出状态 1:退出成功 0:退出失败

     gwsdk.logout(function (status) {alert("渠道返回的退出状态:" + status);});

    说明:无论渠道方是否退出成功,都会执行回调方法,游戏方需要判断 status

  4. 切换账号

    方法名称:gwsdk.loginchange(loginchange_callback)

    参数说明:

    1.loginchange_callback(status):执行切换账号的回调方法;status:int类型,退出状态 1:切换成功 0:切换失败

     gwsdk.loginchange(function (status) {alert("渠道返回的退出状态:" + status);});
  5. 角色上报

    1.方法名称:gwsdk.push_roleinfo(roleinfo,callback)

    参数说明:

    1. roleinfo(obj):角色信息对象
    Var roleData ={};
    roleData.serverid="1"; //区服ID
    roleData.servername="1区"; //区服名称
    roleData.roleid="10000";  //角色ID
    roleData.rolename="孙悟空"; //角色名称
    roleData.rolelevel=58;//角色等级
    roleData.rolebalance="1000"; //角色游戏内货币余额
    roleData.partyid="你好";  //帮派ID
    roleData.rolepower="100000";  //角色战力
    roleData.viplevel="VIP8";  //VIP等级
    roleData.rolegender="男";     //角色性别
    roleData.partyrolename="天下第一帮"; //帮派名称
    roleData.professionid="1";   //角色职业Id
    roleData.profession="法师";   //角色职业名称
    roleData.friendlist="[]";  //角色好友列表
    roleData.eventname="3";  //事件类型:0、未知;1、进入游戏;2、创建角色;3、角色升级;4、角色充值;5、退出登录或者切换账号;99、退出游戏

    callback(status,照&):角色上报的回调方法status:int类型,上报状态1:上报成功 0:上报失败ms&:错误原因,只有当 status 为0时,mg,才提示错误原因

     gwsdk.push_roleinfo(roleData, function (status,msg) {
             alert("渠道返回的角色上传状态:" + status);
             if(status==0)
             {
             alert("错误原因:" + msg);
             }
      });

    说明:游戏方在创建角色,等级提升,修改角色名等等,上报角色信息

四.游戏充值

  1. 充值

    方法名称:gwsdk.create_order(roleData ,orderInfo ,timestamp, sign,callback)

    参数说明:

    2.orderinfo(obj):角色信息对象
    Var roleData ={};
    roleData.serverid="1"; //区服ID
    roleData.servername="1区"; //区服名称
    roleData.roleid="10000";  //角色ID
    roleData.rolename="孙悟空"; //角色名称
    roleData.rolelevel=58;//角色等级
    roleData.rolebalance="1000"; //角色游戏内货币余额
    roleData.partyid="你好";  //帮派ID
    roleData.rolepower="100000";  //角色战力
    roleData.viplevel="VIP8";  //VIP等级
    roleData.rolegender="男";     //角色性别
    roleData.partyrolename="天下第一帮"; //帮派名称
    roleData.professionid="1";   //角色职业Id
    roleData.profession="法师";   //角色职业名称
    roleData.friendlist="[]";  //角色好友列表
    roleData.eventname="充值";  //事件类型:  充值 固定值
    2.orderinfo(obj):角色信息对象
    Var roleData ={};
    roleData.serverid="1"; //区服ID
    roleData.servername="1区"; //区服名称
    roleData.roleid="10000";  //角色ID
    roleData.rolename="孙悟空"; //角色名称
    roleData.rolelevel=58;//角色等级
    roleData.rolebalance="1000"; //角色游戏内货币余额
    roleData.partyid="你好";  //帮派ID
    roleData.rolepower="100000";  //角色战力
    roleData.viplevel="VIP8";  //VIP等级
    roleData.rolegender="男";     //角色性别
    roleData.partyrolename="天下第一帮"; //帮派名称
    roleData.professionid="1";   //角色职业Id
    roleData.profession="法师";   //角色职业名称
    roleData.friendlist="[]";  //角色好友列表
    roleData.eventname="4";  //事件类型:  4、角色充值

    timestamp:时间戳

    sign:签名 (见下方”订单发起时Sign计算方法”)

    5.callback(is_pay,cp_order_id,order_id):游戏充值的回调方法 is_pay:玩家是否完成付款 1:已完成 0:未完成

    cp_order_id:游戏方的订单号

    order_id:渠道方(我方)的订单号

    gwsdk.create_order(roleinfo, orderinfo, timestamp, sign, function (is_pay, cp_order_id, 	order_id) {
     	alert("支付状态" + is_pay); //此返回值不能作为玩家是否支付的依据,只为前端效果提供支持
     });

    订单发起时Sign计算方法如下:

    string app_id = "de13612d5e934590";
    string cporder = "20231007162056";//cp的订单号
    string timestamp = "1696687507";  //时间戳
    string signstr = "amount={amount}&app_id={app_id}&cporder={cporder}&timestamp={timestamp}&uid={uid}" + "d027b0e2d1bc4b5a9a0f8caf734f90db";//待签的字符串 这里使用pay_key进行签名
    signstr = signstr.Replace("{amount}", Convert.ToInt32(20 * 100).ToString());
    signstr = signstr.Replace("{app_id}", app_id);
    signstr = signstr.Replace("{cporder}", cporder); //cp方的订单号
    signstr = signstr.Replace("{timestamp}", timestamp);
    signstr = signstr.Replace("{uid}", "2-196");
    string sign = Common.Utils.MD5(signstr).ToLower();

    说明:不论玩家是否完成充值,都会执行回调方法,游戏方需要判断is_pay是否为1(是否支付成功).

    注意:玩家是否支付成功,以服务端通知为准,H5SDK 返回的is_pay=1,不可作为玩家充值成功状态. 服务端通知请参阅服务端对接文档.与安卓IOS相同

五.demo示例

  1. 充值

    -->
    	$(function () {
    		var app_id = "dcc63538a2d04d71";
    		//初始化
    		gwsdk.init(app_id);
    
    		//打开登录窗口(当玩家在你方掉线时,可以调用此方法)
    		$("#btn_login").click(function () {
    			gwsdk.login();
    		})
    
    		//退出登录
    		$("#btn_logout").click(function () {
    			gwsdk.logout(function (status) {
    				alert("渠道返回的退出状态:" + status);
    			});
    		})
    
    		//切换账号
    		$("#btn_loginchange").click(function () {
    			gwsdk.loginchange(function (status) {
    				alert("渠道返回的切换账号状态:" + status);
    			});
    		})
    
    		//角色上报
    		$("#btn_push_roleinfo").click(function () {
    			var roleinfo = {};
    			roleinfo.serverid = "1"; //区服ID
    			roleinfo.servername = "1区"; //区服名称
    			roleinfo.roleid = "10000";  //角色ID
    			roleinfo.rolename = "H5角色名称"; //角色名称
    			roleinfo.rolelevel = 58;//角色等级
    			roleinfo.rolebalance = "1000"; //角色游戏内货币余额
    			roleinfo.partyid = "dxdy";  //帮派ID
    			roleinfo.rolepower = "100000";  //角色战力
    			roleinfo.viplevel = "VIP8";  //VIP等级
    			roleinfo.rolegender = "男";     //角色性别
    			roleinfo.partyrolename = "天下第一帮"; //帮派名称
    			roleinfo.professionid = "1";   //角色职业Id
    			roleinfo.profession = "法师";   //角色职业名称
    			roleinfo.friendlist = "[]";  //角色好友列表
    			roleinfo.eventname = "升级";  //事件类型:  登录 注册 升级 退出
    
    			gwsdk.push_roleinfo(roleinfo, function (status, msg) {
    				if (status == 1) {
    					alert("渠道返回的角色上传成功:" + status);
    				}
    				else {
    					alert("渠道返回的角色上传失败,错误原因:" + msg);
    				}
    			});
    		});
    
    
    		//创建订单
    		$("#btn_create_order").click(function () {
    			var roleinfo = {};
    			roleinfo.serverid = "1"; //区服ID
    			roleinfo.servername = "1区"; //区服名称
    			roleinfo.roleid = "10000";  //角色ID
    			roleinfo.rolename = "H5角色名称"; //角色名称
    			roleinfo.rolelevel = 58;//角色等级
    			roleinfo.rolebalance = "1000"; //角色游戏内货币余额
    			roleinfo.partyid = "dxdy";  //帮派ID
    			roleinfo.rolepower = "100000";  //角色战力
    			roleinfo.viplevel = "VIP8";  //VIP等级
    			roleinfo.rolegender = "男";     //角色性别
    			roleinfo.partyrolename = "天下第一帮"; //帮派名称
    			roleinfo.professionid = "1";   //角色职业Id
    			roleinfo.profession = "法师";   //角色职业名称
    			roleinfo.friendlist = "[]";  //角色好友列表
    			roleinfo.eventname = "充值";  //事件类型:  充值
    
    			var orderinfo = {};
    			orderinfo.cpOrderID = "20231007162056"; //cp的订单编号
    			orderinfo.amount = "20.00";  //订单金额
    			orderinfo.count = "200"; //购买的游戏币数量 即20元可以购买多少游戏币 如果融合sdk传999999
    			orderinfo.goodsID = "商品ID";  //游戏方商品Id
    			orderinfo.goodsName = "点券"; //商品名称  如:元宝 钻石 点券 
    			orderinfo.goodsdesc = "月卡";//商品描述: 如:周卡 月卡 元旦活动 648送10%
    			orderinfo.extrasParams = "";//透传参数,本参数不参与签名 请求你方服务端发货时会携带本参数,具体参见服务端文档
    
    
    			var timestamp = "1696687507";//此参数应由服务端生成
    			var sign = "6ceb59279a368a0772a3fc31acbefe9e";//此参数应由服务端根据签名规则使用pay_key,计算签名得出,签名规则参见服务端文档
    
    			gwsdk.create_order(roleinfo, orderinfo, timestamp, sign, function (is_pay, cp_order_id, order_id) {
    				alert("渠道返回支付状态" + is_pay); //此返回值不能作为玩家是否支付的依据,只为前端效果提供支持
    			});
    		});
    	});
    	-->