Commit 4e3f2365fac2d86fd91d0a049934fce7dccf2763

Authored by xu
1 parent 200040c1
Exists in master

common

1. F 调整IP地址换城市的key
domain
1. F 授权设备到空序列号的匹配方法改为随机产生,不能按顺序获取一个空绑定的设备记录
common/helpers/Utils.php
... ... @@ -8,7 +8,7 @@ use Faker\Provider\Uuid;
8 8 class Utils
9 9 {
10 10 private static $vKey = 'thisisakey0olk2i8suwjshwks';
11   - private static $GDKey = '51125f9275f98d30e78f0d4a11251983'; // 高德IP地址获取归属地 KEY 日配额100000次
  11 + private static $GDKey = 'a09624f98c82f573140813d7fa25b805'; // 高德IP地址获取归属地 KEY 日配额100000次
12 12  
13 13 public static function getVKey()
14 14 {
... ...
console/controllers/TestController.php
... ... @@ -7,6 +7,7 @@ namespace console\controllers;
7 7 * Time: 11:32 AM
8 8 */
9 9  
  10 +use domain\device\DeviceRepository;
10 11 use Yii;
11 12 use common\exts\Aes;
12 13 use common\exts\RSACrypt;
... ... @@ -25,6 +26,24 @@ class TestController extends Controller
25 26 {
26 27 $no = hexdec('000A') + 1;
27 28 echo sprintf('%04X', $no);
  29 + echo "=================\r\n";
  30 + $v = "0:998654321:A0";
  31 + //echo preg_match('/^[0-9a-fA-F:]{12,18}$/', $v);
  32 +
  33 + //echo Utils::macGenerate();
  34 +
  35 + //echo "\r\n";
  36 + //echo Utils::coverToMacAddress("aaaddddd");
  37 + $regex = '/^([0-9a-fA-F]{2})(([:|-]{0,1}[0-9a-fA-F]{2}){5})$/';
  38 + if (preg_match($regex, $v)) {
  39 + $v = str_replace('-', '',$v);
  40 + $v = str_replace(':','', $v);
  41 + echo Utils::coverToMacAddress($v);
  42 + }
  43 +
  44 +
  45 +
  46 + echo "\r\n";
28 47 }
29 48  
30 49 public function actionCheckSign()
... ... @@ -63,15 +82,37 @@ class TestController extends Controller
63 82 public function actionDeviceSt()
64 83 {
65 84 $url = 'http://kingb:8012/app-api/web/reportDeviceVersion';
  85 + //$url = 'http://47.107.95.101/app-api/web/reportDeviceVersion';
66 86 $params = [
67   - 'barcode' => '0001000100010001',
68   - 'device_id' => 'DEVICE003',
69   - 'software_version' => 'V1.0.1',
70   - 'hardware_version' => 'V1.0.2',
71   - 'timestamp' => 1500000000
  87 + 'barcode' => '0002000100010001',
  88 + 'device_id' => 'DEVICE000000002',
  89 + 'software_version' => 'V1.0.20191001',
  90 + 'hardware_version' => '',
  91 + 'timestamp' => time()
72 92 ];
  93 + $params = json_encode($params);
  94 +
  95 + $data = array(
  96 + '119.120'.'.'.rand(1,255).'.'.rand(1,255),
  97 + '124.174'.'.'.rand(1,255).'.'.rand(1,255),
  98 + '116.249'.'.'.rand(1,255).'.'.rand(1,255),
  99 + '118.125'.'.'.rand(1,255).'.'.rand(1,255),
  100 + '42.175'.'.'.rand(1,255).'.'.rand(1,255),
  101 + '124.162'.'.'.rand(1,255).'.'.rand(1,255),
  102 + '211.167'.'.'.rand(1,255).'.'.rand(1,255),
  103 + '58.206'.'.'.rand(1,255).'.'.rand(1,255),
  104 + '117.24'.'.'.rand(1,255).'.'.rand(1,255),
  105 + '203.93'.'.'.rand(1,255).'.'.rand(1,255),
  106 + );
  107 +
  108 + $ip = $data[array_rand($data)];
  109 + $header = [
  110 + 'CLIENT-IP:'.$ip,
  111 + 'X-FORWARDED-FOR:'.$ip,
  112 + ];
  113 + $params = '{"barcode":"0002000100010001","device_id":"DGDEVBICEID00BB8", "software_version":"V1.0.1", "hardware_version":"", "timestamp":'.time().'}';
  114 + $postResult = Http::POST($url, $params,true, $header);
73 115  
74   - $postResult = Http::POST($url, json_encode($params));
75 116 echo $postResult;
76 117 }
77 118  
... ... @@ -80,13 +121,13 @@ class TestController extends Controller
80 121 //actionCheckAppVersion
81 122 $url = 'http://47.107.95.101/app-api/web/checkAppVersion';
82 123 $params = [
83   - 'barcode' => '0001000100010001',
84   - 'device_id' => 'DEVICE000001',
85   - 'current_version' => 'V1.0.1',
86   - 'package_name' => 'V1.0.2安装包',
  124 + 'barcode' => '0004000100010001',
  125 + 'device_id' => 'V1.00.20190708',
  126 + 'current_version' => '1',
  127 + 'package_name' => 'com.kingboard.settings',
87 128 ];
88   - //$params = json_decode($params);
89   - $params = '{"barcode":"0001000100010001","device_id":"DGDEVBICEID00001","package_name":"com.kingboard.settings","current_version":"1"}';
  129 + $params = json_encode($params);
  130 + //$params = '{"barcode":"0004000100010001","device_id":"DGDEVBICEID00001","package_name":"com.kingboard.settings","current_version":"V1.00.20190708"}';
90 131  
91 132 $postResult = Http::POST($url, $params);
92 133 echo $postResult;
... ... @@ -100,11 +141,11 @@ class TestController extends Controller
100 141 $params = [
101 142 'barcode' => '0001000100010001',
102 143 'device_id' => 'DGDEVBICEID00001',
103   - 'software_version' => 'V1.0.1',
104   - 'hardware_version' => 'V1.0.1',
  144 + 'software_version' => 'V1.00.1A.20191002',
  145 + 'hardware_version' => '',
105 146 ];
106 147 $params = json_encode($params);
107   - $params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","software_version":"V1.00.1A.20191002","hardware_version":""}';
  148 + //$params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","software_version":"V1.00.1A.20191002","hardware_version":""}';
108 149 $postResult = Http::POST($url, $params);
109 150 echo $postResult;
110 151 }
... ... @@ -115,16 +156,19 @@ class TestController extends Controller
115 156 {
116 157 //actionCheckAppVersion
117 158 $url = 'http://47.107.95.101/app-api/web/reportOtaUpgradeEvent';
118   - //$url = 'http://kingb:8012/app-api/web/reportOtaUpgradeEvent';
  159 + $url = 'http://kingb:8012/app-api/web/reportOtaUpgradeEvent';
119 160  
120 161 $params = [
121   - 'barcode' => '0001000100010001',
122   - 'device_id' => 'DGDEVBICEID00001',
123   - 'software_version' => 'V1.0.1',
124   - 'hardware_version' => 'V1.0.1',
  162 + "barcode" => '0001000100010001',
  163 + "device_id" => 'DGDEVBICEID00002',
  164 + "current_version" => 'V1.00.1A.20191022',
  165 + "target_version" => 'V1.00.1A.20191022',
  166 + "status" => 3,
  167 + "error_code" => '',
  168 + "timestamp" => time()
125 169 ];
126 170 $params = json_encode($params);
127   - $params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","current_version":"V1.00.1A.20191022", "target_version":"V1.00.1A.20191022","status":5,"timestamp":"1572759793"}';
  171 + //$params = '{"barcode":"0001000100010001","device_id":"DGDEVBICEID00002", "current_version":"V1.00.1A.20191022", "target_version":"V1.00.1A.20191023","status":5,"error_code":"", "timestamp":"1572759793"}';
128 172 $postResult = Http::POST($url, $params);
129 173 echo $postResult;
130 174 }
... ... @@ -136,14 +180,14 @@ class TestController extends Controller
136 180 $url = 'http://kingb:8012/app-api/web/reportAppUpgradeEvent';
137 181  
138 182 $params = [
139   - 'barcode' => '0001000100010001',
140   - 'device_id' => 'DGDEVBICEID00001',
  183 + 'barcode' => '0001000100010002',
  184 + 'device_id' => 'DGDEVBICEID00002',
141 185 'current_version' => 'V1.0.1',
142 186 'target_version' => 'V1.0.1',
143 187 'package_name' => 'com.app.king.dd',
144   - "status" => 0,
  188 + "status" => 5,
145 189 "error_code" => '',
146   - "timestamp" => 1572767677
  190 + "timestamp" => time()
147 191  
148 192 ];
149 193 $params = json_encode($params);
... ... @@ -176,20 +220,19 @@ class TestController extends Controller
176 220 }
177 221  
178 222 /**
179   - *
  223 + * 授权设备,加密过
180 224 */
181 225 public function actionAuthDevice()
182 226 {
183 227 $url = 'http://kingb:8012/app-api/web/authDevice';
184 228 $url = 'http://47.107.95.101/app-api/web/authDevice';
185   - $manufactureNo = '0001';
186   - $device_id = 'DEVICE00000B';
  229 + $manufactureNo = '000E';
  230 + $device_id = 'HDEVICEG0000001';
187 231 $projectNo = '0001';
188   - $modelNo = '0001';
189   - $productionNo = '0001';
  232 + $modelNo = '000B';
  233 + $productionNo = '0010';
190 234 $timestamp = time();
191 235  
192   -
193 236 $randKey = Utils::rand(16);
194 237 $salt = "13456";
195 238 $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt);
... ... @@ -213,6 +256,7 @@ class TestController extends Controller
213 256 'content' => $aes->encrypt($deviceParams)
214 257 ];
215 258 $params = json_encode($params);
  259 +
