0
点赞
收藏
分享

微信扫一扫

MQTT连接阿里云IoT(四)


概述

前一篇文章我们介绍了设备密钥的认证方式,那么这里重点来看如何通过Qt的HTTP接口来实现一型一密动态注册的流程。

一型一密动态注册

​​【官网介绍】​​ 直连设备使用一型一密动态注册的流程:

  • 在物联网平台预注册设备,并获取产品证书(ProductKey和ProductSecret)。预注册设备时,可以使用设备的MAC地址或SN序列号等作为DeviceName。
  • 在控制台开启设备所属产品的动态注册开关。
  • 将产品证书烧录至固件。
  • 设备向云端发起身份认证。云端认证成功后,下发DeviceSecret。
  • 设备使用设备证书与云端建立连接。

直连设备动态注册,通过HTTP发送请求。 需先在控制台上,开通该产品的一型一密动态注册功能,如下,这个开关要打开:

MQTT连接阿里云IoT(四)_设备动态注册

URL模板: https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device
HTTP方法: POST

请求数据格式:

POST /auth/register/device  HTTP/1.1
Host: iot-auth.cn-shanghai.aliyuncs.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 123
productKey=1234556554&deviceName=deviceName1234&random=567345&sign=adfv123hdfdh&signMethod=HmacMD5

响应数据格式:

{
"code": 200,
"data": {
"productKey": "1234556554",
"deviceName": "deviceName1234",
"deviceSecret": "adsfweafdsf"
},
"message": "success"
}

参数说明:

MQTT连接阿里云IoT(四)_动态注册_02

根据官网的接口说明,我们使用Qt接口来请求。

Qt Http post请求动态注册设备

= "xxxxx";
QString productSecret = "xxxxx";
QString deviceName = "xxxxx";

QString message = "deviceNameXXXXXXproductKeyXXXXXXXrandom123222";


QUrlQuery params;
QString sign = QMessageAuthenticationCode::hash(message.toLocal8Bit(),
productSecret.toLocal8Bit(),
QCryptographicHash::Sha1).toHex();

params.addQueryItem("productKey",productKey);
params.addQueryItem("deviceName",deviceName);
params.addQueryItem("random","123222");
params.addQueryItem("sign",sign);
params.addQueryItem("signMethod","HmacSHA1");

QNetworkRequest request;
QString data = params.toString();

request.setUrl(QString("https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;");
request.setHeader(QNetworkRequest::ContentLengthHeader, data.size());

m_pNetWorkManager->post(request,data.toUtf8() );

注意,虽然是动态注册设备,但前提要现在阿里云IOT上创建好设备。上面代码中的xxxx换成自己的响应信息。

MQTT连接阿里云IoT(四)_动态注册_03


在正式项目中,也可以选择批量添加设备。

请求完成就会收到服务器下发的数据啦:

"{\"code\":200,\"data\":{\"deviceName\":\"xxxxxxxxx\",\"deviceSecret\":\"xxxxxxxxxxxx\",\"productKey\":\"xxxxxxxx\"},\"message\":\"success\"}"

ok,这时候就请求到设备的​​deviceSecret​​​了,接下来就可以通过这些信息去正式连接服务器。


举报

相关推荐

0 条评论