Skip to content

OpenAPI接入说明

App应用相关OpenAPI主要用于App集成平台功能,实现通过App应用进行设备数据查看与远程控制。

操作步骤

前置步骤

1、在使用OpenAPI服务前,需先在App开发->App SDK菜单下创建App应用。

2、在App应用列表->关联产品页面中授权该App应用可访问的产品数据。授权后才能发现和绑定已授权的产品设备。

3、在App详情页面中获取用户域与用户域密码,后续需要使用该参数换取访问Token。

App集成

1、获取短信验证码,用于注册App用户。

接口地址:

API Addresshttps://iot-api.quectelcn.com/v2/sms/enduserapi/v2/sendPhoneSmsCode
Request MethodPOST

请求参数:

参数参数类型是否必填参数位置参数描述
code_typeint32Query短信类型,可传入以下场景1-密码重置2-登录3-注册4-注销5-添加推送人
internationalCodeStringQuery国际代码,例如中国大陆填入86
phoneStringQuery手机号码
randomStringQuery随机数,长度固定为16的随机字符串
tsint64Query当前毫秒级时间戳,与服务器时间不能超过 10 分钟
userDomainStringQuery用户域
signatureStringQuery签名生成规则:
SHA256(phone + codeType + random + ts + userDomainSecret)
经过SHA256编码后的数据使用HEX_ENCODE格式。
示例
phone:13800138000
codeType:3
random:76a6L647F02CAoN9
ts:1744773894369
userDomainSecret:57Fk69oYgbs2aWWN362NtZwYB2RqKNqQ7yZESnF5VM33
签名格式:
SHA256(13800138000376a6L647F02CAoN9174477389436957Fk69oYgbs2aWWN362NtZwYB2RqKNqQ7yZESnF5VM33)
计算后得出签名:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

响应参数:

参数参数说明类型schema
code错误码 200代表成功,其他为错误码object
data成功返回token值string
extMsg扩展信息string
msg响应信息string

响应状态码:

状态码说明
200OK

请求示例:

Plain
curl -X 'POST' \
  'https://iot-api.quectelcn.com/v2/sms/enduserapi/v2/sendPhoneSmsCode?codeType=3&internationalCode=86&phone=17132136550&random=76a6L647F02CAoN9&signature=2deb6518ca0ee701e28a6359a91270c59dbe69456a3336dc5f625bfa32e64df6&ts=1744773894369&userDomain=C.DM.10271.5' \
  -H 'accept: */*' \
  -d ''

示例中使用的 userDomainSecret 为 57Fk69oYgbs2aWWN362NtZwYB2RqKNqQ7yZESnF5VM22

响应示例:

Plain
成功:
{
  "code": 200,
  "msg": "",
  "data": null,
  "extMsg": null
}
失败:
{
    "code": 5420,
    "msg": "签名验证失败",
    "data": null,
    "extMsg": null
}

2、通过手机号注册用户

接口地址:

API Addresshttps://iot-api.quectelcn.com/v2/enduser/enduserapi/v2/phonePwdRegister
Request MethodPOST

请求参数:

参数参数类型是否必填参数位置参数描述
internationalCodeStringBody国际代码,默认为国内
phoneStringBody手机号码
randomStringBody用来对密码加密和解密的随机数。
pwdStringBody密码
密码加密解密规则:
AES128(pwd,MD5(random),初始向量)。
AES加密约定:
加密模式:CBC
填充:PKCS5Padding
数据块位数:128位
内容:pwd
AES秘钥:MD5(random) ,MD5(random) 生成 16B 大写字符串(截取 32 长度 MD5 字符串的 8-24 部分)
初始向量:将生成的AES密码(MD5(random))拆分成长度为 8B 的两组字节数据,前后对调后加在一起生成新的 16B 字节数据作为偏移量
输出:BASE64
字符集:utf-8
示例:
pwd:china1234
random:j1acpdj2bmtqZXVb
AES key:89A049614445CCA8
AES iv:4445CCA889A04961
加密后:lkZMvj0KDSJXlp66jBieHA==
解密后:china1234
smsCodeStringBody短信验证码(由短信服务提供发送短信验证码接口)
userDomainStringBody用户域
agreementListListBody协议
agreementList[0].protocolTypeIntegerBody协议类型(1隐私政策、2服务协议)
agreementList[0].privacyVersionStringBody协议版本

