自建后台开发指引

开发者使用自建服务器作为后台时,有两部分工作。

  • 客户端

    使用引擎接口提供的网络接口与自建服务器进行通信。

    使用引擎接口BK.QQ.shareToArk模拟房间逻辑,以达到其他人能加入房间的功能

  • 服务器

    游戏本身业务逻辑

    对请求者进行校验,确保调用方为手Q

    服务器测进行拉取道具,消耗道具,赠送道具等操作

自建后台服务器架构

 2.1.自建后台  - 图1

  • 引擎侧通过wss/socket/http方式与自建后台进行通信。
  • 自建后台需要调用方进行鉴权操作,以确保调用方确实为手Q用户。
  • 自建后台可以使用接口拉取道具,消耗道具,赠送道具

    通信方式

开发者自建后台支持以下三种方式与自建后台服务器进行通信

  • websocket(对应BK.Websocket类)
  • socket(对应BK.Socket)
  • http (对应BK.HttpUtil)

    用户鉴权

因开发者使用自建后台形式游戏业务逻辑通信,存在非法玩家伪造请求与三方自建后台进行交互。因此开发者需要对调用方进行校验。校验方法查看鉴权接口

道具接口

自建后台支持与QQ轻游戏道具服务进行道具的拉取,消耗,赠送操作具体方法查看道具管理接口

调用道具、鉴权接口方法

如何获取APPID和APPKEY

开发者在调用道具管理接口鉴权接口接口时,需要使用APPID和APPKEY做签名,保证调用方确实为开发者。

APPID、APPKEY与游戏一一对应,可以通过如下方法查看和设置

  • 登陆https://hudong.qq.com/
  • 点击顶部菜单栏的“游戏管理”
  • 点击左上角下拉菜单选择游戏
  • 点击左边导航栏的“设置项目”
  • 点击右边页面中选择“开发设置”,可查询APP ID
  • 点击appkey后的“设置”按钮,可编辑APPKEY
     2.1.自建后台  - 图2

如何获取openId和openKey

开发者通过Bricks引擎全局变量GameStatusInfo.openId可以获取当前手Q用户的openId

开发者通过Bricks引擎的BK.QQ.fetchOpenKey接口和openKey,用于用户身份鉴权。

  1. BK.QQ.fetchOpenKey(function (errCode, cmd, data) {
  2. if (errCode == 0) {
  3. var openKey = data.openKey;
  4. }
  5. });

开发者自建后台可以通过鉴权接口接口验证OPENID和OPENKEY是否合法。

需要注意的是,只有配置了needOpenkey授权的游戏,方可调用BK.QQ.fetchOpenKey接口获取有效的OPENID和OPENKEY。具体配置请参考游戏上架章节中,关于config.json-needOpenkey字段的配置说明。

Bricks引擎HTTP请求的参考样例

  1. /**
  2. * Bricks引擎
  3. *
  4. * http Demo
  5. */
  6. //1.简单的http get请求
  7. function onResponseImage(res, code) {
  8. var resPicTexture = BK.Texture.createTextureWithBuffer(res);
  9. var icon = new BK.Sprite(279, 132, resPicTexture, 0, 1, 1, 1);
  10. icon.position = { x: BK.Director.screenPixelSize.width / 2.0, y: BK.Director.screenPixelSize.height / 2.0 };
  11. icon.anchor = { x: 0.5, y: 0.5 };
  12. BK.Director.root.addChild(icon);
  13. }
  14. var httpimagreq = new BK.HttpUtil("https://sqimg.qq.com/qq_product_operations/im/qqlogo/imlogo_b.png");
  15. httpimagreq.setHttpMethod("get");
  16. httpimagreq.requestAsync(onResponseImage);
  17. //2.post请求1
  18. var httppost1 = new BK.HttpUtil("http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx");
  19. httppost1.setHttpMethod("post")
  20. httppost1.setHttpPostData("date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213")
  21. //设置referer,cookie
  22. httppost1.setHttpReferer("http://hlddz.huanle.qq.com");
  23. httppost1.setHttpCookie("cookie1=value1; cookie2=value2; cookie3=value3;");
  24. httppost1.requestAsync(onResponse);
  25. //3.post请求2
  26. var httppost2 = new BK.HttpUtil("http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx");
  27. httppost2.setHttpMethod("post")
  28. httppost2.setHttpPostData("date=201311299&startRecorda=1&lena=5&udida=1234567890&terminalType=Iphone&cid=213")
  29. //设置referer,cookie
  30. httppost2.setHttpReferer("www.abc.com");
  31. httppost2.setHttpCookie("cookie1=value1; cookie2=value2; cookie3=value3;");
  32. httppost2.requestAsync(onResponse);

原文: https://hudong.qq.com/docs/engine/server/thrid/intro.html