代码表报错及排查

API unsupport the channel

错误原因

请求的 HTTP Schema 不正确。

不同 API 支持的 HTTP Schama 不同,API 提供者可以自行设置,支持仅 HTTP 访问、仅 HTTPS 访问,或者同时支持 HTTP 和 HTTPS。

API unsupport the channel:HTTP,API 只允许 HTTPS 访问,而发起 API 请求时却使用了 HTTP,则会得到此提示。

API unsupport the channel:HTTPS,API 只允许 HTTP 访问,而 API 请求却使用的是HTTPS,则会得到此提示。

解决方案

API unsupport the channel:HTTP,更换为 HTTPS,发起 API 调用。

API unsupport the channel:HTTPS,更换为 HTTP,发起 API 调用。

返回A403IS错误码

错误原因

客户端与服务端计算的签名不匹配导致的问题。

解决方案

当签名不匹配时网关会通过 HTTP Response Header 中的 X-Ca-Error-Message 返回服务端参与签名计算的 StringToSign。

StringToSign是用户请求前需要拼接的一个用于计算签名的字符串,在文档:【使用摘要签名认证方式调用API】查看详细说明。

客户端只需打印出本地自己拼接的 StringToSign 进行对比,找出哪里不同,针对性的解决,如果使用的官方提供的调用 Demo,可以到签名计算的工具类中找出计算签名前的 StringToSign 打印出来即可进行对比。

因为 HTTP Response Header 中不允许出现换行符,因此返回结果中的 StringToSign 换行符都已经被去除。请参照文档合理比对。

如果服务端 StringToSign 与客户端一致,请再检查使用的 AppKey、AppSecret 是否正确,尤其注意是否额外错误添加了空格等不容易发现的字符。

Invalid Url

错误原因

请求传入的 HTTP Method 或者 Path 不正确,或者请求指定的环境(X-Ca-Stage)不正确。

如指定调用 TEST 环境的 API,但 API 并未被发布到测试。

注意:

  • 请求时不指定环境,默认为访问 RELEASE 环境。

  • 对 API 定义有修改,需要重新发布才能生效。许多出现这个错误的都是因为修改了 Path 没发布不生效,用新 Path 请求报错。

解决办法

分别检查上述三个因素:HTTP Method、Path、环境。

  1. API 说明中要求用 POST 则不能用 GET 请求。Method 要一致。

  2. Path 要与当前运行的一致。开放 API 的用户经常修改之后不发布,导致调用失败。

  3. 指定环境要合理。在请求的 Header 里有个参数 X-Ca-Stage,取值 TEST/PRE/RELEASE,分别指向测试和线上环境,不传入该参数则默认是线上。

Unauthorized

错误原因

请求 API 时,使用的 AppKey 所属的 APP 未获得授权。无权调用 API。

解决方法

授权生效的决定因素有:APP、API、环境、已授权。

  1. 如果是开放 API 的用户自己测试,则需要在 API 网关控制台,真实创建 APP,然后根据 AppId 在 API 列表页操作授权。即开放 API 的用户自测时,其实是自己需要给自己创建的 APP 授权。

  2. 如果是购买了 API 的用户,则在 APP 详情页可以查看该 APP 已经被授权的 API,若没有要调用的 API,则自行操作授权。

  3. 如果是使用了合作伙伴的 API,没有购买行为的。则联系合作伙伴。您需要提供 AppId,然后由 API 提供者操作授权。

  4. 授权关系是有环境属性的,即 APP、API都是同一个的情况下,授权的环境和请求的环境也要相同。授权了某 API 在 A 环境的权限,但是也不能调用该 API 在 B 环境中的服务。

  5. 最重要的一点是,确认清楚是否用错了 APP,是否调用错了 API。由于 API 和 APP 较多,很多用户因为搞混了而没能调用成功。比如授权了 APP A,但是调用时候用的是 APP B,请仔细排查。