为了对用户的应用提供统一的服务和管理,空应用(外部云服务)模式必须要遵循平台提供的标准和限制,才能调用成功。外部云服务对接及链路梳理,详情请查看外部云服务对接。
为了对用户的服务进行统计以及提供平台级错误排查能力,用户的http服务必须按照以下格式统一返回,其他字段云网关会自动过滤。
{ "success": true, // 布尔值,表示本次调用是否成功 "data":{}, //调用成功(success为true)时,服务端返回的数据。 不允许返回JS中undefine结果,0,false,"" 等 "errorCode": "xxxx", //字符串,调用失败(success为false)时,服务端返回的错误码 "errorMessage": "xxxx" ////字符串,调用失败(success为false)时,服务端返回的错误信息 }
为了方便用户获取到当前商家应用的一些上下文数据,云网关会自动将这些数据加到http param中(url后的参数),用户自定义的参数不能和这些参数同名,否则会被覆盖,目前支持的系统参数如下。
注意:open_id 等参数,在网络请求时会自动添加到url的参数上。
上下文参数 |
释义 |
app_key |
小游戏应用方案的appKey |
user_nick |
当前登录用户的昵称(需要用户授权) 说明:登录不等于授权,请先获取用户授权 |
open_id |
当前登录用户的openId 获得当前登录用户的openId请查看 用户OpenId获取方式 |
env |
当前空应用调用环境,入参为:初始化时配置的环境值,空应用理论上均为online。 |
mini_app_id |
发起调用的小游戏ID |
access_token |
系统保留字段,小游戏不涉及 |
sign |
使用当前小游戏appkey和secret进行对参数进行加签后的签名 |
mix_nick |
当前登录用户的混淆nick |
user_id |
系统保留字段,小游戏不涉及 |
main_user_id |
系统保留字段,小游戏不涉及 |
source_app_id |
系统保留字段,小游戏不涉及 |
app_owner_open_id |
系统保留字段,小游戏不涉及 |
注:sign签名逻辑参考奇门签名方法:外部云服务对接 中的加签&验签部分。
目前仅支持GET和POST两种请求,POST请求的方式中只支持application/json的格式。
说明:在使用POST请求时,请指定header为application/json格式,否则调用到云端的是application/octet-stream格式,导致调用报错。
确保小程序IDE中引入云SDK版本>=1.1.0,建议云SDK始终保持最新版本*。
cloud.application.httpRequest
字段名 |
类型 |
必选 |
默认值 |
说明 |
path |
string |
是 |
- |
HTTP接口路径 |
method |
object |
否 |
POST |
GET,POST。必须是大写 |
params |
object |
否 |
- |
URL参数 |
body |
object |
否 |
|
放置在BODY中的参数 |
headers |
object |
否 |
|
HTTP请求头参数 |
exts |
object |
否 |
|
扩展协议参数。 cloudAppId:外部服务的域名白名单配置后获取,在配置处查看具体参数 timeout:服务调用超时时间,不填默认3000,单位毫秒,最大不超过10000。 domain:域名,包括协议头以及端口号(可省略),支持http、https,例如:https://www.taobao.com。 cacheType:服务缓存类型,不填默认不使用缓存,值为数字 缓存类型枚举: 0 :标准缓存,命中条件为相同小程序+相同用户+相同请求 1:用户无关缓存,命中条件为相同小程序+相同请求 2:小程序无关缓存,命中条件为相同用户+相同请求 3:全局缓存,命中条件为相同的请求 cacheTime:缓存失效时间,cacheType不为空的情况下生效,不填默认300,单位为秒,最大不超过3600 |
1)空应用调用,必须指定cloudAppId;
2)空应用调用接口必须指定domain调用。
1)对于请求的内容大小,不能超过128KB(1Mb)。
2)请求URI链接长度过长会被截断。
{ "success": false, // 布尔值,表示本次调用是否成功 "data":{}, //类型不限,调用成功(success为true)时,服务端返回的数据 "errorCode": "404", //字符串,调用失败(success为false)时,服务端返回的错误码 "errorMessage": "接口调用失败" ////字符串,调用失败(success为false)时,服务端返回的错误信息 }
空应用在端上调用此接口与在控制台进行服务测试返回的结构不一致。
1)控制台-云服务-应用管理-服务测试页完全按照平台规范的返回格式进行返回;
2)端上调用接口时,云SDK进行了处理,当success 为true时只返回 data,当success为false时 才会返回errorCode和errorMessage。
由于空应用的云侧部署在淘外,平台无法提供对应的测试环境(test)和正式环境(online)的部署以及支持,因此空应用在小程序端调用时,需要在初始化代码中,指定要调用的环境为 online。
js代码中初始化cloud并调用。
//game.js文件初始化示例代码 import cloud from '@tbmp/mp-cloud-sdk'; cloud.init({ //环境固定传online env: 'online' }); ---------------------------------- //调用接口的方法 async function testCloud() { let result try { result = await cloud.application.httpRequest({ //不需要完整域名,只需要接口访问路径即可 'path': '/welcome', 'method': 'POST', //POST请求需要指定下请求格式,只支持application/json。 如:"content-type":"application/json;charset=UTF-8" 'headers': { "Content-Type":"application/json;charset=UTF-8"}, 'params': {"name":"hanruo","action":"test"}, 'body': { "xftest":"hhh", "id":"1234"}, 'exts': { //cloudAppId为域名白名单配置后获取,在配置处查看具体参数 "cloudAppId": "xxxx", // 单位ms "timeout": 4000, //调用需要填写该字段,包括协议头以及端口号(可省略),支持http、https "domain":"https://www.taobao.com" } }); } catch (error) { console.log(error) } console.log("result:", JSON.stringify(result)); } ---------------------------------- //执行方法 testCloud(); ================================== //如果需要用户授权,服务端获取对应 openId,则如下调用: //执行方法 my.authorize({ scopes: 'scope.userInfo', //需要授权的权限包,此处以用户信息权限包为例 success: (res) => { console.log("res:", res); testCloud(); }, fail(res) { console.log("fail:", res); } });
开发者可在控制台处查看空应用日志。