# 错误排查及常见问题

## 常见错误排查指引

### access_token missing rid: xxxxxx

- 检查是否开启了开放接口服务。开启后，需要发布一次新版本才能生效。
- 代码中请不要在服务启动阶段使用云调用，此时开放接口服务还未生效。

### access_token expired rid: xxxxxx

检查是否自行实现了 jscode2session 或使用了过期的 access_token，如果代码中使用了 access_token，可以去掉相关逻辑后重试。

### API unauthorized rid: xxxxxx

当前主体没有调用此 API 接口的权限。一般发生在资源复用的情况下，比如小程序下的环境里面，调用公众号的接口。需要添加`from_appid`参数来指定你的 API 调用主体，不填的话就默认是环境所属小程序的主体。

具体可以参考[此文档](../reuse/index#%E8%B5%84%E6%BA%90%E5%A4%8D%E7%94%A8%E4%B8%8B%E7%9A%84%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8)

### 访问 API.weixin.qq.com 接口时，报错提示 502（bad gateway）等相关错误

开启「开放接口服务」时，部分接口在未配置白名单时会返回 502 状态码，部分框架的请求靠状态码识别，就会出现相关报错。这种情况下建议先看一下白名单配置，如果仍然不可以，则关闭「开放接口服务」，重新发布服务版本观察是否解决。

关闭「开放接口服务」后，如果想使用免鉴权，可以使用[令牌形式](token)完成。微信支付、对象存储等扩展 API 建议使用另外的服务来提供。出现状态码问题，一般都是框架和开放接口服务不融合，所以可以尝试修正框架使用来解决融合问题，实在不行再关闭「开放接口服务」

如果你使用 [sns](/doc/service/api/webdev/access/api_snsauth.md)、[jscode2session](/miniprogram/dev/server/API/user-login/api_code2session.md)、[getAccessToken](/miniprogram/dev/server/API/mp-access-token/api_getaccesstoken.md)类接口，自行维护 access_token，则不需要开启开放接口服务，可以关闭「开放接口服务」然后重新部署一下自己的业务服务。

### errcode: 85105 not authorized / errcode: 48001 API unauthorized

缺少接口权限，检查是否使用 **公众号** AppID 调用了 **小程序** 的接口，或使用 **第三方** Open 账号等缺少小程序身份的接口调用了小程序接口。或未在 mp.weixin.qq.com 上申请对应接口的权限，或使用了第三方的 AppID 调用了缺少授权的接口。

第三方接口与小程序接口不同，请参考 [第三方平台接口文档](/doc/oplatform/openApi/)。

### 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](/miniprogram/dev/server/API/sec-center/sec-check/api_msgseccheck.md) 接口，则需要配置 `/wxa/msg_sec_check` 到白名单中。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/ccd4fd76-72bc-4b9d-99dd-defd94982e6a.png)

如果你使用 [sns](/doc/service/api/webdev/access/api_snsauth.md)、[jscode2session](/miniprogram/dev/server/API/user-login/api_code2session.md)、[getAccessToken](/miniprogram/dev/server/API/mp-access-token/api_getaccesstoken.md)类接口，自行维护 access_token，则不需要开启开放接口服务，可以关闭「开放接口服务」然后重新部署一下自己的业务服务。

开启「开放接口服务」情况下，使用[jscode2session](/miniprogram/dev/server/API/user-login/api_code2session.md)会发生白名单配置错误，原因是：开放接口服务以调用是否传 `access_token` 参数判定是否走原生。因为[jscode2session](/miniprogram/dev/server/API/user-login/api_code2session.md)没有`access_token` 参数，所以就会发生走「开放接口服务」鉴权情况。这种情景下，可以关闭「开放接口服务」然后重新部署一下自己的业务服务。在这里还是建议不要在云托管中用 code 登录的形式，具体可以参看[此文档](/minigame/dev/wxcloudrun/src/quickstart/plan/login)。

### 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` 模块。如果使用了自带根证书的语言，可参考 [开放接口服务](open) 中的说明。

### 使用 HTTP 是否会带来安全问题？

开放接口服务在容器内进行网络交互，请求不会离开用户容器（解析到 169.254.0.x）。使用 HTTP 访问不会带来安全问题。

### 云调用请求中文入参出现乱码

query 做一下 encode 即可：`/api/xx/xx?query=${encodeURIComponent('中文')}`

## 其他注意事项

1. 开启「开放接口服务」，请求中如果仍然附带 access_token，不会覆盖掉，这类操作通常用于资源复用场景下，资源复用使用可参考[这里](../reuse/index#%E8%B5%84%E6%BA%90%E5%A4%8D%E7%94%A8%E4%B8%8B%E7%9A%84%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8)。
2. 使用 `secret` 置换的 `access_token`，经过开放服务不需要配置白名单，原因如第1条，不覆盖。但如果使用「开放接口服务」鉴权，则必须使用白名单，因为其仍然使用 `cloudbase_access_token`
3. 通过请求头返回 `x-openapi-seqid` 和解析地址为内部地址（10.0.0.x / 169.254.0.x）判断是否使用了开放接口服务。
4. 部分自带根证书的运行时，需要手动设置证书，证书目录为： `/app/cert/certificate.crt`
5. 开放接口服务集成的其他能力（如[微信支付](pay)、[对象存储](/minigame/dev/wxcloudrun/src/guide/storage/index)），应按照微信云托管提供的文档指引使用。
6. 开放接口服务依赖 `shell`， 如镜像内无 `sh/bash` 将无法正常部署容器（如 `scratch` 作为基础镜像时）。