216 260 $postResult = Http::POST($url, $params);
217 261  
218 262 $postResult = json_decode($postResult, true);
... ... @@ -222,12 +266,40 @@ class TestController extends Controller
222 266 }
223 267  
224 268  
  269 + public function actionAuthDeviceN()
  270 + {
  271 + $url = 'http://kingb:8012/app-api/web/authDeviceN';
  272 + //$url = 'http://47.107.95.101/app-api/web/authDeviceN';
  273 + $manufactureNo = '0001';
  274 + $device_id = 'BDEVICEG0000006';
  275 + $projectNo = '0001';
  276 + $modelNo = '0001';
  277 + $productionNo = '0002';
  278 + $timestamp = time();
  279 +
  280 + $salt = "13456";
  281 + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt);
  282 + $deviceParams = [
  283 + 'manufacture' => $manufactureNo,
  284 + 'device_id' => $device_id,
  285 + 'project' => $projectNo,
  286 + 'model' => $modelNo,
  287 + 'production' => $productionNo,
  288 + 'timestamp' => $timestamp,
  289 + 'sign' => $sign,
  290 + ];
  291 + $deviceParams = json_encode($deviceParams);
  292 + $postResult = Http::POST($url, $deviceParams);
  293 +
  294 + echo $postResult;
  295 + }
  296 +
