跳到主要内容

微信小程序

本文介绍如何在小程序中通过 wx.cloud.callContainer 访问云托管服务,并说明默认访问范围、跨环境(环境共享)使用方法及常见问题排查。

适用范围与术语

  • 云开发环境(env):TCB 环境,承载数据库、存储、云托管等资源。
  • 云托管服务:部署在某个云开发环境下的容器化服务。
  • 默认访问范围:小程序仅能访问与自己已关联的云开发环境中的云托管服务。
  • 环境共享:云开发能力。开启后,同主体下其他小程序可通过 resourceAppid/resourceEnv 访问该环境中的云托管服务。

前置条件

  • 小程序与目标云开发环境已完成关联(见关联操作)。
  • 目标环境内已部署云托管服务,并确认服务名称。
  • 在小程序侧已引入并可使用 wx.cloud 能力。

基础用法(访问本小程序已关联的环境)

app.jsonLaunch 中初始化一次:

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 的区别与优势

  1. 内网通信,不耗费公网流量。
  2. 仅授权小程序/公众号可访问,天然抵御 DDoS。
  3. 就近接入与链路加速,无需后端多地域部署。
  4. 无需在小程序后台配置「服务器域名」。
  5. 后端可直接获取用户信息(如 openid),仅适用于微信云托管(腾讯云侧云托管暂无)。
  6. 如果仅小程序/公众号调用,建议在服务设置中关闭公网访问(关闭后请使用 callContainer 而非 wx.request)。

参考链接