diff --git a/common/helpers/Utils.php b/common/helpers/Utils.php index 0487e50..242c9a5 100644 --- a/common/helpers/Utils.php +++ b/common/helpers/Utils.php @@ -8,7 +8,7 @@ use Faker\Provider\Uuid; class Utils { private static $vKey = 'thisisakey0olk2i8suwjshwks'; - private static $GDKey = '51125f9275f98d30e78f0d4a11251983'; // 高德IP地址获取归属地 KEY 日配额100000次 + private static $GDKey = 'a09624f98c82f573140813d7fa25b805'; // 高德IP地址获取归属地 KEY 日配额100000次 public static function getVKey() { diff --git a/console/controllers/TestController.php b/console/controllers/TestController.php index d582d47..fe51fc0 100644 --- a/console/controllers/TestController.php +++ b/console/controllers/TestController.php @@ -7,6 +7,7 @@ namespace console\controllers; * Time: 11:32 AM */ +use domain\device\DeviceRepository; use Yii; use common\exts\Aes; use common\exts\RSACrypt; @@ -25,6 +26,24 @@ class TestController extends Controller { $no = hexdec('000A') + 1; echo sprintf('%04X', $no); + echo "=================\r\n"; + $v = "0:998654321:A0"; + //echo preg_match('/^[0-9a-fA-F:]{12,18}$/', $v); + + //echo Utils::macGenerate(); + + //echo "\r\n"; + //echo Utils::coverToMacAddress("aaaddddd"); + $regex = '/^([0-9a-fA-F]{2})(([:|-]{0,1}[0-9a-fA-F]{2}){5})$/'; + if (preg_match($regex, $v)) { + $v = str_replace('-', '',$v); + $v = str_replace(':','', $v); + echo Utils::coverToMacAddress($v); + } + + + + echo "\r\n"; } public function actionCheckSign() @@ -63,15 +82,37 @@ class TestController extends Controller public function actionDeviceSt() { $url = 'http://kingb:8012/app-api/web/reportDeviceVersion'; + //$url = 'http://47.107.95.101/app-api/web/reportDeviceVersion'; $params = [ - 'barcode' => '0001000100010001', - 'device_id' => 'DEVICE003', - 'software_version' => 'V1.0.1', - 'hardware_version' => 'V1.0.2', - 'timestamp' => 1500000000 + 'barcode' => '0002000100010001', + 'device_id' => 'DEVICE000000002', + 'software_version' => 'V1.0.20191001', + 'hardware_version' => '', + 'timestamp' => time() ]; + $params = json_encode($params); + + $data = array( + '119.120'.'.'.rand(1,255).'.'.rand(1,255), + '124.174'.'.'.rand(1,255).'.'.rand(1,255), + '116.249'.'.'.rand(1,255).'.'.rand(1,255), + '118.125'.'.'.rand(1,255).'.'.rand(1,255), + '42.175'.'.'.rand(1,255).'.'.rand(1,255), + '124.162'.'.'.rand(1,255).'.'.rand(1,255), + '211.167'.'.'.rand(1,255).'.'.rand(1,255), + '58.206'.'.'.rand(1,255).'.'.rand(1,255), + '117.24'.'.'.rand(1,255).'.'.rand(1,255), + '203.93'.'.'.rand(1,255).'.'.rand(1,255), + ); + + $ip = $data[array_rand($data)]; + $header = [ + 'CLIENT-IP:'.$ip, + 'X-FORWARDED-FOR:'.$ip, + ]; + $params = '{"barcode":"0002000100010001","device_id":"DGDEVBICEID00BB8", "software_version":"V1.0.1", "hardware_version":"", "timestamp":'.time().'}'; + $postResult = Http::POST($url, $params,true, $header); - $postResult = Http::POST($url, json_encode($params)); echo $postResult; } @@ -80,13 +121,13 @@ class TestController extends Controller //actionCheckAppVersion $url = 'http://47.107.95.101/app-api/web/checkAppVersion'; $params = [ - 'barcode' => '0001000100010001', - 'device_id' => 'DEVICE000001', - 'current_version' => 'V1.0.1', - 'package_name' => 'V1.0.2安装包', + 'barcode' => '0004000100010001', + 'device_id' => 'V1.00.20190708', + 'current_version' => '1', + 'package_name' => 'com.kingboard.settings', ]; - //$params = json_decode($params); - $params = '{"barcode":"0001000100010001","device_id":"DGDEVBICEID00001","package_name":"com.kingboard.settings","current_version":"1"}'; + $params = json_encode($params); + //$params = '{"barcode":"0004000100010001","device_id":"DGDEVBICEID00001","package_name":"com.kingboard.settings","current_version":"V1.00.20190708"}'; $postResult = Http::POST($url, $params); echo $postResult; @@ -100,11 +141,11 @@ class TestController extends Controller $params = [ 'barcode' => '0001000100010001', 'device_id' => 'DGDEVBICEID00001', - 'software_version' => 'V1.0.1', - 'hardware_version' => 'V1.0.1', + 'software_version' => 'V1.00.1A.20191002', + 'hardware_version' => '', ]; $params = json_encode($params); - $params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","software_version":"V1.00.1A.20191002","hardware_version":""}'; + //$params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","software_version":"V1.00.1A.20191002","hardware_version":""}'; $postResult = Http::POST($url, $params); echo $postResult; } @@ -115,16 +156,19 @@ class TestController extends Controller { //actionCheckAppVersion $url = 'http://47.107.95.101/app-api/web/reportOtaUpgradeEvent'; - //$url = 'http://kingb:8012/app-api/web/reportOtaUpgradeEvent'; + $url = 'http://kingb:8012/app-api/web/reportOtaUpgradeEvent'; $params = [ - 'barcode' => '0001000100010001', - 'device_id' => 'DGDEVBICEID00001', - 'software_version' => 'V1.0.1', - 'hardware_version' => 'V1.0.1', + "barcode" => '0001000100010001', + "device_id" => 'DGDEVBICEID00002', + "current_version" => 'V1.00.1A.20191022', + "target_version" => 'V1.00.1A.20191022', + "status" => 3, + "error_code" => '', + "timestamp" => time() ]; $params = json_encode($params); - $params = '{"barcode":"0001000100010001","device_id":"DEVICEID00001","current_version":"V1.00.1A.20191022", "target_version":"V1.00.1A.20191022","status":5,"timestamp":"1572759793"}'; + //$params = '{"barcode":"0001000100010001","device_id":"DGDEVBICEID00002", "current_version":"V1.00.1A.20191022", "target_version":"V1.00.1A.20191023","status":5,"error_code":"", "timestamp":"1572759793"}'; $postResult = Http::POST($url, $params); echo $postResult; } @@ -136,14 +180,14 @@ class TestController extends Controller $url = 'http://kingb:8012/app-api/web/reportAppUpgradeEvent'; $params = [ - 'barcode' => '0001000100010001', - 'device_id' => 'DGDEVBICEID00001', + 'barcode' => '0001000100010002', + 'device_id' => 'DGDEVBICEID00002', 'current_version' => 'V1.0.1', 'target_version' => 'V1.0.1', 'package_name' => 'com.app.king.dd', - "status" => 0, + "status" => 5, "error_code" => '', - "timestamp" => 1572767677 + "timestamp" => time() ]; $params = json_encode($params); @@ -176,20 +220,19 @@ class TestController extends Controller } /** - * + * 授权设备,加密过 */ public function actionAuthDevice() { $url = 'http://kingb:8012/app-api/web/authDevice'; $url = 'http://47.107.95.101/app-api/web/authDevice'; - $manufactureNo = '0001'; - $device_id = 'DEVICE00000B'; + $manufactureNo = '000E'; + $device_id = 'HDEVICEG0000001'; $projectNo = '0001'; - $modelNo = '0001'; - $productionNo = '0001'; + $modelNo = '000B'; + $productionNo = '0010'; $timestamp = time(); - $randKey = Utils::rand(16); $salt = "13456"; $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt); @@ -213,6 +256,7 @@ class TestController extends Controller 'content' => $aes->encrypt($deviceParams) ]; $params = json_encode($params); + $postResult = Http::POST($url, $params); $postResult = json_decode($postResult, true); @@ -222,12 +266,40 @@ class TestController extends Controller } + public function actionAuthDeviceN() + { + $url = 'http://kingb:8012/app-api/web/authDeviceN'; + //$url = 'http://47.107.95.101/app-api/web/authDeviceN'; + $manufactureNo = '0001'; + $device_id = 'BDEVICEG0000006'; + $projectNo = '0001'; + $modelNo = '0001'; + $productionNo = '0002'; + $timestamp = time(); + + $salt = "13456"; + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt); + $deviceParams = [ + 'manufacture' => $manufactureNo, + 'device_id' => $device_id, + 'project' => $projectNo, + 'model' => $modelNo, + 'production' => $productionNo, + 'timestamp' => $timestamp, + 'sign' => $sign, + ]; + $deviceParams = json_encode($deviceParams); + $postResult = Http::POST($url, $deviceParams); + + echo $postResult; + } + public function actionA() { $str = "87654321"; $rsaKeys = Yii::$app->params['AUTH_DEVICE_RSA_PKCS_1']; $rsa = new RSACrypt($rsaKeys['PRIVATE'], $rsaKeys['PUBLIC']); - $deStr = "SRAeq\/pjyDA+0TtCTo06cbskERUUXvmGh3FdocS9AFmMsYDN\/TACQeU9pZhB5zKYHsJSTo\/JawuN\nG0ZBFd1B6TvJ\/1PkX30cvL9i03Ujo1JVe1njhMrig3mvNd7RDAylNzaFAAHU\/Wb\/94kf7gRGNyTj\ngj78Oe0bLdwasz4vBFE=\n"; + $deStr = "Eu2nx0APQBcicPXuw1r+4vKJCPJ5ln5uzepYXSJ1mfSaymjgdGdXT9s5SxNHXe4cK8ZRO9wK7RxO\/MjSJwOoTDvy7xez+rC96yBDJV3vZ5bv85OtKc8k6R60mfc\/Fasw+dTI1FBKs9BNY2fs6w+67HJqeUD1JenuZSyX4ryWM44="; //echo $deStr."\r\n"; $randKey = $rsa->decrypt($deStr); @@ -235,9 +307,95 @@ echo $randKey."\r\n"; $randKey = substr(md5($randKey.'12356'), 8, 16)."\r\n"; echo $randKey."\r\n"; $aes = new Aes($randKey); - echo $aes->decrypt("nZ8U4BlG0vxckrPM0lquvGDZ9Yuv32+MbYKZG8cqfMGJcltEEquc9v88bzpzm2dpkX5nR4ugLxfw\nc65yqYouozxyX+UdXPNHqaOYIQK\/MVWi+GkYsEafezJhozyGrLWAo7hHIdYcV\/fnm7xyEAaN\/91Q\nWdrhYmGvMf1IusGPBDaRnZtJ+mR1MhElZP73mQppFlusI8EJVFcEx\/z\/SkE9ywhPqAsK721xV+Fe\ncd7sNKs=\n"); + echo $aes->decrypt("1nnp92dtMfxUSvmZHQPeWp4smz0DzVzp4ZDJHdR1R1Dt8KvPYZ2WC6TEc+ACbwOxCtop6gBIn1DNNNL5cVw3nU8kl4yRXIsMojciK064rekOCVmRln3Z2NHn6SThmcLcwthxwHt0rlXVdeWecvhpXve1QPk0eD1qEfGsP2B3D4X9iUlZ6JZndM3og7XpukrawtPWazIVaBqlfa4ugfD86mAHlD+RYl+ZW2QpDGVGPXk="); + + } + + /** + * 批量产生授权数据 + */ + public function actionPGTest() + { + $url = 'http://47.107.95.101/app-api/web/authDevice'; + $manufactureNo = '000E'; + + $projectNo = '0001'; + $modelNo = '000B'; + $productionNo = '0010'; + $salt = "13456"; + $rsaKeys = Yii::$app->params['AUTH_DEVICE_RSA_PKCS_1']; + $rsa = new RSACrypt($rsaKeys['PRIVATE'], $rsaKeys['PUBLIC']); + for($i = 1; $i < 5000; $i++) { + $device_id = 'HDEVICEG000000'.sprintf('%04X',$i); + $timestamp = time(); + $randKey = Utils::rand(16); + + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt); + $deviceParams = [ + 'manufacture' => $manufactureNo, + 'device_id' => $device_id, + 'project' => $projectNo, + 'model' => $modelNo, + 'production' => $productionNo, + 'timestamp' => $timestamp, + 'sign' => $sign, + ]; + $deviceParams = json_encode($deviceParams); + $randomKey = $rsa->encrypt($randKey); + $aes = new Aes(substr(md5($randKey.'12356'), 8, 16)); + $params = [ + 'randomKey' => $randomKey, + 'content' => $aes->encrypt($deviceParams) + ]; + $params = json_encode($params); + //echo $url." POST ".$params."\r\n"; + $postResult = Http::POST($url, $params); + + $postResult = json_decode($postResult, true); + $decodeJson = $aes->decrypt($postResult['content']); + echo $decodeJson."\r\n"; + } } + /** + * 批量产生不加密的设备授权数据 + */ + public function actionPgnTest() + { + $url = 'http://47.107.95.101/app-api/web/authDeviceN'; + $manufactureNo = '000E'; + $projectNo = '0001'; + $modelNo = '000B'; + $productionNo = '0010'; + for($i = 1; $i < 3; $i++) { + $device_id = 'ADEVICEG000000'.sprintf('%04X',$i); + $timestamp = time(); + $salt = "13456"; + $sign = md5($manufactureNo. $projectNo. $modelNo . $productionNo . $timestamp .$device_id. $salt); + $deviceParams = [ + 'manufacture' => $manufactureNo, + 'device_id' => $device_id, + 'project' => $projectNo, + 'model' => $modelNo, + 'production' => $productionNo, + 'timestamp' => $timestamp, + 'sign' => $sign, + ]; + $deviceParams = json_encode($deviceParams); + echo $url." POST ". $deviceParams."\r\n"; + } + + } + public function actionB() + { + + $deviceModel = DeviceRepository::findBatchRandOne(2); + if ($deviceModel) { + echo $deviceModel->id; + $deviceModel->device_id = '000000000012'; + $deviceModel->save(); + } + } } diff --git a/domain/device/Device.php b/domain/device/Device.php index 9cce9ca..2bd8396 100644 --- a/domain/device/Device.php +++ b/domain/device/Device.php @@ -217,8 +217,8 @@ class Device $e->mac = ''; $e->status = 0; $tt = time(); - // 找到未空白未绑定的设备序列号 - $newDeviceModel = DeviceRepository::findOne(['device_id' => null,'batch_id' => $batchId, 'is_delete' => 0, 'status' => DeviceStatus::NO_AUTH]); + // 找到未空白未绑定的设备序列号, 必须随机找出对应的序列号,否则多个并发的时候一直都出错 + $newDeviceModel = DeviceRepository::findBatchRandOne($batchId); if (empty($newDeviceModel)) { $e->status = 8; diff --git a/domain/device/DeviceRepository.php b/domain/device/DeviceRepository.php index 5c03100..06d2ac5 100644 --- a/domain/device/DeviceRepository.php +++ b/domain/device/DeviceRepository.php @@ -9,7 +9,7 @@ use domain\device\models\DeviceStats; class DeviceRepository { - const DEBUG = true; + const DEBUG = false; private static function myLog($str) { if (false == self::DEBUG) { @@ -153,4 +153,18 @@ class DeviceRepository return false; } + + /** + * @param $batchId + * @return array|null|\yii\db\ActiveRecord + */ + static function findBatchRandOne($batchId) + { + $deviceFind = DeviceModel::find(); + $deviceFind->where(['device_id' => null,'batch_id' => $batchId, 'is_delete' => 0, 'status' => DeviceStatus::NO_AUTH]); + $deviceFind->orderBy("rand()"); + $nullDevice = $deviceFind->one(); + + return $nullDevice; + } } \ No newline at end of file -- libgit2 0.21.0