固件升级
更新时间: 2023-04-19

# 概述

设备端对接OTA分为下载和上报两个核心接口,设备端主动请求接口下载及在升级过程中主动更新升级状态。 升级过程示意如下:

image.png

# 接口说明

设备端请求OTA服务接口时需使用平台分配的产品线密钥进行加密鉴权,产品密钥、产品线ID在平台控制台获得。

鉴权方式:业务加密数据base64(AES(plain)),AES秘钥为产品线秘钥

# 固件下载请求接口

项目 描述
域名 从平台获得
path /openapi/delivery
http方法 post
headers Content-Type: application/json
body json格式数据

# 请求消息示例

// 请求
{
    "pt":3,              // 请求协议类型,固定为3,表示AES加密
    "pid":2000002601,    // 产品线ID
    "data":"xxx"         // 业务加密数据base64(AES(plain)),AES秘钥为产品线秘钥
}

// data内容
{
    "did":"deviceid",                       // 设备ID
    "chs":"ota",                            // 请求通道,固定为ota
    "softid":184,                           // 端类型,默认为184
    "sdkver":"3.0.48.2018091216",           // sdk版本号
    "ota": {
        "ver":"0.25.1.201906212006"         // 系统版本号
    }
}

# 响应格式

// 返回
{
    "errno": 0,                             // 错误码,成功为0
    "msg": "",                              // 错误信息,成功为空字符串
    "data": "xx"                            // 业务加密数据
}

// data解密后内容
{
    "url": "https://xxx",                                 // 下载url
    "filesize": 106851440,                                // 包大小
    "sha1": "e8ca1a72d2ebc0f2afb21b7b64636538d14db4f0",   // sha1
    "taskid": "137342",                                   // 任务id
    "version": "2.0.0.0"                                  // 包版本号
}

# 升级状态上报接口

项目 描述
域名 从平台获得
path /openapi/devreport
http方法 post
headers Content-Type: application/json
body json格式数据

# 通用格式

接口请求通用格式如下,其中data字段为业务加密数据base64(AES(plain)),AES秘钥为产品线秘钥

// 请求
{
    "pt":3,              // 请求协议类型,固定为3,表示AES加密
    "pid":1,             // 产品线ID
    "data":"xxx"         // 业务加密数据base64(AES(plain)),AES秘钥为产品线秘钥
}

// data解密后内容 为下面业务格式数据
{
    ...
}

# 请求成功上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1001,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
    }
}

# 下载开始上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1006,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
    }
}

# 下载成功上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1002,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
        "time": xxx,
        "reason_code": 0,
        "reason": ""
    }
}

# 下载失败上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1002,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
        "time": xxx,
        "reason_code": xxx,
        "reason": "xxx"
    }
}

# 升级开始上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1003,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx
    }
}

# 升级成功上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1004,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
        "reason_code": 0,
        "reason": "xxx"
    }
}

# 升级失败上报示例

{
    "productid": "xxx",
    "deviceid": "xxx",
    "sdkver": "x.x.x.x",
    "softid": 184,
    "osver": "x.x.x.x",
    "cmdid": 1004,
    "unixtime": 1659689112000,
    "data": {
        "taskid": xxx,
        "reason_code": xxx,
        "reason": "xxx"
    }
}