微信小程序
本文介绍如何在小程序中通过 wx.cloud.callContainer 访问云托管服务,并说明默认访问范围、跨环境(环境共享)使用方法及常见问题排查。
适用范围与术语
- 云开发环境(env):TCB 环境,承载数据库、存储、云托管等资源。
- 云托管服务:部署在某个云开发环境下的容器化服务。
- 默认访问范围:小程序仅能访问与自己已关联的云开发环境中的云托管服务。
- 环境共享:云开发能力。开启后,同主体下其他小程序可通过
resourceAppid/resourceEnv访问该环境中的云托管服务。
前置条件
- 小程序与目标云开发环境已完成关联(见关联操作)。
- 目标环境内已部署云托管服务,并确认服务名称。
- 在小程序侧已引入并可使用
wx.cloud能力。
基础用法(访问本小程序已关联的环境)
在 app.js 的 onLaunch 中初始化一次:
App({
async onLaunch() {
// 使用 callContainer 前需先初始化
wx.cloud.init({
env: "prod-01", // 与小程序已关联的云开发环境 ID, 可以留空
});
},
});
在任意页面发起调用:
const res = await wx.cloud.callContainer({
config: {
env: "prod-01", // 与小程序已关联的云开发环境 ID
},
path: "/", // 业务自定义路径,根目录为 /
method: "GET", // 依业务选择
header: {
"X-WX-SERVICE": "hello-world", // 云托管服务名称
// 其他 header
},
// dataType: 'text', // 默认为 JSON;如需自行解析可设为 'text'
});
console.log(res);
跨环境访问(通过“云开发环境共享”)
注意
callContainer 默认不支持跨环境。仅在目标环境对当前小程序开启了云开发环境共享后才可访问。
- 适用前提:小程序同主体;在云开发控制台为资源方小程序开启目标环境的“环境共享”。
- 消费方小程序代码示例:
// app.js
App({
onLaunch: async function () {
const c1 = new wx.cloud.Cloud({
resourceAppid: "wx-01", // 资源方 AppID
resourceEnv: "prod-01", // 资源方云开发环境 ID
});
await c1.init();
const result = await c1.callContainer({
path: "/",
method: "GET",
header: {
"X-WX-SERVICE": "hello-world", // 资源方环境内的服务名
},
});
console.log(result);
},
});
与 wx.request 的区别与优势
- 内网通信,不耗费公网流量。
- 仅授权小程序/公众号可访问,天然抵御 DDoS。
- 就近接入与链路加速,无需后端多地域部署。
- 无需在小程序后台配置「服务器域名」。
- 后端可直接获取用户信息(如 openid),仅适用于微信云托管(腾讯云侧云托管暂无)。
- 如果仅小程序/公众号调用,建议在服务设置中关闭公网访问(关闭后请使用
callContainer而非wx.request)。