# 服务商使用云托管开放服务

# 一、开放接口服务是什么?

  • 「开放接口服务」是微信云托管推出的云调用免鉴权解决方案服务。通过「开放接口服务」,开发者无需维护 component_access_token / authorizer_access_token,即可轻松接入微信体系访问官方服务端接口。说明,免维护 authorizer_access_token 调用官方小程序服务端接口,需服务商为每个商家小程序创建环境并绑定才可使用。
  • 更多关于开放接口服务的接口可查看开放接口服务介绍文档
  • 本文将仅对第三方模式在微信云托管里使用「开放接口服务」云调用的方式调用官方服务端接口进行介绍。

# 二、服务商业务部署架构

  • 服务商的业务部署架构影响着服务商使用云调用方式调用官方服务端接口。为了便于理解,本文将对不同的部署架构进行编号
  • 下方部署结构只是截取部分进行示例说明,不代表仅支持如下部署架构

# 2.1、基本名词说明

  • 通常服务商需要开发「用于商家系统的 saas 业务系统」以及「用于服务商内部进行批量管理商家系统和数据的系统」;前者可简称为面向商家的B(business)端系统,后者可简称为面向服务商的A(admin)端系统。
  • 通常面向商家的 B 端系统需要调用官方小程序服务端API,即,传统模式下使用 authorizer_access_token 调用的那些接口;
  • 而面向服务商的 A 端系统需要调用官方第三方平台服务端API,即,传统模式下使用 component_access_token 调用的那些接口;

# 2.2、架构 A 解读

  • B端系统和 A 端系统部署在同一个环境同一个服务内;在该服务内需要调用第三方平台接口,也需要调用小程序服务端接口;
  • 但仅适用于服务的小程序都是同一主体的(例如,服务商可将其企业小程序部署于该架构,此架构不适用于服务多个商家小程序的情况);
  • 服务商可通过环境共享接口将环境共享给同主体小程序使用(当前仅支持接口的方式进行共享),从而可实现同主体多个小程序通过云调用的方式调用小程序服务端接口。
  • 此架构下,服务商可通过云调用的方式调用第三方平台的接口(即,传统模式下使用 component_access_token 调用的那些接口);
  • 此架构下,服务商可通过云调用的方式调用小程序服务端的接口(即,传统模式下使用 authorizer_access_token 调用的那些接口);
  • 例如,开发者可免token 调用小程序登录接口,前提是第三方平台帐号已经获得对应小程序授权;
  • 例如,开发者可免token 调用提交小程序代码接口,前提是第三方平台帐号已经获得对应小程序授权;

# 2.2.1、小程序登录接口调用示例

1、小程序登录接口的调用地址如下:

GET https://api.weixin.qq.com/sns/component/jscode2session?appid=APPID&js_code=JSCODE&grant_type=authorization_code&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN

2、登录微信云托管控制台,开启“开放接口服务”

3、配置,微信令牌权限配置在配置时,只需要 api.weixin.qq.com 之后,?参数之前的部分,即“/sns/component/jscode2session”,然后并保存即可。

4、在服务内发起调用即可(无需再拼接上component_access_token),例如

curl --location --request GET "http://api.weixin.qq.com/sns/component/jscode2session?appid=APPID&js_code=JSCODE&grant_type=authorization_code&component_appid=COMPONENT_APPID"
  • 注意:是http,不是https。如果使用 https 还需要安装证书,详情可查看证书与 HTTPS

# 2.2.2、提交小程序代码接口调用示例

1、提交小程序代码调用地址如下:

POST https://api.weixin.qq.com/wxa/commit?access_token=authorizer_access_token

2、登录微信云托管控制台,开启“开放接口服务”

3、配置,微信令牌权限配置在配置时,只需要 api.weixin.qq.com 之后,?参数之前的部分,即“/wxa/commit”,然后并保存即可。

4、在请求地址上拼上授权小程序的appid,即“from_appid=wxxxxx”,即可在服务内发起调用即可(无需再拼接上authorizer_access_token),例如

curl --location --request POST "http://api.weixin.qq.com/wxa/commit?from_appid=wxxxxxxxxx" --data '{"template_id": "0","ext_json": "{}","user_version": "V1.0","user_desc": "test"}'
  • 说明,拼上小程序appid,该小程序要将对应的权限集授权给该第三方平台帐号,否则调用的时候会出现61007无权限报错。
  • 注意:是http,不是https。如果使用 https 还需要安装证书,详情可查看证书与 HTTPS

# 2.3、架构 A' 解读

  • A 和A‘部署架构类似,区别在于A'架构中,小程序是所有商家的小程序(不同商家小程序主体不同)。
  • 不同主体的小程序无法共享同一个环境,因此仍需要通过authorizer_access_token调用小程序服务端接口。

# 2.4、架构 B 解读

  • B 架构中,B端系统和 A 端系统,分别部署在不同的服务;
  • 其中 A 端系统可通过云调用方式免component_access_token调用第三方平台接口;
  • 但是,B端系统不可通过云调用方式免authorizer_access_token调用小程序服务端接口(同架构A');
  • 说明:微信云托管当前尚不支持同 vpc 内服务间调用,因此,在部署架构 B 中,仍需经过公网方式进行访问;

# 2.5、架构 C 解读

  • C 架构中,B端系统和 A 端系统,分别部署在不同环境
  • A端系统部署于服务商的环境,通过云调用方式免component_access_token调用第三方平台接口
  • 服务商通过创建环境接口给不同商家小程序创建环境
  • 然后,再通过环境共享接口将商家 N 的环境共享给商家 N 的小程序帐号
  • 然后,就可以在环境 N 中,通过云调用方式免authorizer_access_token调用小程序服务端接口

# 三、规则总结

  • 使用第三方平台帐号创建的环境,在该环境部署的服务,可通过云调用方式免component_access_token调用第三方平台接口;
  • 如果该环境可同时适用于部署同主体小程序服务,可以云调用方式免authorizer_access_token调用小程序服务端接口;
  • 当服务商服务的商家小程序为多个不同主体小程序时,服务商可以通过接口为每个商家创建商家主体的环境,在该环境部署的服务,可以云调用方式免authorizer_access_token调用小程序服务端接口。