225 297 public function actionA()
226 298 {
227 299 $str = "87654321";
228 300 $rsaKeys = Yii::$app->params['AUTH_DEVICE_RSA_PKCS_1'];
229 301 $rsa = new RSACrypt($rsaKeys['PRIVATE'], $rsaKeys['PUBLIC']);
230   - $deStr = "SRAeq\/pjyDA+0TtCTo06cbskERUUXvmGh3FdocS9AFmMsYDN\/TACQeU9pZhB5zKYHsJSTo\/JawuN\nG0ZBFd1B6TvJ\/1PkX30cvL9i03Ujo1JVe1njhMrig3mvNd7RDAylNzaFAAHU\/Wb\/94kf7gRGNyTj\ngj78Oe0bLdwasz4vBFE=\n";
  302 + $deStr = "Eu2nx0APQBcicPXuw1r+4vKJCPJ5ln5uzepYXSJ1mfSaymjgdGdXT9s5SxNHXe4cK8ZRO9wK7RxO\/MjSJwOoTDvy7xez+rC96yBDJV3vZ5bv85OtKc8k6R60mfc\/Fasw+dTI1FBKs9BNY2fs6w+67HJqeUD1JenuZSyX4ryWM44=";
231 303  
232 304 //echo $deStr."\r\n";
233 305 $randKey = $rsa->decrypt($deStr);
... ... @@ -235,9 +307,95 @@ echo $randKey."\r\n";
235 307 $randKey = substr(md5($randKey.'12356'), 8, 16)."\r\n";
236 308 echo $randKey."\r\n";
237 309 $aes = new Aes($randKey);
238   - echo $aes->decrypt("nZ8U4BlG0vxckrPM0lquvGDZ9Yuv32+MbYKZG8cqfMGJcltEEquc9v88bzpzm2dpkX5nR4ugLxfw\nc65yqYouozxyX+UdXPNHqaOYIQK\/MVWi+GkYsEafezJhozyGrLWAo7hHIdYcV\/fnm7xyEAaN\/91Q\nWdrhYmGvMf1IusGPBDaRnZtJ+mR1MhElZP73mQppFlusI8EJVFcEx\/z\/SkE9ywhPqAsK721xV+Fe\ncd7sNKs=\n");
  310 + echo $aes->decrypt("1nnp92dtMfxUSvmZHQPeWp4smz0DzVzp4ZDJHdR1R1Dt8KvPYZ2WC6TEc+ACbwOxCtop6gBIn1DNNNL5cVw3nU8kl4yRXIsMojciK064rekOCVmRln3Z2NHn6SThmcLcwthxwHt0rlXVdeWecvhpXve1QPk0eD1qEfGsP2B3D4X9iUlZ6JZndM3og7XpukrawtPWazIVaBqlfa4ugfD86mAHlD+RYl+ZW2QpDGVGPXk=");
  311 +
  312 + }
  313 +
  314 + /**
  315 + * 批量产生授权数据
  316 + */
  317 + public function actionPGTest()
  318 + {
  319 + $url = 'http://47.107.95.101/app-api/web/authDevice';
  320 + $manufactureNo = '000E';
  321 +
  322 + $projectNo = '0001';
  323 + $modelNo = '000B';
  324 + $productionNo = '0010';
239 325  
  326 + $salt = "13456";
  327 + $rsaKeys = Yii::$app->params['AUTH_DEVICE_RSA_PKCS_1'];
  328 + $rsa = new RSACrypt($rsaKeys['PRIVATE'], $rsaKeys['PUBLIC']);
  329 + for($i = 1; $i < 5000; $i++) {
  330 + $device_id = 'HDEVICEG000000'.sprintf('%04X',$i);
  331 + $timestamp = time();
  332 + $randKey = Utils::rand(16);
  333 +
  334 + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt);
  335 + $deviceParams = [
  336 + 'manufacture' => $manufactureNo,
  337 + 'device_id' => $device_id,
  338 + 'project' => $projectNo,
  339 + 'model' => $modelNo,
  340 + 'production' => $productionNo,
  341 + 'timestamp' => $timestamp,
  342 + 'sign' => $sign,
  343 + ];
  344 + $deviceParams = json_encode($deviceParams);
  345 + $randomKey = $rsa->encrypt($randKey);
  346 + $aes = new Aes(substr(md5($randKey.'12356'), 8, 16));
  347 + $params = [
  348 + 'randomKey' => $randomKey,
  349 + 'content' => $aes->encrypt($deviceParams)
  350 + ];
  351 + $params = json_encode($params);
  352 + //echo $url." POST ".$params."\r\n";
  353 + $postResult = Http::POST($url, $params);
  354 +
  355 + $postResult = json_decode($postResult, true);
  356 + $decodeJson = $aes->decrypt($postResult['content']);
  357 + echo $decodeJson."\r\n";
  358 + }
