# 错误排查及常见问题
# 常见错误排查指引
# access_token missing rid: xxxxxx
- 检查是否开启了开放接口服务。开启后,需要发布一次新版本才能生效。
- 代码中请不要在服务启动阶段使用云调用,此时开放接口服务还未生效。
# access_token expired rid: xxxxxx
检查是否自行实现了 jscode2session 或使用了过期的 access_token,如果代码中使用了 access_token,可以去掉相关逻辑后重试。
# api unauthorized rid: xxxxxx
当前主体没有调用此API接口的权限。一般发生在资源复用的情况下,比如小程序下的环境里面,调用公众号的接口。需要添加from_appid
参数来指定你的api调用主体,不填的话就默认是环境所属小程序的主体。
具体可以参考此文档
# 访问api.weixin.qq.com接口时,报错提示502(bad gateway)等相关错误
开启「开放接口服务」时,部分接口在未配置白名单时会返回502状态码,部分框架的请求靠状态码识别,就会出现相关报错。这种情况下建议先看一下白名单配置,如果仍然不可以,则关闭「开放接口服务」,重新发布服务版本观察是否解决。
关闭「开放接口服务」后,如果想使用免鉴权,可以使用令牌形式完成。微信支付、对象存储等扩展api建议使用另外的服务来提供。出现状态码问题,一般都是框架和开放接口服务不融合,所以可以尝试修正框架使用来解决融合问题,实在不行再关闭「开放接口服务」
如果你使用 sns、jscode2session、getAccessToken类接口,自行维护access_token,则不需要开启开放接口服务,可以关闭「开放接口服务」然后重新部署一下自己的业务服务。
# errcode: 85105 not authorized / errcode: 48001 api unauthorized
缺少接口权限,检查是否使用 公众号 AppID 调用了 小程序 的接口,或使用 第三方 Open 账号等缺少小程序身份的接口调用了小程序接口。或未在 mp.weixin.qq.com 上申请对应接口的权限,或使用了第三方的 AppID 调用了缺少授权的接口。
第三方接口与小程序接口不同,请参考 第三方平台接口文档。
# errcode: 85112 cloudbase_secret not found / error_type: GatewayError / error_type: SafeLinkError
链路异常,请提交工单,并附上环境 ID,AppID 和调用时间,RequestID 等信息。
# errcode: 85113 cloudbase_token is not ready yet, please try again later
云调用服务尚未初始化(常见于第一个版本),请等待数分钟后重试。如果仍然出现错误,请提交工单。
# errcode: 85107 URL不在白名单内,请前往「微信云托管控制台-服务管理-云调用-微信令牌」配置
检查是否将后端需要调用的微信的接口(以 https://api.weixin.qq.com
开头的)以正确的格式添加到了「开放接口服务」的接口白名单内。
注意:不是填你的后端业务接口,比如请求 https://api.weixin.qq.com/wxa/msg_sec_check 接口,则需要配置 /wxa/msg_sec_check
到白名单中。
如果你使用 sns、jscode2session、getAccessToken类接口,自行维护access_token,则不需要开启开放接口服务,可以关闭「开放接口服务」然后重新部署一下自己的业务服务。
开启「开放接口服务」情况下,使用jscode2session会发生白名单配置错误,原因是:开放接口服务以调用是否传 access_token
参数判定是否走原生。因为jscode2session没有access_token
参数,所以就会发生走「开放接口服务」鉴权情况。这种情景下,可以关闭「开放接口服务」然后重新部署一下自己的业务服务。在这里还是建议不要在云托管中用code登录的形式,具体可以参看此文档。
# errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest
云调用不支持免鉴权调用非 OpenAPI 接口
# 常见问题
# 证书问题,常见表现:Error: self signed certificate / x509: certificate signed by unknown authority
由于开放接口服务需要对请求进行处理,开放接口服务推荐使用 HTTP 协议进行使用。同时,本地调试暂仅支持 HTTP 协议调试。
使用 HTTPS 证书时,需要确认容器内拥有 shell
,并已安装 ca-certificates
模块。如果使用了自带根证书的语言,可参考 开放接口服务 中的说明。
# 使用 HTTP 是否会带来安全问题?
开放接口服务在容器内进行网络交互,请求不会离开用户容器(解析到 169.254.0.x)。使用 HTTP 访问不会带来安全问题。
# 云调用请求中文入参出现乱码
query做一下 encode即可:/api/xx/xx?query=${encodeURIComponent('中文')}
# 其他注意事项
- 开启「开放接口服务」,请求中如果仍然附带access_token,不会覆盖掉,这类操作通常用于资源复用场景下,资源复用使用可参考这里。
- 使用
secret
置换的access_token
,经过开放服务不需要配置白名单,原因如第1条,不覆盖。但如果使用「开放接口服务」鉴权,则必须使用白名单,因为其仍然使用cloudbase_access_token
- 通过请求头返回
x-openapi-seqid
和解析地址为内部地址(10.0.0.x / 169.254.0.x)判断是否使用了开放接口服务。 - 部分自带根证书的运行时,需要手动设置证书,证书目录为:
/app/cert/certificate.crt
- 开放接口服务集成的其他能力(如微信支付、对象存储),应按照微信云托管提供的文档指引使用。
- 开放接口服务依赖
shell
, 如镜像内无sh/bash
将无法正常部署容器(如scratch
作为基础镜像时)。