前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序云开发跨账号环境(资源)共享

微信小程序云开发跨账号环境(资源)共享

作者头像
青年码农
发布2022-08-19 11:04:15
5.4K1
发布2022-08-19 11:04:15
举报
文章被收录于专栏:青年码农

本文字数:2340 字 12图

阅读完需:约 6 分钟

点击上方“青年码农”关注

回复“源码”可获取各种资料

微信小程序最近的大动作算是云开发计费调整,不再支持免费套餐,改为新的计费方式,“基础套餐+按量付费” 模式。这就导致我之前的所有基于云开发的小程序都需要调整,毕竟没有收益的小程序,不可能继续使用一个小程序开通一个开发环境和一个生产环境。

微信云开发免费的基础套餐、与微信生态整合、灵活的计费方式和完善的服务,使得云开发非常的火爆,大量的开发者涌入,即使不懂服务器,一个前端工程师使用云开发就可以完成一整个项目。

2018年9月云开发发布到现在,官方统计有1000000开发者选择微信云开发。

但是这次的改动,涉及的用户量非常的大,已经有很多开发者转战到其他平台。

就我个人而言,之前开发的小程序都需要做出调整,目前已经迁移了一个,删除了6个环境,还有几个打算后期在调整。还是老老实实用服务器吧,毕竟天下没有免费的午餐。

还好微信提供了跨账号环境共享,多个小程序可以共用一个环境,这样对开发者来说确实能减少一部分开销。接下来就说说如何共享环境。

1. 前置条件

环境共享必须是同主体的,这个同主体指的是:

个人:同一个人(身份证)注册的小程序

单位:同一公司

2. 开通

使用 1.03.2009140 或以上版本的开发者工具,进入云控制台,到 “设置 - 拓展能力 - 环境共享” 点击开通即开通环境共享能力。

更多

环境共享

开通

添加共享

不同主体提示信息,即使小程序绑定到同一公众号下也是不可以的。

授权

当前的小程序环境已经共享成功,调用方可以看到新的环境

接下来是代码环节,在使用共享环境之前,需要保证资源方拥有cloudbase_auth 云函数,用于鉴权调用方的身份并制定相关权限。

其实这个函数可以理解为守卫,调用方带着appid和环境id首先会走到这个函数,验证通过之后才可以使用。因为这个函数是必须的,官方也提供了简单的demo。

代码语言:javascript
复制
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  console.log(event)
  console.log(wxContext)
  // 跨账号调用时,由此拿到来源方小程序/公众号 AppID
  console.log(wxContext.FROM_APPID)
  // 跨账号调用时,由此拿到来源方小程序/公众号的用户 OpenID
  console.log(wxContext.FROM_OPENID)
  // 跨账号调用、且满足 unionid 获取条件时,由此拿到同主体下的用户 UnionID
  console.log(wxContext.FROM_UNIONID)

  return {
    errCode: ,
    errMsg: '',
    auth: JSON.stringify({
      // 自定义安全规则
      // 在前端访问资源方数据库、云函数等资源时,资源方可以通过
      // 安全规则的 `auth.custom` 字段获取此对象的内容做校验,
      // 像这个示例就是资源方可以在安全规则中通过 `auth.custom.x` 获取
      x: ,
    }),
  }
}

有了这个函数,就能确定调用方有哪些权限了。调用方使用共享环境方法,在需要的页面实例化。

代码语言:javascript
复制
onLoad: async function (options) {
    let that = this
    var c1 = new wx.cloud.Cloud({
      // 资源方 AppID
      resourceAppid: 'wxb8f15ddd4eb56193',
      // 资源方环境 ID
      resourceEnv: 'iot-prd',
    })
    // 跨账号调用,必须等待 init 完成
    // init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则
    await c1.init()
    that.setData({
      c1:c1
    })
}

使用的时候直接

代码语言:javascript
复制
that.data.c1
      .callFunction({
        name: "函数名",
        data: {}
      }).then(res => {
        // 业务逻辑
      })

最开始的时候打算把实例化放在app.js的onLaunch中,但是发现在index页面并不能取到,这个是由于异步导致,必须先实例化。

在云函数中使用和上面方法差不多,

代码语言:javascript
复制
const cloud = require('wx-server-sdk')

exports.main = async (event) => {
  // 声明新的 cloud 实例
  var c1 = new cloud.Cloud({
    // 资源方 AppID
    resourceAppid: 'wxe0e2656d74f0bff3',
    // 资源方环境 ID
    resourceEnv: 'test-f96b31',
  })

  // 跨账号调用,必须等待 init 完成
  // init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则
  await c1.init()

  // 完成后正常使用资源方的已授权的云资源
  return c1.callFunction({
    name: '函数名',
    data: {},
  })
}

这里有一个需要注意的地方,就是如果小程序使用了云开发,在编辑器中想要切换到共享的环境,是选择不了的,目前的编辑器还不支持,不知后续是否能支持。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 青年码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档