240 359 }
241 360  
  361 + /**
  362 + * 批量产生不加密的设备授权数据
  363 + */
  364 + public function actionPgnTest()
  365 + {
  366 + $url = 'http://47.107.95.101/app-api/web/authDeviceN';
  367 + $manufactureNo = '000E';
  368 + $projectNo = '0001';
  369 + $modelNo = '000B';
  370 + $productionNo = '0010';
  371 + for($i = 1; $i < 3; $i++) {
  372 + $device_id = 'ADEVICEG000000'.sprintf('%04X',$i);
  373 + $timestamp = time();
  374 + $salt = "13456";
  375 + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt);
  376 + $deviceParams = [
  377 + 'manufacture' => $manufactureNo,
  378 + 'device_id' => $device_id,
  379 + 'project' => $projectNo,
  380 + 'model' => $modelNo,
  381 + 'production' => $productionNo,
  382 + 'timestamp' => $timestamp,
  383 + 'sign' => $sign,
  384 + ];
  385 + $deviceParams = json_encode($deviceParams);
  386 + echo $url." POST ". $deviceParams."\r\n";
  387 + }
  388 +
  389 + }
  390 + public function actionB()
  391 + {
  392 +
  393 + $deviceModel = DeviceRepository::findBatchRandOne(2);
  394 + if ($deviceModel) {
  395 + echo $deviceModel->id;
  396 + $deviceModel->device_id = '000000000012';
  397 + $deviceModel->save();
  398 + }
  399 + }
