//增加设备
public function batchWx()
{
$count = $this->request->post('count');
$classid = $this->request->post('classid');
if ($count>=1&&$count<=30) {
//$this->success('一共成功生成'. $count.'台设备!');
} else {
$this->error('请选择正确的数量,最多不能超过30台!目前选择数量为:'. $count);
}
if (!empty($classid)) {
//$this->success('一共成功生成'. $count.'台设备!');
} else {
$this->error('请先现在产品型号!');
}
$username=session('username');
$company_id=session('company_id');
$user_id=session('user_id');
$company_group = session('company_group');
$company_name = session('company_name');
$rowsPerPage = 20;
if ($company_group=='1') {
$datas_where=" 1=1 ";
} else {
$datas_where=" company_id='".$company_id."' ";
}
// $device_class=Db::name('device_class')
// ->where($datas_where)
// ->where('id', $classid)
// ->find();
$device_class= model('PublicModel')->get_device_class_data($classid);
if (!empty($device_class['class_id'])) {
//$this->success('一共成功生成'. $count.'台设备!');
//$type='0101';
$deviceClass=$device_class['class_id'];
$deviceName=$device_class['class_name'];
$versions=$device_class['versions'];
$class_type=$device_class['class_type'];
$baidu_id=$device_class['baidu_id'];
$weixin_id=$device_class['weixin_id'];
$company_id=$device_class['company_id'];
} else {
$this->error('产品型号不存在!');
}
if (!empty($baidu_id)) {
$baidu_schema= model('PublicModel')->get_baidu_data($baidu_id);
//$this->success('一共成功生成'. $count.'台设备!');
} else {
$this->error('百度参数不存在!');
}
if (!empty($weixin_id)) {
$weixin_product= model('PublicModel')->get_weixin_data($weixin_id);
//$this->success('一共成功生成'. $count.'台设备!');
} else {
$this->error('微信参数不存在!');
}
//百度
//系统内部id
$schemaId=$baidu_schema['schemaId'];
//百度物模型id
$schema_id=$baidu_schema['schema_id'];
//物模型名称
$schema_name=$baidu_schema['schema_name'];
//百度ak
$ak=$baidu_schema['ak'];
//百度sk
$sk=$baidu_schema['sk'];
//烧录主题参数
$mqttTopicToDevice=$baidu_schema['mqttTopicToDevice'];
//订阅主题
$mqttTopicToControl=$baidu_schema['mqttTopicToControl'];
//发布主题
$mqttTopicPubToControl=$baidu_schema['mqttTopicPubToControl'];
//微信
//微信公众号appid
$appid = $weixin_product['appid'];
//微信公众号secret
$secret = $weixin_product['secret'];
// 内部编号
$wxDeviceType=$weixin_product['wx_id'];
//微信设备分类编号
$i=0;
for ($i;$i<$count;$i++) {
//创建微信设备
$token = $this->weixin_get_token($appid, $secret);
$access_token = $token["access_token"];
//微信设备分类编号
//$product_id='50717';
//$url = "https://api.weixin.qq.com/device/getqrcode?access_token=" . $access_token . "&product_id=48126";
$url='https://api.weixin.qq.com/device/getqrcode';
$params_weixin = array(
"access_token"=>$access_token,
"product_id"=>$product_id
);
$j=$i;
$device_wx =json_decode($this->http_post($url, $params_weixin), true);
$deviceid=$device_wx['deviceid'];
$qrticket=$device_wx['qrticket'];
if (!empty($device_wx)) {
$insert['wxDeviceId']=$deviceid;
$insert['qrticket']=$qrticket;
//生成txt文档保存(先不启用)
// $params=json_encode($device_wx);
// $RootDir = $_SERVER['DOCUMENT_ROOT'];
// $path = config('view_replace_str');
// $path_weixins= $RootDir.$path['__static__']."/".'weixin'."/".$deviceid.".txt";
// file_put_contents($path_weixins, $params,FILE_APPEND);
} else {
return json(['code' => 1, 'data' => $result, 'msg' => '微信设备创建失败!']);
}
//$insert['wxDeviceId']='9b49e62d9c06bc23_gh_0ddfb722a565';
//创建物影子
$signer = new SampleSigner();
//$credentials = array("ak" => "XXXXXX", "sk" => "XXXXXX");
$credentials = array("ak" => $ak, "sk" => $sk);
$httpMethod = "POST";
//创建物影子
$path = "/v3/iot/management/device";
$timestamp = new \DateTime();
$timestamp->setTimezone(new \DateTimeZone("UTC"));
$times=time();
$timestamp->setTimestamp($times);
$headers = array(
"Host" => "iotdm.gz.baidubce.com",
"Content-Type" => "application/json; charset=utf-8"
);
//签名不传post所要添加的参数,HEADERS_TO_SIGN必须带要进行签名的headers而且'host'等参数名称必须为小写
$params = array();
$options = array(SignOption::TIMESTAMP => $timestamp, SignOption::HEADERS_TO_SIGN => array('host' => "iotdm.gz.baidubce.com",'content-type' => "application/json; charset=utf-8"));
$ret = $signer->sign($credentials, $httpMethod, $path, $headers, $params, $options);
//创建设备
$url = "http://iotdm.gz.baidubce.com/v3/iot/management/device";
//注意
//1.顺序不能变1:Host 2:Authorization 3:Content-Type
//2.传的参数要转换为json格式
//3.必须使用 CURLOPT_NOBODY,CURLOPT_POSTFIELDS,CURLOPT_POST等参数
$headr = array();
$headr[] = 'Host:iotdm.gz.baidubce.com';
$headr[] = 'Authorization:' . $ret;
$headr[] = 'Content-Type:application/json; charset=utf-8';
$paramsmy = array(
"deviceName"=> $insert['wxDeviceId'],
"description"=> $schema_name,
"schemaId"=>$schemaId
//"description"=>"物影子名称=微信设备ID",
//"schemaId"=>"82c30e49-e8eb-49d6-b874-2126a05b539b"
);
//参数转换为json格式
$instance = json_encode($paramsmy, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);
//body传json参数
curl_setopt($ch, CURLOPT_POSTFIELDS, $instance);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_POST, $params);
$res = curl_exec($ch);
curl_close($ch);
//return json_decode($res, true);
$device_bd= json_decode($res, true);
if (!empty($device_bd)) {
$bd_name = $device_bd['username'];
$bd_key = $device_bd['key'];
//生成txt文档保存(先不启用)
// $params=json_encode($device_bd);
// $RootDir = $_SERVER['DOCUMENT_ROOT'];
// $path = config('view_replace_str');
// $path_weixins= $RootDir.$path['__static__']."/".'baidu'."/".$deviceid.".txt";
// file_put_contents($path_weixins, $params,FILE_APPEND);
} else {
$bd_name ='';
$bd_key = '';
}
$insert['deviceClass'] = $deviceClass;
$insert['deviceName'] = $deviceName;
$insert['wxDeviceType'] = $wxDeviceType;
$insert['wxOpenId'] = '';
$insert['mqttBaidu'] = '{"tcpEndpoint":"13xt3d9.mqtt.iot.gz.baidubce.com","username": "'.$bd_name.'","key":"'.$bd_key.'"}';
$insert['mqttTopicToDevice'] =$mqttTopicToDevice;
$insert['mqttTopicToControl'] =$mqttTopicToControl;
$insert['mqttTopicPubToControl'] =$mqttTopicPubToControl;
// $insert['mqttTopicToDevice'] = '{"topicSub":["$baidu/iot/general/{clientId}","$baidu/iot/shadow/{clientId}/update/accepted"],"topicPub":"$baidu/iot/shadow/{clientId}/update"}';
// $insert['mqttTopicToControl'] ='{"topicSub":["$baidu/iot/shadow/{clientId}/get/accepted","$baidu/iot/shadow/{clientId}/update/accepted"],"topicPub": "$baidu/iot/shadow/{clientId}/update"}';
// $insert['mqttTopicPubToControl'] ='$baidu/iot/shadow/{clientId}/get';
$insert['writeStatus'] = '0';
$insert['create_user'] = session('user_id');
$insert['create_time'] = date('Y-m-d h:i:s', time());
//$insert['versions'] = 'V1.0';
$insert['versions'] = $versions;
$insert['company_id'] = session('company_id');
$insert['deviceId'] = Device::get_deviceId($class_type);
$db = Db::name('device')
->insert($insert);
$deviceId = $insert['deviceId'];
}
$this->success('一共成功生成'. $count.'台设备!');
}