收藏
回答

云函数报错:errCode: -601012 unauthorized env?

两个小程序A和B,A开通了云开发,B没开通,A把环境共享给了B。以下代码都是B环境的。

A appid:wx06b0052a0bd58541

B appid: wx7848718d2ee015cd

小程序端在onLaunch初始化:

// 创建跨账号云环境实例
  cloud = new wx.cloud.Cloud({
    resourceAppid: "wx06b0052a0bd58541",
    resourceEnv: "cloud1",
  });
  if (!cloud) {
    error("[云开发] 初始化失败");
    return;
  }
  cloud.init();


用cloud在小程序端去读共享环境的数据库没问题。

编写了一个云函数:

const cloud = require("wx-server-sdk");
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
  traceUser: true,
});

exports.main = async (event) => {
  const wxContext = cloud.getWXContext();
  const openId = wxContext.OPENID;
  console.log(wxContext, cloud.DYNAMIC_CURRENT_ENV);

  const shareCloud = new cloud.Cloud({
    // 资源方 AppID
    resourceAppid: "wx06b0052a0bd58541",
    // 资源方环境 ID
    resourceEnv: "cloud1",
  });
  await shareCloud.init();
  const res = await shareCloud.database().collection("config").get();
  console.log(res);


  try {
    return {
      errCode: 0,
      errMsg: "ok",
      data: {
        openid: openId,
        userHelloData: "helloResult.data",
        timestamp: Date.now(),
      },
    };
  } catch (error) {
    console.error("hello 执行错误:", error);
    return {
      errCode: -1,
      errMsg: `执行异常: ${error.message}`,
    };
  }
};


把这个云函数部署到共享环境,B小程序里面使用上面初始化的cloud对象调用,能拿到open id,但是云函数里面的读取config集合的查询总是报错:

这个是本地测试报错:Error: errCode: -501001 resource system error | errMsg: getCrossAccountToken:fail [100003] env not exists (fa387b49-8d48-4814-9c02-0614154ebd12)

部署后调用是报错:errCode: -601012 unauthorized env,为什么是未授权呢?我什么配置都对过了,cloudbase_auth函数我是直接返回errCode=0的响应。

云函数里面查询集合不管是用cloud还是shareCloud对象查询都是报错,报错提示有一点差异,单都有env not exists的文字。

appID和环境ID都对过很多遍了,没问题。cloudbase_auth函数也有,不然用户端也不会能查。

什么问题?感觉微信的文档用处不大,照着做都不通。


----------------------------------------------------2026-03-10 00:05分更新-----------------------------------------

微信官方文档真尼玛误人子弟。

只需要小程序端需要new一下环境,这样:new wx.cloud.Cloud

云函数并不需要,直接正常写就行了:

// 被共享方只需要这样使用,云函数是上传到资源方的。
const cloud = require("wx-server-sdk");
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
  traceUser: true,
});

// 不需要下面这样新创建一个cloud环境。
const shareCloud = new cloud.Cloud({
    // 资源方 AppID
    resourceAppid: "wx06b0052a0bd58541",
    // 资源方环境 ID
    resourceEnv: "cloud1",
  });
  await shareCloud.init();
最后一次编辑于  03-10
回答关注问题邀请回答
收藏

1 个回答

  • Mr.Zhao
    Mr.Zhao
    03-09

    这段代码去掉

    03-09
    有用
    回复 5
    • Cody
      Cody
      03-09
      试过了,没用,一样的报错
      03-09
      回复
    • Cody
      Cody
      03-09
      已经调自闭了,按照官方文档,搞了一两天了,没搞通,太难用了。有域名的话,建议还是自己高后端吧。
      03-09
      回复
    • Cody
      Cody
      03-09
      他就是shareCloud.init()这行触发的报错。不是查询哪里报的
      03-09
      回复
    • Mr.Zhao
      Mr.Zhao
      03-09回复Cody
      我没云环境,用的话能调通
      03-09
      回复
    • Cody
      Cody
      03-10回复Mr.Zhao
      特么的,云函数根本就不需要new cloud.Cloud,就使用环境默认的cloud就可以。
      03-10
      回复
登录 后发表内容