242 400 }
243 401  
... ...
domain/device/Device.php
... ... @@ -217,8 +217,8 @@ class Device
217 217 $e->mac = '';
218 218 $e->status = 0;
219 219 $tt = time();
220   - // 找到未空白未绑定的设备序列号
221   - $newDeviceModel = DeviceRepository::findOne(['device_id' => null,'batch_id' => $batchId, 'is_delete' => 0, 'status' => DeviceStatus::NO_AUTH]);
  220 + // 找到未空白未绑定的设备序列号, 必须随机找出对应的序列号,否则多个并发的时候一直都出错
  221 + $newDeviceModel = DeviceRepository::findBatchRandOne($batchId);
222 222  
223 223 if (empty($newDeviceModel)) {
224 224 $e->status = 8;
... ...
domain/device/DeviceRepository.php
... ... @@ -9,7 +9,7 @@ use domain\device\models\DeviceStats;
9 9  
10 10 class DeviceRepository
11 11 {
12   - const DEBUG = true;
  12 + const DEBUG = false;
13 13 private static function myLog($str)
14 14 {
15 15 if (false == self::DEBUG) {
... ... @@ -153,4 +153,18 @@ class DeviceRepository
153 153  
154 154 return false;
155 155 }
  156 +
  157 + /**
  158 + * @param $batchId
  159 + * @return array|null|\yii\db\ActiveRecord
  160 + */
  161 + static function findBatchRandOne($batchId)
  162 + {
  163 + $deviceFind = DeviceModel::find();
  164 + $deviceFind->where(['device_id' => null,'batch_id' => $batchId, 'is_delete' => 0, 'status' => DeviceStatus::NO_AUTH]);
  165 + $deviceFind->orderBy("rand()");
  166 + $nullDevice = $deviceFind->one();
  167 +
  168 + return $nullDevice;
  169 + }
156 170 }
157 171 \ No newline at end of file
... ...