响应参数:

参数参数说明类型schema
code错误码 200代表成功,其他为错误码object
data成功返回token值Object
data.uid用户IDString
extMsg扩展信息string
msg响应信息string

响应状态码:

状态码说明
200OK

请求示例:

Plain
curl -X 'POST' \
  'https://iot-api.quectelcn.com/v2/enduser/enduserapi/v2/phonePwdRegister' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{"agreementList":[{"privacyVersion":"1.0.0","protocolType":1},{"privacyVersion":"1.0.0","protocolType":2}],"internationalCode":"86","phone":"17132136550","pwd":"KbbO5AsWloh9gulLei6NhQ==","random":"abcdef","smsCode":"606754","userDomain":"C.DM.10271.5"}'

响应示例:

Plain
成功:
{
    "code":200,
    "msg":"",
    "data":{
        "uid":"C1"
    },
    "extMsg":null
}
失败:
{
  "code": 5037,
  "msg": "短信验证码验证失败",
  "data": null,
  "extMsg": null
}

3、注册成功后登录账号获取用户token

接口地址:

API Addresshttps://iot-api.quectelcn.com/v2/enduser/enduserapi/phonePwdLogin
Request MethodPOST

请求参数:

参数参数类型是否必填参数位置参数描述
internationalCodeStringQuery国际代码,默认为国内
phoneStringQuery手机号码
randomStringQuery用来对密码加密和解密的随机数。
pwdStringQuery密码
密码加密解密规则:
AES128(pwd,MD5(random),初始向量)。
AES加密约定:
加密模式:CBC
填充:PKCS5Padding
数据块位数:128位
内容:pwd
AES秘钥:MD5(random) ,MD5(random) 生成 16B 大写字符串(截取 32 长度 MD5 字符串的 8-24 部分)
初始向量:将生成的AES密码(MD5(random))拆分成长度为 8B 的两组字节数据,前后对调后加在一起生成新的 16B 字节数据作为偏移量
输出:BASE64
字符集:utf-8
示例:
pwd:china1234
random:j1acpdj2bmtqZXVb
AES key:89A049614445CCA8
AES iv:4445CCA889A04961
加密后:lkZMvj0KDSJXlp66jBieHA==
解密后:china1234
userDomainStringQuery用户域
signatureStringQuery签名签名生成规则:SHA256(internationalCode+phone+pwd+random+userDomainSecret)

响应参数:

参数参数说明类型schema
code错误码 200代表成功,其他为错误码object
data成功返回token值Object
data.accessToken访问tokenObject
data.accessToken.expirationTime到期时间的时间戳,单位为秒。超过到期时间后,token 失效。Long
data.accessToken.tokentokenString
data.refreshToken刷新tokenObject
data.refreshToken.expirationTime到期时间的时间戳,单位为秒。超过到期时间后,token 失效。Long
data.refreshToken.tokentokenString
extMsg扩展信息string
msg响应信息string

响应状态码:

状态码说明
200OK

请求示例:

Plain
curl -X 'POST' \
  'https://iot-api.quectelcn.com/v2/enduser/enduserapi/phonePwdLogin?internationalCode=86&phone=17132136550&pwd=KbbO5AsWloh9gulLei6NhQ%3D%3D&random=abcdef&signature=1fd91ebf096be51dae1c6055bc930bd8e24b1f477d2a47ae87eedb0f73057bf0&userDomain=C.DM.10271.5' \
  -H 'accept: */*' \
  -d ''

示例中使用的 userDomainSecret 为 57Fk69oYgbs2aWWN362NtZwYB2RqKNqQ7yZESnF5VM22

响应示例:

