常见问题
通用问题
如何申请 API 权限?
当前开发者平台注册功能尚未上线,所有 API 权限开通均需通过邮件申请,请参考快速开始页面。
面向云平台用户授权和第三方授权有什么区别?
| 对比项 | 面向云平台用户授权 | 第三方授权 |
|---|---|---|
| 适用对象 | 业主和安装商 | 第三方服务商、第三方监控平台 |
| 账号要求 | 需有锦浪云可登录账号 | 无需锦浪云账号 |
| 认证方式 | 自定义 HMAC-SHA1 签名 | OAuth2.0 |
| 数据范围 | 自己拥有或共享的电站 | 经业主授权后的电站 |
API 调用频率限制是多少?
- 数据获取接口:10 次/秒
- 设备控制接口(control / atRead / result):2 次/秒
- 策略接口(strategySetting / currentStrategyGet):10 次/秒
- 电站月/年发电量列表:10 次/秒
如无法满足业务需求,建议使用 实时数据转发 方式。
数据更新频率是多久?
设备数据更新频率为 5 分钟。
授权相关问题
HMAC-SHA1 签名算法详解:请求头怎么算?sign error 怎么排查?
面向云平台用户授权(业主/安装商)采用自定义 HMAC-SHA1 签名,每次请求需在 Header 中携带 4 个参数:
| Header 参数 | 说明 |
|---|---|
Content-MD5 | Body 内容做 MD5 得到 128 位二进制,再 Base64 编码 |
Content-Type | 固定值 application/json;charset=UTF-8 |
Date | GMT 时间,格式 EEE, d MMM yyyy HH:mm:ss 'GMT',偏差不能超过 ±15 分钟 |
Authorization | API {apiId}:{sign} |
签名串按以下顺序用换行符 \n 拼接:
POST\n{Content-MD5}\n{Content-Type}\n{Date}\n{CanonicalizedResource}其中:
CanonicalizedResource:要访问的接口路径,如/v1/api/userStationListsign = Base64(HmacSHA1(apiSecret, 上述签名串))
签名校验工具
- 在线 HMAC 工具:https://dinochiesa.github.io/hmachash/index.html — 选择 HmacSHA1 算法,密钥填 KeySecret,输入签名串,输出做 Base64 即可得到
sign - Java 完整示例下载:Authorization.java
如何判断计算是否正确
用官方示例反推校验。以请求体 {"pageNo":1,"pageSize":10} 为例,其 Content-MD5 固定为:
kxdxk7rbAsrzSIWgEwhH4w==用自己的代码对 {"pageNo":1,"pageSize":10} 计算 MD5 + Base64:
- 结果等于
kxdxk7rbAsrzSIWgEwhH4w==,说明 Content-MD5 这一步正确; - 结果不一致,请检查是否对 Body 原始字符串(未做 URL 编码、无多余空格)取 MD5,以及是否对 128 位二进制数组做 Base64。
sign error 排查清单
如果接口返回 sign error 或签名验证失败,逐项检查:
Authorization头格式是否为API {apiId}:{sign}(注意API后有空格)- 签名字符串拼接顺序:
POST\n{Content-MD5}\n{Content-Type}\n{Date}\n{CanonicalizedResource} Content-Type签名串中的值必须与实际发送的请求头一致(application/json;charset=UTF-8)Date与服务器时间偏差不超过 ±15 分钟,格式为EEE, d MMM yyyy HH:mm:ss 'GMT'Content-MD5为请求 Body 的 MD5 值经 Base64 编码后的字符串(不是 hex 字符串)CanonicalizedResource是否为完整的接口路径(含/v1/api/或/v2/api/前缀)
完整多语言(Python / Node.js / Java)代码示例请参考 授权方式。
KeySecret 泄露了怎么办?
请立即登录锦浪云 WEB 端,进入 服务 → API 管理,重新开通或更换密钥。
Access Token 过期了怎么办?
OAuth2.0 的 Access Token 有效期为 1 天,Refresh Token 有效期为 30 天。请在 Refresh Token 过期前调用刷新接口获取新的 Token。
如果 Refresh Token 也已过期,需要重新走完整的授权流程。
授权码有效期是多久?
授权码有效期为 30 分钟,且只能使用一次。请在获取后及时换取 Access Token。
接口调用问题
调用接口返回 "时间偏差过大" 怎么办?
面向云平台用户授权接口要求请求头中的 Date 字段与服务器时间偏差不能超过 正负 15 分钟。请检查本地服务器时间是否准确,并使用 GMT 时区格式。
如何批量查询多个设备?
数据获取接口支持通过 snList(逆变器/采集器)或 idList(电站)参数批量查询。单次调用最多返回 100 台 设备数据。游标分页参数 minId(起始 ID)已上线,深翻页请使用 minId 游标(传入上一页最后一条记录的 id + 1)继续获取,详见 分页说明。
控制接口中的 `modbusAddr` 是什么?
modbusAddr(Modbus 寄存器地址)是设备控制接口中下发指令的寄存器定位标识,需配合 value(写入值)和 functionCode(功能码:03/04/06)使用。不同寄存器地址对应不同的控制功能(如功率限制、工作模式切换等)。具体寄存器地址定义请参考 设备控制 文档中的寄存器通信协议。
此外也可通过 atCommand 参数直接透传 AT 指令字符串。
关于 cid
早期基于 cid(Control ID)的控制方式将逐步废弃,建议新接入使用 modbusAddr 方案。
电站管理问题
如何新增电站并绑定逆变器?
使用电站管理接口中的 addStationBindCollector 接口新增电站并绑定采集器。如需绑定逆变器,可使用 addDevice 接口。
电站分享给第三方后如何取消?
可通过电站管理接口中的电站解绑/取消分享接口操作,或在锦浪云 App/WEB 端的电站分享管理中手动取消。
实时数据转发问题
实时数据转发支持哪些协议?
支持 RocketMQ、MQTT、HTTP 三种推送方式,可根据自身业务场景选择。
实时数据推送有频率限制吗?
实时数据转发为秒级推送,无频率限制,适合高频数据采集场景。
常见故障排查
接口返回 404 怎么处理?
404 表示请求的接口路径不存在,常见原因:
- 接口路径拼写错误:请检查路径是否与文档完全一致,注意大小写和斜杠
- 使用了错误版本的接口:不同授权方式与接口类别的路径前缀不同,请勿混用:
- 用户授权(HMAC):数据获取、电站管理为
/v1/api/,设备控制为/v2/api/ - 第三方授权(OAuth2.0):数据获取为
/api/access_data/,设备控制为/api/control_device/
- 用户授权(HMAC):数据获取、电站管理为
- Authorization 类型与接口不匹配:HMAC 签名接口不支持 Bearer Token,反之亦然
接口返回 500 怎么处理?
500 表示服务端内部错误,建议:
- 检查请求参数是否符合文档要求(必填项、数据类型、格式)
- 检查 Content-MD5 计算是否正确(需对请求 Body 做 MD5 后转 Base64)
- 稍后重试,如持续出现请联系对接团队并提供请求示例和时间戳
- 检查请求 Body 是否为有效的 JSON 格式,
Content-Type是否为application/json;charset=UTF-8
连接超时 / 请求无响应怎么处理?
- 域名解析问题:确认使用的 API 域名正确(国内:
api.ginlong.com,国际:www.soliscloud.com) - 网络访问限制:检查服务器防火墙或出站规则是否允许访问 API 域名的 443 端口
- 频率限制:数据获取接口限流 10 次/秒,控制接口限流 2 次/秒;如超限会触发限流,建议增加重试间隔
- 设置合理超时时间:建议客户端超时时间设置为 30 秒
OAuth2.0 返回 401 / token 无效怎么处理?
- 检查
Authorization头格式:Bearer {access_token},注意大写 B - Access Token 有效期为 1 天,过期后需使用 Refresh Token 重新获取
- Refresh Token 有效期为 30 天,过期后需重新走完整的授权流程
- 确认 Token 是否来自正确的授权环境(国内 / 国际域名不互通)
其他问题
支持哪些语言?
当前开发者平台文档支持 简体中文 和 英文。部分 API 接口可通过 lang 参数控制返回数据的语言。
