# 环境共享

> 版本要求：开发者工具 >= `1.03.2009140` （[稳定版下载](/miniprogram/dev/server/API/mp-access-token/api_getstableaccesstoken.md)）

云开发支持跨账号环境（资源）共享，即一个小程序的云开发资源可以授权共享给同主体下多个其他小程序 / 公众号使用，无论其他小程序/公众号是否已开通云开发；环境共享可以帮助开发者更高效的支持多小程序/公众号同用一套云开发资源，无需多个小程序/公众号多次开发，大大的节省开发时长，提高开发效率。



| 优势 & 特点    | 说明                                                         |
| :------------- | :------------------------------------------------------------ |
| **资源复用**   | 云开发资源可共享给同主体下其他账号使用，其他账号无需复制或迁移数据 |
| **能力复用**   | 开发好的云函数可以授权给其他账号原生调用，类似 HTTP 服务，做到能力复用 |
| **Web 支持**   | 在 Web 中既可以[使用公众号登录态访问微信云开发资源和能力](/miniprogram/dev/wxcloudservice/wxcloud/basis/web)，又可以在 Web 中用[未登录模式](/miniprogram/dev/wxcloudservice/wxcloud/basis/identityless)访问 |
| **细粒度授权** | 授权粒度细，如可以只授权云函数调用权限而不授权修改权限       |
| **单层级授权** | 单层级授权保证了安全，如 A 共享环境给了 B，B 不可再将 A 的环境共享给其他小程序/公众号 |
| **支付结算**   | 由共享环境的小程序统一结算，无需多次分别支付结算             |
| **操作简单**   | 一键开通                                                     |



## 环境共享给未开通云开发的小程序

1）未开通云开发的小程序无法进入云开发控制台，如被同主体的其他小程序共享环境后，默认允许未开通云开发的小程序可进入云开发控制台，且默认开通「环境共享」功能；进入控制台后默认显示授权共享环境的第一个小程序的云开发环境。

2）未开通云开发的小程序被共享后，如需开通云开发，则可通过路径「设置-切换环境-创建环境」开通云开发并创建环境；

3）未开通云开发的小程序被共享后，解除所有小程序的共享关系，则环境共享功能注销，且云开发控制台入口消失；

## 跨账号环境共享下的云调用

跨账号环境共享时，云调用也是可以生效的，小程序 A 获得了小程序 B 的授权，那么比如在 A 小程序的云函数中也可以发起 B 的云调用。需注意的是，在 A 小程序的云函数里发起云调用时默认是以 A 的身份发起的，如果在环境共享的场景下需要以其他小程序的身份发起，需要指定 appid。

示例代码：小程序 A 调用小程序 B 的云函数 b，然后在云函数 b 里面希望以小程序 A 的身份发起，则需在调用时指定：

```js
// 在小程序 B 的云函数 b 里处理来自 A 小程序的请求时，对 B 小程序的用户发送订阅消息：
cloud.openapi({ appid: 'A小程序AppID' }).subscribeMessage.send({ 
  touser: cloud.getWXContext().FROM_OPENID,
  // ...
})
```


## 常见问题

问：小程序/公众号未开通云开发可以被环境共享吗？

答：可以。被共享的小程序/公众号无需开通云开发，已开通云开发的小程序也支持被共享环境。



问：不同主体间的小程序/公众号可以进行环境共享吗？

答：目前环境共享暂仅支持同主体。同主体下所有拥有云开发资源的小程序均可进行环境共享。



问：我一个小程序有 3 个云开发环境，可以一次共享 3 个环境吗？

答：可以。可同时将该小程序下的多个环境进行共享。



问：一个小程序的云开发环境可以最多共享给几个小程序/公众号？

答：10 个小程序/公众号。



问：给某个小程序/公众号共享环境后，因为某些原因不想再继续共享，可以解除吗？

答：两方均可单方面解除共享关系。



问：环境共享给我之后，我可以对这个环境进行任何操作吗？

答：如该小程序共享环境给你的小程序时授权了所有操作权限，你即可对该环境里的云开发资源进行任何操作；但是对环境本身不可进行删除等操作；