Plain
成功:
{
  "code": 200,
  "msg": "",
  "data": {
    "accessToken": {
      "token": "Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJlbmR1c2VyIiwiYXVkIjoiQXVkaWVuY2UiLCJleHAiOjE3NDQ3ODc3ODYsImp0aSI6ImR2SXRGcjRJdW9IaVhKSmNCdjFTNkEiLCJpYXQiOjE3NDQ3ODA1ODYsIm5iZiI6MTc0NDc4MDQ2Niwic3ViIjoic3ViamVjdCIsInVpZCI6IkMxMzEzNjIiLCJ0eXBlIjoiQWNjZXNzVG9rZW4ifQ.Zwt52dXiZZhL0jRC9LzOGUFlBAbb2tVyM9a8fTXOEmV2TREvHf7HjYxTh26JznhRtJJm1XHOlvvPbjhwI9y2jXyDkFMcWjn9X91z-36Fd2WSH4YLjDahGTq6zNBSIoLAmwJjY7AYEDhw8ytGIyUOhCnRzTNUV8lHs6g72f5hVTZXEx97GSR6VxWRLOtEtyvOD6mcD4YEWWbtFNXl8vrQQYxq58Q4sWmM4nRTECYDMeda6SCIMPjUjZpFLmGYwZk184jz5pGw6ufFkA4Cj7QYMdcVmz7MQ5PaWx49w2Ze3TwTZPbwwpPhxffQPWS0Vvm7PxSHM07nSlLO9TZlDoepvA",
      "expirationTime": 1744787786
    },
    "refreshToken": {
      "token": "Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJlbmR1c2VyIiwiYXVkIjoiQXVkaWVuY2UiLCJleHAiOjE3NDczNzI1ODYsImp0aSI6Ijc0UEJIdEt5UmRidVdwVlFsNENGVEEiLCJpYXQiOjE3NDQ3ODA1ODYsIm5iZiI6MTc0NDc4MDQ2Niwic3ViIjoic3ViamVjdCIsInVpZCI6IkMxMzEzNjIiLCJ0eXBlIjoiUmVmcmVzaFRva2VuIn0.aB3FMr4IeDInhq-fVMjy032kad2WZhoqTLwwiXycTZpv9a3aed5TRZouYUjVKmE8I2ueB3gkPWLrVVjJzq0hzitSQz3NYk0aNtYJDGzdt7MC2BxEPMz8hEOr8Qz8bxHbnl3DFR1oYuwBcc7ZxG_yvqb4iG-zqwE3VyCeZo0Q_6YvS-ZszgQe0GPU5s9R1ktMXf7Dc23EOrgVr6nyU595GNK75qXG7Gurl0gMyoLGwJ0KPppj-jfPi0G4zn49zuoBWX--6Q3D4mMWRldH5OBFw19VNvulVzdcInfDjKi0E9SkfsBBxPLmSstbgjQ2gncfw2t6MnEP57_KKS9vdZQ21w",
      "expirationTime": 1747372586
    }
  },
  "extMsg": null
}
失败:
{
  "code": 5420,
  "msg": "签名验证失败",
  "data": null,
  "extMsg": null
}

4、使用token调用查询当前账号下已绑定设备列表

接口地址:

API Addresshttps://iot-api.quectelcn.com/v2/enduser/enduserapi/phonePwdLogin
Request MethodPOST

请求参数:

参数参数类型是否必填参数位置参数描述
pkListStringQueryProduct Key 列表,多个使用英文逗号分隔
dkStringQueryDevice Key
deviceNameStringQuery设备名称
pageIntegerQuery当前页,默认为第 1 页
pageSizeIntegerQuery页大小,默认为 10 条

响应参数:

参数参数说明类型schema
code错误码 200代表成功,其他为错误码object
data设备列表Object
extMsg扩展信息string
msg响应信息string

响应状态码:

状态码说明
200OK

请求示例:

