Path: /client/free-tips
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| remoteid | 是 | 主机ID |
{
"code": 0,
"message": "SUCCESS",
"data": {
"paidinfo": "亲爱的用户,已为您智能选择最优网络路线", // 付费提示
"info": "欢迎免费使用向日葵,当前免费版带宽最高可享3Mbps", // 免费提示
"interval": 36000, // 秒,再次显示时间
"upgradeinfo": "升级不限速", // 升级提示信息(接在免费提示后面的文字)
"upgradeurl": "https://sunlogin.oray.com/personal/price", // 升级链接
"upfrequence": 3, // 升级提示显示频率,显示 n 次限速提示,才提示一次升级信息
"isshow": true, // 是否显示,false时全部提示不显示
"delay": 5, // 延时 n 秒显示
"tipstype": 0, // 0显示免费提示,1显示付费提示
"security_tips": "{'zh_CN':'重要提醒:远程过程中,你的屏幕所有内容将被对方全程观看/操作。提供本机识别码前,请确认信任对方。若你提供本机识别码和验证码,则对方无需本机确认即可远程控制,请谨慎提供验证码!','en':'Your screen contents will be fully observed during the session. With your passcode, the\\nremote peer could operate your device without authorization. PROVIDE WITH CAUTION!','zh_TW':'重要提醒:被控過程中,你的荧幕所有內容將被對方全程觀看/操作。提供本機識別碼前,請確認信任對方。若你提供本機識別碼和驗證碼,則對方無需本機確認即可遠程控制,請謹慎提供驗證碼!'}" //
},
"category": "client",
"action": "freetips"
}
Path: /passport/agree-beta
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | Bearer eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDAxNDI0MDAsImp0aSI6IjE2MzRkNWMyY2E2NzJiOTgxMWVmNjQ3Yjc2NWI0Yjk2IiwiaXNzIjoieW9vbnR5YXciLCJyb2xlIjo0LCJzZXIiOiJhdXRoLm9yYXkuY29tIiwidWlkIjoxMjUwMDUxMiwiYXBwIjoia3dxbGVpN2U5bzVTdkhHTE5vQ1cifQ.Iy63zzTdi2QqRlkt3EcJNzD-lIfLv4fmMgIKrG2q_rTIqlO4nPixCEni8hek-SJCS1khVDHEpyoL8PfcjeYKjJsdiaS_XLsoBw99eHROPKt_mu54xz-jg0hwYMc46CraZT63uQQoTI98GjIePfQyczlrY0XzhcCNLzz2lHPvntE | 是 |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "passport",
"action": "agreebeta"
}
Path: /sunlogin/device-disable
Method: POST
接口描述:
1、加密规则:
对 sn、_t为键值的数组进行ksort排序后 implode以英文逗号 , 将数组变成字符串,加上密钥后md5
如:
const SECRET_KEY = '+=huashengkui=+'; // 密钥
$sign = md5(implode(',', ksort($param)) . self::SECRET_KEY)
2、错误码
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| sn | text | 是 | 03677568852 | 开机棒\开机盒等序列号 |
| _t | text | 是 | 1619069826 | 时间 |
| sign | text | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
| _format | text | 否 | json | 支持两种返回格式 默认xml |
{
"code": 0,
"message": "SUCCESS",
"data": {},
"category": "sunlogin",
"action": "deviceaddlog"
}
Path: /adver/ad-setting
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | Bearer xxx | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| tag | text | 是 | x_remoteend | 广告位标识。x_remoteend:X远控结束 |
| type | text | 是 | 1 | 广告展示类型:1、14天后展示 2、不再显示 |
| _format | text | 否 | json | 返回类型参数 |
| recover | text | 否 | 1 | 恢复默认广告规则。1:恢复。(定义备用,目前api暂未实现对应逻辑) |
{
"code": 0,
"message": "SUCCESS",
"oray_code": "",
"data": [],
"oraycode": "",
"category": "adver",
"action": "adsetting"
}
Path: /feedback/create
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| account | text | 是 | 帐号名 | |
| contact | text | 是 | 联系人名称 | |
| content | text | 是 | 反馈内容 | |
| mobile | text | 否 | 手机号 | |
| osversion | text | 是 | 操作系统版本 | |
| osname | text | 是 | 操作系统名称 | |
| label | text | 否 | 在线教育 | 内容标签(目前只有直播的意见反馈有) |
| text | 否 | 邮箱 | ||
| field | text | 否 | 桌面直播 | 业务名称(目前只有直播的意见反馈有) |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "feedback",
"action": "create"
}
Path: /passport/check-beta
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDAxNDI0MDAsImp0aSI6IjE2MzRkNWMyY2E2NzJiOTgxMWVmNjQ3Yjc2NWI0Yjk2IiwiaXNzIjoieW9vbnR5YXciLCJyb2xlIjo0LCJzZXIiOiJhdXRoLm9yYXkuY29tIiwidWlkIjoxMjUwMDUxMiwiYXBwIjoia3dxbGVpN2U5bzVTdkhHTE5vQ1cifQ.Iy63zzTdi2QqRlkt3EcJNzD-lIfLv4fmMgIKrG2q_rTIqlO4nPixCEni8hek-SJCS1khVDHEpyoL8PfcjeYKjJsdiaS_XLsoBw99eHROPKt_mu54xz-jg0hwYMc46CraZT63uQQoTI98GjIePfQyczlrY0XzhcCNLzz2lHPvntE | 是 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"enable": 0,
"url": "https://sunlogin.oray.com",
"description": "内测描述内测描述内测描述内测描述内测描述内测描述内测描述内测描述"
},
"category": "passport",
"action": "checkbeta"
}
Path: /remote/save-process
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/json | 是 |
Body
{
"process": [
{
"role": 1,
"userid": 1231,
"fastcode": 895859625,
"osversion": "3.0.12",
"process": "test",
"appname": "测试",
"cpu": "1.7",
"memory": "1.2",
"gpu": "1.3",
"sid": 135828258445
},
{
"role": 2,
"userid": 33333,
"fastcode": 895859625,
"osversion": "3.0.12",
"process": "test",
"appname": "测试",
"cpu": "1.7",
"memory": "1.2",
"gpu": "1.3",
"sid": 135828258445
}
]
}
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>saveprocess</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
</datas>
</response>
Path: /remote/expand
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| remoteid | 否 | 907932306 | 主机id |
| authcode | 是 | 1ae15088a20f9d67da550f904a5cfae3 | md5(t + remoteid + 'sunlogin.com') |
| t | 是 | 1654764114 | 时间戳 |
| _format | 否 | json | 返回的格式,不传默认是xml |
{
"code": 0,
"message": "SUCCESS",
"stdcode": 0,
"data": {
"hw_model": "", // 控控型号
"remote_err": null // 远控方舟/控控错误提示
},
"category": "remote",
"action": "expand"
}
Path: /api/clientids
Method: GET
接口描述:
客户端新装时打开请即刻调用此接口,获取clientid.保存在配置文件上。下次登录时再判断是否有这个clientid. 有了不需要再调用
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| authkey | 是 | f5e0742d479cd98a1291dec061f6ea9c | |
| _format | 是 | json | 返回格式。默认XML |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>api</category>
<action>clientids</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="clientid">52795c2d-7995-496c-aa1f-cf40af2a6c1c</data>
</datas>
</response>
Path: /sunlogin/get-logo
Method: GET
接口描述:
{
"code": 0,
"message": "SUCCESS",
"stdcode": 0,
"data": {
"ark": {
"name": "控控/方舟",
"model": {
"A1": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "控控A1"
},
"A2": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "控控A2"
},
"A2PRO": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "控控A2Pro"
},
"Q2PRO": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "方舟Q2Pro"
}
}
},
"wakeup": {
"name": "开机棒",
"model": {
"K1": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机棒(独享版)"
},
"k2": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机棒(局域网版)"
}
}
},
"smartplug": {
"name": "插座/插线板",
"model": {
"C1": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插座C1"
},
"C1-2": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插座C1-2"
},
"C1PRO": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插座C1Pro"
},
"C2": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插座C2"
},
"P1": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插线板P1"
},
"P1PRO": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插座P1Pro(蓝牙)"
},
"P2": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插线板P2"
},
"P4": {
"url": "https://cdn.orayimg.com/sunlogin/slapi/img/hardware/C1@100.png",
"name": "开机插线板4G"
}
}
}
},
"category": "sunlogin",
"action": "getlogo"
}
Path: /remote/get-network
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| remoteid | 否 | 主机id,fastcode和remoteid传其中一个即可 | |
| fastcode | 否 | 快码,fastcode和remoteid传其中一个即可 | |
| remoteip | 是 | 被控ip |
{
"code": 0,
"message": "SUCCESS",
"data": {
"p2pserver": "华南", // p2p 服务器地区
"controlisp": "中国电信", // 主控运营商
"remoteisp": "中国移动", // 被控运营商
"service": "入门版", // 通道级别
"servicelink": "https://service.oray.com/question/10281.html?utm_campaign=sl", // 卡顿的问号跳转的链接
"upgradelink": "https://sunlogin.oray.com/price", // 升级链接
"isupgrade": 1 // 是否提示升级服务,目前精英版以下(含)会返回1
},
"category": "remote",
"action": "getnetwork"
}
Path: /sunlogin/record-wakeup-time
Method: PUT
接口描述:
1、加密规则:
对 sn、uptime、description、_t为键值的数组进行ksort(对关联数组按照键名进行升序排序)后 ,以英文逗号 , 将数组变成字符串,加上密钥后md5
php如:
const SECRET_KEY = '+=huashengkui=+'; // 密钥
ksort($param);
$sign = md5(implode(',',$param ) . self::SECRET_KEY)
2、错误码
1 => '失败'
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| sn | text | 是 | 03677568852 | 开机棒\开机盒等序列号 |
| uptime | text | 是 | 2021-04-22 13:45:17 | 激活时间 |
| _t | text | 是 | 1619069826 | time()时间 (防超时) |
| sign | text | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
| _format | text | 否 | json | 支持两种返回格式 默认xml |
{
"code": 0,
"message": "SUCCESS",
"data": {},
"category": "sunlogin",
"action": "deviceaddlog"
}
Path: /xxx
Method: GET
接口描述:
服务器给客户端发送业务消息(重连、下线),业务消息的基础为标准的Websocket二进制数据桢RFC6455。二进制数据帧的Payload即为业务消息的结构,数据为protobuf格式的二进制数据,定义如下:
enum MessageType {
SYS = 0x00;
GROUPSTATE = 0x01;
STATE = 0x03;
DATA = 0x02;
RECONN = 0x04;
CLOSE = 0x05;
}
enum CloseReason {
UNKNOWN = 0; // 未知,视为意外断开,“未知”包含了有可能不会收到Close消息的断开,如:服务器维护,网络异常,服务进程异常等等
FORCE = 1; // 表示断开为业务端发起的强制下线,客户端后续行为按业务要求处理
USER = 2; // 用户行为断开,主动下线,关闭/重启客户端等等
RECONNECT = 3; // 重连,客户端收到重连消息后,断开原连接时发送,收到Reconnect会在一个心跳周期内保持当前客户端的会话状态数据(业务上不下线,连接数为当前clientid保留),重连后可继续业务
ILLEGAL = 5; // 客户端被判断为非法行为,系统断开。如:发送不合法的消息内容,发送超长的消息,发送频率过快
}
message Message {
MessageType Type = 1; // 消息类型,见 MessageType 枚举
int64 SerialNumber = 2; // 消息的序号,可选(空为0值),如果客户端发送的信息希望得到保序的响应,在发送消息时应该生成并带上值,服务端针对该消息的回复将带上对应的序号
bytes Payload = 3; // 数据载荷
}
message ReconnectPayload {
int64 Deadline = 1;
}
// 关闭原因
message ClosePayload {
CloseReason Reason = 1;
}
// 分组状态通知
message GroupState {
int64 Limit = 1;
int64 Online = 2;
}
ClOSE 连接关闭消息
由业务发起的强行下线,紧接着服务器会按正常的协议流程发送Close控制消息并断开连接。请按业务要求规范进行后续操作(一般就是不要重连了)。
RECONNECT
由服务端发起的预定重连,会指定一个UTC时间戳的deadline(deadline很有可能是运维人员的工作时间,若超过时限连接有可能会因维护工作进行而无故断开),指定客户端必须在此时间前重连服务,如果可以应在收到消息后立即断开发起重连业务。本业务主要为服务端维护预备,服务扩(缩)容进行动态均衡调配,具体的重连时间(如果可以应立即)客户端可以自行决定,即如果当前用户进行的业务必须保持连接,可以在完成后再进行。
Path: /seats/rename
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxxxx | ||
| Content-Type | application/x-www-form-urlencoded | 是 | application/x-www-form-urlencoded |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| name | text | 是 | xxx | 坐席名称 |
| clientid | text | 是 | xxx | 客户端ID |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "seats",
"action": "rename"
}
Path: /
Method: GET
接口描述:
请求地址为客户端授权返回的wsserver
错误代码:
connection/group_limit_exceeded // 超出坐席数限制
connection/authorize_fail // 校验失败
client/client_not_registered // 客户端未授权
client/clientid_was_empty // clientid为空
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxxxxx | xxxxx 为客户端授权返回的token | |
| KAL-ClientID | 是 | xxxx | 设备ID |
Path: /seats/logout
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxxx |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| clientid | 是 | xxx | |
| pcname | 否 | 计算机名称 |
{
"code": 1504,
"message": "SEATS_LOGOUT_FAILED",
"data": {
"tips": "努力奋斗的你,真好看" // 下线提示语,为空则不显示
},
"category": "seats",
"action": "logout"
}
Path: /seat
Method: POST
接口描述:
坐席日志接口:http://sl-log.oray.net/seat
主控日志接口:https://oray.tudu.im/frame#m=view&tid=163ed84c8439ed53&page=1
1、事件名称(event)汇总:
坐席上线:seat_online
坐席下线:seat_offline
远程文件开始:file_start
远程文件结束:file_end
远程桌面观看开始:view_start
远程桌面观看结束:view_end
远程管理开始:manage_start
远程管理结束: manage_end
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| event | text | 是 | 事件名称 | |
| clientid | text | 否 | 52795c2d-7995-496c-aa1f-cf40af2a6c1c | 客户端ID |
| userid | text | 是 | 904448 | 用户ID |
| ctrl_system | text | 否 | Windows | 主控端系统 |
| ctrl_version | text | 否 | 10.2.3.456 | 主控端版本 |
| seat_name | text | 否 | 采购部小黑 | 坐席名称 |
| fastcode | text | 否 | 123456789 | 9位快访码 |
| memo | text | 否 | 远控信息 | |
| seatid | text | 否 | 坐席ID | |
| pcname | text | 否 | 计算机名称 |
{
"code": 100,
"channel": "seat",
"message": "success"
}
Path: /seats/authorization
Method: GET
接口描述:
客户端坐席上线都必须先经过此接口获取授权,授权后返回相关信息,客户端通过websocket连接在线服务
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer eyJ0eXAiOiJqd3QiLCJhbGciOiJSUzUxMiIsImtleWlkIjoiYzc3ZDcxMTdhM2ZiZmVmYjYzNTQ3ZjUzOTcxOTdkYTEifQ.eyJleHAiOjE1ODMzMTEwMDAsImlzYSI6MTU4MzMxMDk0MCwiaXNzIjoiUVJkMDkydzJHRUZjU0o2OW1Dd3IiLCJyb2xlIjo3LCJ1aWQiOiIyNCIsIm9yaSI6Il9fU1lTVEVNIn0 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| clientid | 是 | f4e2200f-e69f-4ae0-8524-e590f82e1ed1 | 设备ID |
| name | 是 | xxx | 坐席名称,60个字节以内 |
| mac | 是 | mac地址 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"token": "rquiFyKpg7ehRrVFcOr3AdYlxFHbZZmR", // 客户端ws连接时用的token
"wsserver": "http://112.124.5.13:8080", // 客户端ws连接地址
"tips": "美好的工作开始,又是元气满满的一天", // 上线提示语,为空则不显示
"retry_interval": 60 // 重连长连接服务的间隔,单位秒
},
"category": "seats",
"action": "authorization"
}
Path: /seats/status
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxxxx |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| clientid | 是 | f4e2200f-e69f-4ae0-8524-e590f82e1ed1 |
{
"code": 0,
"message": "SUCCESS",
"data": {
//坐席名称
"name": "liyt",
//客户端是否在线
"isonline": 0,
// 在线数量
"onlinenum": 0,
// 坐席数量(未购买服务即返回0)
"seatsnum": 5,
// 可创建ID数,默认与购买数量一致
"seatid_amount": 5,
//登录方式 1:账号密码 2:坐席ID
"logintype":1,
// 未购买坐席时广告语
"freetext": "你是否从事远程支持?是否经常远程协助不同的用户?我们来帮你实现更快的远程支持工作",
// 未购买坐席时购买链接
"freeurl": "https://store.oeay.com/buy/?productid=xxx",
// 已购买坐席,未上线时广告语
"paidofflinetext": "我是坐席未上线时的广告语",
// 已购买坐席,上后时广告语(目前没有,忽略)
"paidonlinetext": "我是坐席上线后的广告语",
// 已购买坐席后,增加坐席链接
"paidurl": "https://store.oeay.com/buy/?productid=xxx&action=upgrade",
// 坐席账号气泡
"other_logintype_tips": "向日葵领航 · 坐席支持通过坐席ID方式登录上线,实现坐席员工区分管理,数据独立",
// 坐席账号气泡跳链
"other_logintype_url": "https://store.oeay.com/buy/?productid=xxx&action=upgrade"
},
"category": "seats",
"action": "status"
}
Path: /nil
Method: GET
接口描述:
| 错误代码 | 错误信息 |
|---|---|
| 1501 | 客户端授权失败 |
| 1502 | 客户端ID为空 |
| 1503 | 创建客户端分组失败 |
| 1504 | 坐席下线失败 |
| 1505 | 可用坐席数不足 |
| 1506 | 更新坐席名称失败 |
| 1507 | 坐席ID或密码错误 |
| 1508 | 坐席不存在 |
| 1509 | 删除星标快码失败 |
| 1510 | 创建星标快码失败 |
| 1511 | 星标数量已满 |
| 1512 | 更新星标备注失败 |
| 1513 | 限制mac地址登录 |
| 1514 | 修改密码时,原坐席密码错误 |
| 1515 | 修改密码失败 |
| 1516 | 创建坐席远程记录失败 |
| 1517 | 坐席已在别处登录 |
| 1518 | 坐席服务过期/服务被删除 |
| 1519 | 坐席已掉线(当前客户端没连上长连接) |
Path: /passport/send-verify-code
Method: GET
接口描述:
code:
1015 邮箱已注册
1520 该手机号已绑定多个坐席
1521 该手机号未绑定坐席
1522 当前登录方式为帐号登录,坐席ID和手机号不能登录
6001 xx秒后重试
6003 发送验证码失败
1011 邮箱格式错误
1012 邮箱为空
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| action | 是 | newclient | newclient// 新设备登录提醒,seat // 坐席登录, register // 注册,seat_mobile_login // 坐席通过手机登录, oray-login // 免密登录,console-mobile //兼容平台短信验证 |
| method | 是 | mobile | mobile/email |
| target | 是 | 10086 | 电话号码或者邮箱 |
| account | 否 | oraytest011 | 帐号名 |
| codetype | 是 | sms-短信 voice-语音 默认sms | |
| checksum | 是 | 验签 | |
| t | 是 | 时间戳 |
1、成功发送验证码
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>sendverifycode</action>
<code>0</code>
<message>SUCCESS</message>
<datas/>
</response>
2、今天获取验证码次数已上限
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>sendverifycode</action>
<code>6001</code>
<message>MOBILE_SEND_OUT_LIMIT</message>
<datas/>
</response>
3、系统错误、发送验证码失败
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>sendverifycode</action>
<code>6003</code>
<message>SEND_VERIFYCODE_FAILED_1</message>
<datas/>
</response>
4、1分钟内只能发送1次验证码
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>sendverifycode</action>
<code>6002</code>
<message>SEND_CODE_FAILED</message>
<datas/>
</response>
Path: /passport/register-account
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| account | text | 是 | ||
| password | text | 是 | ||
| checksum | text | 是 | md5() | |
| version | text | 是 | ||
| client | text | 是 | ||
| mobile | text | 否 | ||
| clientid | text | 否 | 52795c2d-7995-496c-aa1f-cf40af2a6c1c | /api/clientids下发的clientid |
| regtype | text | 否 | 注册类型:0帐号注册,1手机注册,2邮箱注册,3无验证码帐号注册,4邮箱+验证码注册 | |
| text | 否 | 邮箱 |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>registeraccount</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="userid">23638034</data>
</datas>
</response>
<a id=登录接口/passport/auth>
Path: /passport/auth
Method: POST
接口描述:
此接口POST/GET方式都兼容;
历史原因以前传递参数的时候传递了clientid。如果需要提供这个最新格式的clientid,又不想改到原来的代码,可以传递头部参数KAL-ClientID。
有头部参数KAL-ClientID,将会以此为准。
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| KAL-ClientID | fbe975a5-eb6d-4fb3-9c13-51f9f9a8f894 | 是 | fbe975a5-eb6d-4fb3-9c13-51f9f9a8f894 | 客户端ID |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| account | text | 是 | ||
| password | text | 是 | ||
| clientid | text | 否 | fbe975a5-eb6d-4fb3-9c13-51f9f9a8f894 |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>auth</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="userid">23168745</data>
<datatype="field"name="sysserviceid">0</data>
<datatype="field"name="servicename">免费级</data>
<datatype="field"name="amount">-1</data>
<datatype="field"name="price">-1</data>
<datatype="field"name="remotecount">0</data>
<datatype="field"name="recentcount">0</data>
<datatype="field"name="slapi">slapi.oray.net</data>
<datatype="field"name="skin">default</data>
<datatype="field"name="isgameservice">0</data>
<datatype="field"name="sysexpiredate"/>
<datatype="field"name="ismonitor">0</data>
<datatype="field"name="used">0</data>
<datatype="field"name="pubsvr"/>
<datatype="field"name="tracksrv"/>
<datatype="field"name="limit">5</data>
<datatype="field"name="retryafter">10</data>
<datatype="field"name="isnewclient">1</data> // 1是新设备。0不是新设备
<datatype="field"name="mobile">18217440106</data>// 返回的电话号码
<datatype="field"name="email">871321173@qq.com</data>// 返回的邮箱
</datas>
</response>
<a id=登录接口/passport/me>
Path: /passport/me
Method: GET
接口描述:
历史原因以前传递参数的时候传递了clientid。如果需要提供这个最新格式的clientid,又不想改到原来的代码,可以传递头部参数KAL-ClientID。
有头部参数KAL-ClientID,将会以此为准。
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| KAL-ClientID | 是 | fbe975a5-eb6d-4fb3-9c13-51f9f9a8f894 | 客户端ID |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| account | 是 | oray.com | |
| password | 是 | 123123 | |
| clientid | 是 | fbe975a5-eb6d-4fb3-9c13-51f9f9a8f894 |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>me</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="userid">23168745</data>
<datatype="field"name="nick"/>
<datatype="field"name="sysserviceid">0</data>
<datatype="field"name="servicename">免费级</data>
<datatype="field"name="amount">-1</data>
<datatype="field"name="price">-1</data>
<datatype="field"name="remotecount">0</data>
<datatype="field"name="recentcount">0</data>
<datatype="field"name="slapi">slapi.oray.net</data>
<datatype="field"name="skin">default</data>
<datatype="field"name="isgameservice">0</data>
<datatype="field"name="sysexpiredate"/>
<datatype="field"name="ismonitor">0</data>
<datatype="field"name="used">0</data>
<datatype="field"name="pubsvr"/>
<datatype="field"name="tracksrv"/>
<datatype="field"name="account">vp-youuserna-305</data>
<datatype="field"name="isabroaduser">0</data>
<datatype="field"name="mobile">18217440106</data>
<datatype="field"name="email">871321173@qq.com</data>
<datatype="field"name="isnewclient">0</data> // 1新设备,0不是新设备
</datas>
</response>
Path: /passport/verify
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| method | 是 | mobile | |
| value | 是 | 123456 | 验证码 |
| account | 是 | oray | oray账号 |
| clientid | 否 | 52795c2d-7995-496c-aa1f-cf40af2a6c1c | clientid |
| action | 是 | newclient | newclient // 新设备,seat // 坐席登录,register // 注册,console-mobile //兼容平台短信验证 |
1、验证成功:
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>verify</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="token">grmT8HHmNZC2DQfm1wE3TsvPcPGfarPq</data>
<datatype="field"name="timeout">1583808777</data>
</datas>
</response>
2、验证失败
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>passport</category>
<action>verify</action>
<code>6014</code>
<message>INVALID_VERIFY_CODE</message>
<datas/>
</response>
Path: /smart-plug/wifi
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| sn | text | 是 | ||
| ssid | text | 是 | ||
| password | text | 是 | ||
| proto | text | 是 | 从这开始 pdu特有 | |
| ipv4 | text | 是 | ||
| netmask | text | 是 | ||
| gateway | text | 是 | ||
| dns | text | 是 |
Path: /smart-plug/delete-timer
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| inder | 是 | 1 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
| timer | 是 | 2020-07-23 15:20:25 |
Path: /smart-plug/upgrade-status
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 |
Path: /smart-plug/countdown
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 12 | |
| action | 是 | off | |
| seconds | 是 | 1 | |
| index | 是 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
<a id=插座/排插新增日志>
Path: /smartplug
Method: GET
接口描述:
请求:sl-log.oray.net/smartplug
host: 192.168.30.227 sl-log.oray.net
-----为了兼容排插,本次增加type和index参数------
-----以下参数已经在插座日志已使用。不再赘述-------
参数:
sn
userid 用户ID
account 用户名
action 事件(详细解释在下面)
remoteid 主机ID (可选,绑定主机失败时传)
remoteip 主机IP (可选,绑定主机失败时传)
upgrade_romversion 升级的固件新版本 (可选,升级固件失败时传)
romversion 当前固件版本 (可选,升级固件失败、插座连接不上网络时传)
remotename 主机名称 (可选,绑定主机失败时传)
reason 错误原因(中文)
code 错误代码(网站接口返回的代码,reason和code两个参数必须传一个)
url 主控端请求网站的接口地址
action:
ADD_F // 添加插座失败
BIND_F // 绑定主机失败
UPROM_F // 升级固件失败
CONNECT_F // 插座连接不上网络
ENTER_F // 无法进入插座主界面
POWERON_F // 开启插座失败
SHUTDOWN_F // 关闭插座失败
COUNT_F // 倒计时失败
SETTIMER_F // 定时失败
RENAME_F // 插座重命名失败
GETTIMER_F // 获取定时失败
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| type | 否 | 10 | type// 10 - 代表排插;不传就是插座 |
| index | 否 | 0 | 排插插孔号;0-3;插座不传 |
{
"code": 100,
"channel": "smartplug",
"message": "success"
}
Path: /smart-plug/update
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| time | 是 | 1626746872 | |
| mac | 是 | 84:f3:eb:cf:5f:ab | |
| key | 是 | a4f92646520f74a25c09324f6f166c2a | |
| version | 是 | 1.0.1 |
Path: /smart-plug/upgrade
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authoorization | 是 | Bearer xxx |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 插座(排插)sn | |
| _format | 否 | json | 返回格式,默认返回xml |
| version | 否 | 当前版本,接口会rpc请求插座查当前版本,查不到的话,会用当前这参数 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"isupgrade": 1, // 是否能升级
"latest": "1.2.0", // 最新版本号
"model": "C1", // 插座/排插型号
"downloadurl": "http://download-backend.oray.com/sunlogin/smartplug/1.2.0/", // 升级地址
"isforce": 0, // 是否强制升级
"description": "描述", // 升级版本描述
"md5": "r348rfu3498ff" // 包的md5值
},
"category": "smartplug",
"action": "upgrade"
}
Path: /smart-plug/set-timer
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| inder | 是 | 1 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
| timer | 是 | 2020-07-23 15:20:25 |
Path: /smart-plug/delete-countdown
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 | |
| index | 是 | 1 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
Path: /smart-plug/add
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| sn | text | 是 | sn码 | |
| name | text | 是 | 备注 | |
| description | text | 否 | 描述 | |
| _format | text | 否 | json | 返回数据格式,默认xml |
{
"code": 0,
"message": "",
"data": {
"server": "",
"port": "",
"model": "P5",
"password": "", // mqtt协议所需密码,aes-cbc加密,key为sn,前16位字符,不够位右边补6,iv为服务代码userid,前16位,不够位右边补6
}
}
Path: /smart-plug/bind
Method: POST
接口描述:
兼容POST和GET方式
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| remoteid | text | 是 | 主机ID | |
| sn | text | 是 | 硬件SN | |
| index | text | 是 | 插孔序列号0-3 // 插座不需要传 |
Path: /smart-plug/get-countdown
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 | |
| index | 是 | 1 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
<a id=获取插座/排插开关日志>
Path: /smart-plug/get-status-logs
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| page | 是 | 1 | |
| pagesize | 是 | 20 |
Path: /smart-plug/get-agree-protocol
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| model | 否 | P1 | 排插 // P1 - 排插。不传就是普通插座 |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>smartplug</category>
<action>getagreeprotocol</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<datatype="field"name="isagree">1</data>
</datas>
</response>
// json
{
"code": 0,
"message": "SUCCESS",
"data":{
"isagree": 1
},
"category": "smartplug",
"action": "getagreeprotocol"
}
Path: /smart-plug/status
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 |
Path: /smart-plug/list
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 | |
| index | 是 | 1 | 插孔序列号,此字段命名为了与RPC接口定义一致 |
Path: /smart-plug/version
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | Bearer eyJhbGciOiJIUzUxMiIsInIiOjI4Nzk5OTE1NTIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzOTc2MDcsImlzYSI6MTYyMTM5NTgwNywiaXNzIjoib3JheXRlc3QwMTIiLCJyb2xlIjo0LCJ1aWQiOjEyNTY0MTIyLCJzZXIiOiJhdXRoLXdlYi5vcmF5Lm5ldCIsIm5zIjoidXNlciJ9.UwJQ67s80M10QEl-MJ_tojvd8S9L8GrmjvYQuvV1DaeYkSqpHbBGzSvRtytwP9dOScuiub2xxWvp8KD2mOHM8w | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| sn | text | 是 | 000000888888 |
Path: /smart-plug/get-electric
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| dete | 否 | 2021-07-20 17:28:40 | |
| time | 是 | 1629410400 | 所在地0点的时间戳 |
Path: /smart-plug/unbind
Method: POST
接口描述:
兼容POST与GET方式
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| remoteid | text | 是 | 主机ID | |
| sn | text | 是 | SN | |
| index | text | 是 | 插孔序列号 |
Path: /smart-plug/set-agree-protocol
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| model | 否 | P1 | 排插 // P1 - 排插。不传就是普通插座 |
| isagree | 是 | 1 |
Path: /smart-plug/set-delay
Method: GET
接口描述:
兼容GET/POST方式
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 912345678813 | 插座SN |
| delay | 是 | 120 | 延迟时间 // 请传秒 |
| index | 否 | 0 | 插孔号 |
Path: /smart-plug/set-led
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 | |
| status | 是 | 1 |
Path: /smart-plug/set-socket-memo
Method: GET
接口描述:
备注不允许超过20个字符。一个中文只算一个字符。
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| memo | 是 | S1插孔备注 | |
| index | 是 | 0 | S1-S4 |
| sn | 是 | 987654321 | 插线板SN |
<?xml version="1.0" encoding="utf-8" ?>
<response>
<category>smartplug</category>
<action>setsocketmemo</action>
<code>3007</code>
<message>Memo too long</message>
<datas/>
</response>
// JSON
{
"code": 3007,
"message": "Memo too long",
"data":[],
"category": "smartplug",
"action": "setsocketmemo"
}
Path: /smart-plug/set-outage-memory
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| remoteid | 是 | 1 | |
| status | 是 | 1 |
Path: /smart-plug/rename
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 000000888888 | |
| name | 是 | test | |
| description | 是 | 别管我 |
Path: /notify/pub-remote-info
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| userid | 是 | 用户id | |
| orgname | 是 | 原主机名 | |
| name | 是 | 新主机名 | |
| orgdesc | 是 | 原备注 | |
| desc | 是 | 新备注 | |
| remoteid | 是 | 主机id |
OK
Path: /notify/pub-remote-state
Method: GET
接口描述:
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| userid | 是 | 用户id | |
| name | 是 | 主机名 | |
| state | 是 | 状态,1上线,0下线 | |
| remoteid | 是 | 主机id |
OK
Path: /notify/authorization
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | Bearer xxx | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| clientid | 是 |
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>notify</category>
<action>authorization</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<data type="field" name="token">igL77XomIa3bp0GQCu7YKeIgJWEg2HeA</data>
<data type="field" name="wsserver">wss://kal.oray.com/</data>
</datas>
</response>
Path: /seats/alter-psw
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxx | ||
| Content-Type | application/x-www-form-urlencoded | 是 | application/x-www-form-urlencoded |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| prepassword | text | 是 | 4297f44b13955235245b2497399d7a93 | 旧密码(md5后的32位小写) |
| password | text | 是 | e10adc3949ba59abbe56e057f20f883e | 新密码(md5后的32位小写) |
Path: /seats/history-create
Method: POST
接口描述:
event取值:
坐席上线:login
坐席下线:logout
远程文件:file
远程桌面观看:view
远程管理:manage
远程控制:remote
手工加远程记录:note
cmd:cmd/cmd2
ssh:ssh
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxx | ||
| Content-Type | application/x-www-form-urlencoded | 是 | application/x-www-form-urlencoded |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| fastcode | text | 否 | 168520365 | 识别码 |
| event | text | 是 | view | 事件名 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"id": 8 // 远程记录id,更新远程记录时需要带上
},
"category": "seats",
"action": "historycreate"
}
Path: /seats/like-delete
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | 是 | Bearer xxx |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| fastcode | text | 是 | 快访码 |
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>seats</category>
<action>likecreate</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
</datas>
</response>
Path: /seats/token
Method: GET
接口描述:
返回参数解析:
retry_interval 长连接重连间隔,单位秒
wsserver 长连接服务器
kal_token 长连接token
account 帐号名
seatname 坐席名
错误码:
1505 可用坐席数不足(剩余坐席上线数是否<购买的坐席数)
1520 该手机号已绑定多个坐席
1521 该手机号未绑定坐席
1522 当前登录方式为帐号登录,坐席ID和手机号不能登录
6014 验证码错误
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| seatid | 否 | 12500512:7776 | 坐席ID登录时传 |
| password | 否 | e10adc3949ba59abbe56e057f20f883e | 坐席密码,md5后 |
| mac | 是 | 00:00:00:00:00:00 | mac |
| lang | 是 | zh_CN | 语言 |
| clientid | 是 | 1bdd00c0-15c1-4d3d-8018-7f23ebfc0174 | |
| mobile | 否 | 13500001111 | 手机号登录坐席时传 |
| code | 否 | 123456 | 手机号登录坐席时传 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"seatid": "supp123456",
"mobile": "13590640943",
"account": "yoontyaw",
"ismobileverify_login": 0,
"inspire_tips": "美好的工作开始,又是元气满满的一天",
"userid": 12500512,
"seatname": "好", // 如为空则为首次登录
"access_token": "eyJhbGciOiJIUzUxMiIsInIiOjI2OTU5NjE0MTYsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDM3ODIyOTUsImlzYSI6MTYwMzc4MTM5NSwiaXNzIjoiMTI1MDA1MTI6NzkzOSIsInJvbGUiOjMsInVpZCI6MTI1MDA1MTIsInNlciI6ImF1dGgtc2wub3JheS5jb20iLCJucyI6InN1bmxvZ2luX3NlYXQifQ.AdYwWiuU4K8mGdOhng4WuoiMNJGcewVrHJgA9KAr3qbG3lQWkksY-Srr50c46K37YvpaEZY7uB1wgDX2WSAVtA",
"refresh_token": "X5fDE1+/UBMAAAAUZ1h1ZldIY2JkajJ6QTJReUh2UUE1NUVZMHBLazBiRXBtNWQ4UGxUNU13PT0=",
"refresh_expires": 1606373395,
"refresh_ttl": 2592000,
"retry_interval": 60,
"wsserver": "ws://kal.sunlogin.oray.com/",
"kal_token": "tbSeFI4nmoMt97Isj77XEVpVMTpzxxYd",
"default_online": true // true默认上线坐席,false不上线
},
"category": "seats",
"action": "token"
}
<a id=新增星标快访码/修改备注>
Path: /seats/like-create
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | 是 | Bearer xxx |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| fastcode | text | 是 | 快访码 | |
| memo | text | 是 | 备注 |
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>seats</category>
<action>likecreate</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
</datas>
</response>
Path: /seats/like-list
Method: GET
接口描述:
os:
windows
android
linux
mac
ios
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxxx |
{
"code": 0,
"message": "SUCCESS",
"data": [
{
"fastcode": "123456789",
"memo": null,
"os": "windows"
}
],
"category": "seats",
"action": "likelist"
}
Path: /seats/history-update
Method: POST
接口描述:
event取值:
填入结束时间:end
填入备注:writememo
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxx | ||
| Content-Type | application/x-www-form-urlencoded | 是 | application/x-www-form-urlencoded |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| id | text | 是 | 1 | 远程记录id,创建远程记录时会返回 |
| memo | text | 否 | 远程记录备注 | |
| event | text | 是 | view | 操作标识。标识更新记录的结束时间,或写备注 |
| fastcode | text | 是 | 识别码 |
Path: /seats/auth-account
Method: GET
接口描述:
错误码:
1518 坐席服务过期
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| clientid | 是 | 4ba37eb5-af6a-4eec-aae6-0de73a7e2434 | 设备id |
| mac | 是 | mac |
{
"code": 0,
"message": "SUCCESS",
"data": {
"access_token": "eyJhbGciOiJIUzUxMiIsInIiOjEwNTk0MjYzNSwidHlwIjoiSldUIn0.eyJleHAiOjE2MTgyMzM5NjIsImlzYSI6MTYxODIzMzA2MiwiaXNzIjoiMTI1MDA1MTI6Mzc2OCIsInJvbGUiOjMsInVpZCI6MTI1MDA1MTIsInNlciI6ImF1dGgtc2wub3JheS5jb20iLCJucyI6InN1bmxvZ2luX3NlYXQifQ.Ev4E_gwqFgOt6aJCLa7bbbYKfTZks2XbYGu7357WKcuKaubzNnHo6NDoc_Y91Jah0wRs6lSvyb8CPFaupSwnCQ",
"refresh_token": "YHRG5mCb0+YAAAAUZ1h1ZldIY2JkajJ6QTJReUh2UUFrMUpzbXRLUTNuaVlFNjBxKzVJUU1nPT0=",
"refresh_expires": 1620825062,
"refresh_ttl": 2592000
},
"category": "seats",
"action": "authaccount"
}
Path: /seats/history-list
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxx |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| fastcode | 是 | 123456789 | 被控的快码 |
{
"code": 0,
"message": "SUCCESS",
"data": [
{
"starttime": "1602664520",
"endtime": "1602664524",
"event": "remote",
"memo": "123456"
},
{
"starttime": "1602664132",
"endtime": "1602664136",
"event": "remote",
"memo": "啥也没干,哈哈哈哈"
},
],
"category": "seats",
"action": "historylist"
}
Path: /seats/verify
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | application/x-www-form-urlencoded |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| seatid | text | 是 | 12500512:7939 | 坐席ID |
| password | text | 是 | e10adc3949ba59abbe56e057f20f8831 | md5后的密码 |
Path: /live/start
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| code | text | 是 | 27d2-0bd4-e126-72ee | 授权码(即客户端配置里的license) |
| auth | text | 是 | 授权码的密码(即客户端配置里的licensepsw) | |
| psw | text | 是 | 4297f44b13955235245b2497399d7a93 | 直播间密码,md5加密 |
| duration | text | 否 | 直播时长 | |
| auth_key | text | 是 | md5('SUNLOGIN_LIVE'+授权码+timestamp) | |
| timestamp | text | 是 | 时间戳 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"push_domain": "push.sunlogin.oray.com", // 推流域名
"appname": "live", // 应用名
"share_url": "https://sunlogin.oray.com/live/xxx", // 分享链接
"streamname": "d482d134fb56c963142a5373d0b4512d", // 流名称
"stream_ts": 1621397203 // 流时间戳,用于鉴权串
},
"category": "live",
"action": "start"
}
Path: /live/end
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| code | text | 是 | 27d2-0bd4-e126-72ee | 授权码 |
| auth | text | 是 | 授权码的密码 | |
| timestamp | text | 是 | 时间戳 | |
| auth_key | text | 是 | md5('SUNLOGIN_LIVE'+授权码+timestamp) | |
| streamname | text | 是 | 流名称 |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "live",
"action": "end"
}
Path: /rongyun/getTargetid
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/json | 是 |
Body
{
"device_uniq": "dhfduikwskkd" // [仅被控端app] 绑定设备id和快码关系
"fastcode": "122222" // [主控端&被控端传递]:快码用于获取被控slave_chatid
"master_uid": "33333" //[仅主控端传递]: 网站uid,用户获取master_chatid
}
{
"code": 200,
"slave_fastcode":"912345678", // 被控端快码
"slave_chatid": "b59c67bf196a4758191e42f76670ceba", // 被控端融云id
"master_chatid": "33333", //主控端融云id,主控端用于传递给js, APP端,不使用该字段
"device_uniq":"dhfduikwskkd" // 设备id
}
Path: /rongyun/getToken
Method: POST
接口描述:
application/json
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/json | 是 |
Body
{
"chatid": "111111", // win客户端传向日葵userid,app传 '获取targetid接口' 返回的slave_chatid
"name": "122222", //名称
"portraitUri": ""//头像url
}
{
"code": 200,
"chatid": "1111",
"token": "ccisQd9DZ9eYSeh8XCV167/FmlIYp5sJ3qTo2RZK1Oo=@9njf.cn.rongnav.com;9njf.cn.rongcfg.com"
}
Path: /keyboard/list
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| tab | text | 是 | 1 | tab分类 1,最近使用 2,官方推荐 3,网友分享 4,我的键盘 |
| keyboardname | text | 否 | 键盘名称模糊搜索 | |
| type | text | 否 | 键盘分类 0,角色扮演 1, 动作, 2,射击 3,策略 4,赛车, 5,其他 | |
| iscollect | text | 否 | tab为4时, 传参1, 返回我的键盘-收藏 | |
| sort | text | 否 | likes, used, collect, newest 点赞,使用,收藏,最新 倒序 | |
| page | text | 否 | 页码 默认1 | |
| pagesize | text | 否 | 页条数 默认10条 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"page": 1, //当前页码
"totalpage": 1, //总页数
"totallist": 1, //总数据条数
"list": [
{
"cloudid": "11_0", //键盘云id,唯一
"keyboardid": 8, //键盘id
"userid": 12564199, //用户id
"typeid": 1, //分类id
"name": "lol", //键盘名称
"img": "test.png", //键位绘制图
"likes": 0, //点赞数
"collect": 0, //收藏数
"used": 0, //使用数
"isofficial": 0, //是否官方 0,否 1,是
"equipment": 1, //适用设备 1,phone 2,pad
"isshare": 1, //是否分享 0,否 1,是
"isused": 0, //是否使用过 0,否 1,是
"islike": 0, //是否点赞 0,否 1,是
"iscollect": 0, //是否收藏 0,否 1,是
"iscancel": 1, //分享是否已取消
"isself": 1, //是否自己创建 0,否 1,是
"createtime": "2021-04-08 11:05:02",
"createtime_timestamp": 1617851102
}
]
},
"category": "keyboard",
"action": "list"
}
Path: /keyboard/create
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| keyboardname | text | 是 | 键盘名称 | |
| config | text | 是 | 键位配置 | |
| type | text | 是 | 键盘类型 | |
| equipment | text | 是 | 设备 1,phone 2,pad | |
| isshare | text | 否 | 0,否 1,是 | |
| issync | text | 否 | 1 | 是否云同步 1:是 |
// code:1004 参数缺少
//code:1002 参数有误
{
"code": 0,
"message": "SUCCESS",
"data": {
"cloudid": "11_0", //键盘云id
"uploadurl": null //图片上传url
},
"category": "keyboard",
"action": "create"
}
Path: /keyboard/delete
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| cloudid | text | 是 | 键盘云id |
Path: /keyboard/setting-lusc
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| cloudid | text | 是 | 键盘云id | |
| setting | text | 是 | 操作类型 1,点赞 2,使用 3,分享 4,收藏 | |
| iscancel | text | 否 | 1 | 是否取消 1,是 收藏&分享&使用可传参 |
Path: /keyboard/sensitive-filter
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| keyboardname | text | 是 | 键盘名称 |
//存在敏感词
{
"code": 7102,
"message": "SENSITIVE WORDS [淫]",
"data": [],
"category": "keyboard",
"action": "sensitivefilter"
}
Path: /keyboard/update
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| cloudid | text | 是 | 键盘云id | |
| keyboardname | text | 否 | 键盘名称 | |
| type | text | 否 | 键盘分类 0,角色扮演 1, 动作, 2,射击 3,策略 4,赛车, 5,其他 | |
| config | text | 否 | 配置 | |
| equipment | text | 否 | 适用设备 1,phone 2,pad | |
| isshare | text | 否 | 是否分享 0,否 1,是 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"cloudid": "11_0", //键盘云id
"uploadurl": null //图片上传url
},
"category": "keyboard",
"action": "update"
}
Path: /keyboard/info
Method: POST
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| cloudid | text | 是 | 键盘云id | |
| isuse | text | 否 | 1 | 是否使用 0,否 1,是 |
{
"code": 0,
"message": "SUCCESS",
"data": {
//键盘云id
"cloudid": "11_0",
//键盘id
"keyboardid": 11,
//用户id
"userid": 12564122,
//分类id
"typeid": 1,
//键盘名称
"name": "LOL",
//键盘配置
"config": "",
//键位绘制图
"img": "",
//点赞数
"likes": 0,
//收藏数
"collect": 0,
//使用数
"used": 0,
//是否官方
"isofficial": 0,
//适用设备 1,phone 2,pad
"equipment": 1,
//是否分享 0,否 1,是
"isshare": 1,
//是否点赞 0,否 1,是
"islikd": 1,
//是否使用 0,否 1,是
"isused": 1,
//是否收藏 0,否 1,是
"iscollect": 1,
//是否取消分享 0,否 1,是
"iscancel": 1,
//是否自己创建 0,否 1,是
"isdelete": 1,
//键盘创建时间
"createtime": "2021-04-08 13:29:37",
//键盘创建时间戳
"createtime_timestamp": 1617859777
},
"category": "keyboard",
"action": "info"
}
Path: /keyborad/nil
Method: GET
接口描述:
| 错误代码 | 错误信息 | 备注 |
|---|---|---|
| 7101 | 键盘不存在 | |
| 7102 | 键盘名称有误/存在敏感词 | |
| 7111 | 已点赞 | |
| 7112 | 不允许收藏自建键盘 | |
| 7113 | 已收藏 | |
| 7114 | 已分享 | |
| 7115 | 收藏记录不存在 | |
| 7116 | 已取消分享 | |
| 7117 | 未分享 无法点赞/收藏/使用 | |
| 7118 | cloud_id有误 | |
| 7119 | 使用记录不存在 | |
| 7120 | 自建键盘名字重复 | |
Path: /resource/change
Method: POST
接口描述:
错误码:
1004 缺少必要参数
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Body
| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| code | text | 是 | 授权码 | |
| auth | text | 是 | 授权码密码 | |
| os | text | 是 | 系统 | |
| cpu | text | 是 | cpu(可能存在多个,json格式提交) | |
| mainboard | text | 是 | 主板(可能存在多个,json格式提交) | |
| memory_size | text | 是 | 102400MB | 内存大小 |
| keyboard | text | 是 | 键盘(可能存在多个,json格式提交) | |
| videocard | text | 是 | 显卡(可能存在多个,json格式提交) | |
| networkcard | text | 是 | 网卡(可能存在多个,json格式提交) | |
| monitor | text | 是 | 显示器(可能存在多个,json格式提交) | |
| maindisk | text | 是 | 硬盘信息(可能存在多个,json格式提交) | |
| mac | text | 是 | mac | |
| os_type | text | 是 | 系统类型 windows,android,linux,macOS |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "resource",
"action": "change"
}
Path: /sunlogin/device-box-add
Method: POST
接口描述:
1、加密规则:
对 sn、user_id、name、_t为键值的数组进行ksort(对关联数组按照键名进行升序排序)后 ,以英文逗号 , 将数组变成字符串,加上密钥后md5
php如:
const SECRET_KEY = '+=kaijihezi-add=+'; // 密钥
ksort($param);
$sign = md5(implode(',',$param ) . self::SECRET_KEY)
2、错误码
1 => '失败'
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
...
注(其余可以看message,code=>message)
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 03677568852 | 开机盒序列号 |
| user_id | 是 | 1 | 用户id |
| _t | 是 | 1619069826 | 当前提交time()时间 (防超时) |
| sign | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
| name | 是 | 开机盒子 | 开机盒子名称 |
{
"code": 0,
"message": "SUCCESS",
"data": {
"deviceid": 123,
},
"category": "sunlogin",
"action": "device-box-add"
}
Path: /wakeup/box-delete
Method: POST
接口描述:
1、加密规则:
对 sn、user_id、_t为键值的数组进行ksort(对关联数组按照键名进行升序排序)后 ,以英文逗号 , 将数组变成字符串,加上密钥后md5
php如:
const SECRET_KEY = '+=kaijihezi-delete=+'; // 密钥
ksort($param);
$sign = md5(implode(',',$param ) . self::SECRET_KEY)
2、错误码
1 => '失败'
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
...
注(其余可以看message,code=>message)
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 03677568852 | 开机盒序列号 |
| user_id | 是 | 1 | 用户id |
| _t | 是 | 1619069826 | 当前提交time()时间 (防超时) |
| sign | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
{
"code": 0,
"message": "SUCCESS",
"data": {},
"category": "sunlogin",
"action": "device-box-delete"
}
<a id=记录开机棒/开机盒子激活时间>
Path: /sunlogin/record-wakeup-time
Method: POST
接口描述:
1、加密规则:
对 sn、uptime、description、_t为键值的数组进行ksort(对关联数组按照键名进行升序排序)后 ,以英文逗号 , 将数组变成字符串,加上密钥后md5
php如:
const SECRET_KEY = '+=huashengkui=+'; // 密钥
ksort($param);
$sign = md5(implode(',',$param ) . self::SECRET_KEY)
2、错误码
1 => '失败'
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| sn | 是 | 03677568852 | 开机盒序列号 |
| uptime | 是 | 2021-04-22 13:45:17 | 激活时间 |
| _t | 是 | 1619069826 | 当前提交time()时间 (防超时) |
| sign | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
{
"code": 0,
"message": "SUCCESS",
"data": {},
"category": "sunlogin",
"action": "record-wakeup-time"
}
Path: /sunlogin/get-snbymac
Method: POST
接口描述:
1、加密规则:
对 mac、_t为键值的数组进行ksort(对关联数组按照键名进行升序排序)后 ,以英文逗号 , 将数组变成字符串,加上密钥后md5
php如:
const SECRET_KEY = '+=kaijihezi-snbymac=+'; // 密钥
ksort($param);
$sign = md5(implode(',',$param ) . self::SECRET_KEY)
2、错误码
1 => '失败'
2 => '验证无效'
5 =>'参数有误'
1209 => '设备不存在'
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| mac | 是 | FC:83:C6:80:19:3C | |
| _t | 是 | 1619069826 | 当前提交time()时间 (防超时) |
| sign | 是 | a49e1fd411628117c2710b1581e184a4 | 加密后的密钥(MD5) |
{
"code": 0,
"message": "SUCCESS",
"data": {
"model": "WakeupBox",
"mac": "FF:52:80:4C:CA:EA",
"sn": "912345678894",
"code": "3832a4c1f6b32e5e"
},
"category": "sunlogin",
"action": "getsnbymac"
}
Path: /remote/unbind-fastcode
Method: GET
接口描述:
statusCode: 200
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| fastcode | 是 | 115834217 | 快码 |
| fastcodepsw | 是 | 授权码的密码licensepsw(由于windows端的配置里用fastcodepsw,因此定义了该名称,实际上它们的值在数据表里都是一样) |
{
"code": 0,
"message": "SUCCESS",
"data": [],
"category": "remote",
"action": "unbindfastcode"
}
Path: /tryout/renew
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Content-Type | application/x-www-form-urlencoded | 是 | ||
| Authorization | 是 | Bearer xxx | ||
| User-Agent | 是 | SLRC/6.4.0.50107 (Android,loginver=10) |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| type | 是 | 类型 camera:摄像头 mobile:移动设备 cmd, ssh, file:远程文件 | |
| userid | 否 | 被控才需要传主控的userid, 更新主控的试用次数 | |
| merge_client | 否 | true | 主被控一体客户端,传此参数,试用数变更视作主控 |
{
"code": 0,
"message": "SUCCESS",
"stdcode": 0,
"data": {
// 当前服务名称
"trial_servicename": "行业青春版",
// 是否含有移动授权
"mobile_auth": true,
// 每天次数
"frequency": 3,
// 每次分钟
"duration": 15,
// 移动设备控制
"mobile": {
// 是否开启试用
"tryout": true,
// 限制次数
"limit": 3,
// 主控已用次数
"slcc": 0,
// 被控已用次数
"slrc": 0
},
// 摄像头
"camera": {
"tryout": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// cmd
"cmd": {
"tryout": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// ssh
"ssh": {
"tryout": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// 远程文件
"file": {
"tryout": false,
"limit": 3,
"slcc": 0,
"slrc": 0
}
},
"category": "tryout",
"action": "limit"
}
Path: /tryout/limit
Method: GET
接口描述:
Headers
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|---|---|---|---|
| Authorization | 是 | Bearer xxx | ||
| User-Agent | 是 | SLRC/6.4.0.50107 (Android,loginver=10) |
Query
| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| _format | 否 | json | 数据返回类型 |
| userid | 否 | 123456 | 被控才需要传主控的userid, 获取主控的远控权限 |
{
"code": 0,
"message": "SUCCESS",
"stdcode": 0,
"data": {
// 当前服务名称
"trial_servicename": "行业青春版",
// 每天次数
"frequency": 3,
// 每次分钟
"duration": 15,
// 移动设备控制
"mobile": {
// 是否开启试用
"tryout": true,
// 是否能使用
"isuse": false,
// 限制次数
"limit": 3,
// 主控已用次数
"slcc": 0,
// 被控已用次数
"slrc": 0,
// 是否含有移动授权
"mobile_auth": false
},
// 摄像头
"camera": {
"tryout": false,
"isuse": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// cmd
"cmd": {
"tryout": false,
"isuse": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// ssh
"ssh": {
"tryout": false,
"isuse": false,
"limit": 3,
"slcc": 0,
"slrc": 0
},
// 远程文件
"file": {
"tryout": false,
"isuse": false,
"limit": 3,
"slcc": 0,
"slrc": 0
}
},
"category": "tryout",
"action": "limit"
}