# 资源复用
很多业务情况下,我们需要在多个小程序或公众号中提供统一的后端服务;微信云托管目前支持将一个「小程序/小游戏/公众号」的云托管环境共享给同主体的其他「小程序/小游戏/公众号」。
设置资源复用时,被复用方不需要也开通
微信云托管。即从理论上来说,同一个主体的多个小程序/公众号,只需开通一个云托管即可,避免创建过多账号。
# 操作指引
- 前往微信云托管控制台-资源复用页面,登录共享环境所在的账号。
- 点击右上角「关联」按钮,将会弹出对话框,在对话框中输入需要共享的账号APPID,如果条件符合,将展示logo和名称用于确认。
另外,选择共享的环境,可以选择多个,确认信息后点击「确定」按钮。
关联中会弹出管理员扫码确认框,需要当前账号下的微信管理员扫码确认方可。
确认完成后,将在列表中显示信息,你可以进行「配置」用于变更环境,也可以操作「解绑」解除复用关系。每项操作均需要管理员扫码确认。
如需添加关联账号的相关开发者,可前往当前账号MP后台将相关开发者加为web开发者/项目成员即可。
# 云端调试
共享环境后,在共享环境所在的服务中,云端调试可以切换账号主体,相应的就可以用指定账号发起调用测试,也可以复制关键代码直接用于开发。
# 各端应用调用
资源复用下小程序中调用,需要在 wx.cloud.init
中填写环境来源的账号appid,
例如,小程序A(appid:WXAAA)的环境 prod_001
授权给 小程序B(appid:WXBBB),则应是如下:
const c1 = new wx.cloud.Cloud({
resourceAppid: 'WXAAA', // 环境所属的账号appid
resourceEnv: 'prod_001', // 微信云托管的环境ID
})
await c1.init()
await c1.callContainer({
config: {
env: 'prod_001', // 微信云托管的环境ID
},
path: '/xxx', // 填入业务自定义路径和参数,根目录,就是 /
method: 'POST', // 按照自己的业务开发,选择对应的方法
header: {
'X-WX-SERVICE': 'xxx', // xxx中填入服务名称(微信云托管 - 服务管理 - 服务列表 - 服务名称)
// 其他header参数
}
// 其余参数同 wx.request
})
如果你在小程序中进行对象存储相关操作,请参考对象存储文档,参看资源复用章节
资源复用下公众号中调用,请参考公众号调用文档
# 资源复用下的开放接口调用
使用资源复用进行开放接口调用时,需要额外携带调用方的 AppID 信息进行调用,示例如下。
# 原接口形式
api.weixin.qq.com/wxa/getwxadevinfo
# 资源复用的形式
api.weixin.qq.com/wxa/getwxadevinfo?from_appid=APPID
如果没有携带 from_appid
,默认会以调用方的身份去进行服务端调用。建议在业务代码内判断需要的资源方身份,并在调用时显式携带 from_appid
参数。
如果请求来自小程序,可以将用户请求中的 x-wx-from-appid
透传至 api.weixin.qq.com
的接口参数中,参考代码如下:
return new Promise((resolve, reject) => {
request({
method: 'POST',
url: `http://api.weixin.qq.com/wxa/msg_sec_check?from_appid=${req.headers['x-wx-from-appid']}`,
body: JSON.stringify({
openid: req.headers['x-wx-openid'],
version: 2,
scene: 2,
content: '安全检测文本'
})
},function (error, response) {
console.log('接口返回内容', response.body)
resolve(JSON.parse(response.body))
})
})
# 资源复用情况下使用微信支付
请参考此文档
# 资源复用情况下消息推送的使用
请参考此文档
# 使用限制
当前仅支持小程序、小游戏、公众号、小商店的账号间资源复用。
不支持第三方平台、开放平台WEB网站等其他账号类型的复用。 第三方平台的账号授权请参照服务商模式
即使
A小程序
和B小程序
/B公众号
设置了资源复用,在使用云调用时,也不可以以A小程序
身份使用B小程序
/B公众号
的微信令牌。