Plain
curl -X 'GET' \
  'https://iot-api.quectelcn.com/v2/binding/enduserapi/userDeviceList' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJlbmR1c2VyIiwiYXVkIjoiQXVkaWVuY2UiLCJleHAiOjE3NDQ3ODgxNTEsImp0aSI6ImtJQ0xZSWpBOXRsN1VpRXY4WFplN1EiLCJpYXQiOjE3NDQ3ODA5NTEsIm5iZiI6MTc0NDc4MDgzMSwic3ViIjoic3ViamVjdCIsInVpZCI6IkMxMzEzNjIiLCJ0eXBlIjoiQWNjZXNzVG9rZW4ifQ.YpYuwsehgDtJdV10iEVozlPvzWOdPKvPPRG81alCDdgsJBvOhMA4HvniOIY6R417KxspaZB7ScUdfMGv7fDrsWYFuLjV3am8gmnB1Uy328Lz7I5f3O3EShsfKdcTkAZ6OrReFgVKRzFV1zYF5HHy5Og-SfOJjSyALl-aHTnJtSJ9T8DB6hhgjYDQff7_-fsQ7Yyvu25vfeEKLYKdg-70uxmVVjEcSgWmpdHjDnLGuQliMsJz4T4I641vTc8HWZZ3lUjEAT2yyrRvbUbzOtrU8eLad3j48iTEPOlBpaD6dWO3m3BMpeCEEEN2YtnKPx84xoepMwecMJtZ9CaD9m-wvQ'

响应示例:

Plain
成功:
{
  "code": 200,
  "msg": "",
  "data": {
    "total": 1,
    "list": [
      {
        "productKey": "p11pLZ",
        "deviceKey": "D001",
        "deviceTag": "047AD71AAA1F7670F599BACE484EDE7A",
        "deviceName": "RGB灯-1744780780714",
        "deviceStatus": "离线",
        "protocol": "MQTT",
        "productName": "RGB灯",
        "logoImage": "https://aiot-cdn.quectel.com/paas2/cdn/29c9cbead1ab4344829205aa2b9612911732871292272.jpeg",
        "signalStrength": "88",
        "uid": "C131362",
        "userName": "QuE1DglfKXB",
        "phone": "17132136550",
        "locateType": null,
        "deviceType": 1,
        "ownerUid": null,
        "shareCode": null,
        "authKey": "FUjktXJpwJ8d3OLZoHTYtA==",
        "authCode": null,
        "bindingCode": null,
        "btPwd": null,
        "btLastUseTime": null,
        "verified": 1,
        "status": 1,
        "networkType": "2",
        "accessType": "0",
        "sn": "D001",
        "bindMode": 3,
        "onlineStatus": 0,
        "bindStatus": 1,
        "deviceCreateTime": "2023-04-23 17:08:00",
        "deviceCreateTimeTs": 1682240880000,
        "activeTime": "2023-05-05 10:16:05",
        "activeTimeTs": 1683252965000,
        "deviceBindTime": "2025-04-16 13:19:41",
        "deviceBindTimeTs": 1744780781133,
        "lastConnTime": "2025-02-18 11:44:18",
        "lastConnTimeTs": 1739850258248,
        "lastOfflineTime": "2025-02-18 11:49:27",
        "lastOfflineTimeTs": 1739850567256,
        "invaildTime": null,
        "invaildTimeTs": null,
        "fid": null,
        "frid": null,
        "bindingType": 1,
        "capabilitiesBitmask": 1,
        "sharingExpireAt": null,
        "sharingExpireTimeTs": null,
        "upgradeStatus": null,
        "userConfirmStatus": null,
        "isNative": 1,
        "isMatter": 0,
        "firstItemCode": "smart_city",
        "firstItemName": "RGB灯",
        "secondItemCode": "SmartTwoWheels",
        "secondItemName": "两轮车",
        "lowPowerProduct": false,
        "lowPowerCache": null,
        "lowPowerStatus": false,
        "aiCapabilityStatus": false,
        "lowPowerAlive": 0,
        "planId": null,
        "gdid": null,
        "groupState": 0,
        "groupDeviceDeviceNum": null,
        "matterInfo": null
      }
    ],
    "pageNum": 1,
    "pageSize": 10,
    "size": 1,
    "startRow": 1,
    "endRow": 1,
    "pages": 1,
    "prePage": 0,
    "nextPage": 0,
    "isFirstPage": true,
    "isLastPage": true,
    "hasPreviousPage": false,
    "hasNextPage": false,
    "navigatePages": 8,
    "navigatepageNums": [
      1
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 1
  },
  "extMsg": null
}
失败:
{
  "code": 5032,
  "msg": "token 验证失败"
}

至此已完成在App应用中调用OpenAPI接口流程,更多的OpenAPI请查看API列表