AuthDeviceController.php
2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
namespace app\api\controllers;
use Yii;
use common\helpers\Utils;
use common\helpers\Log as AppLog;
use domain\device\DeviceRepository;
use domain\device\Device;
use domain\device\DeviceStatus;
use stdClass;
use function date;
use function count;
use function time;
/**
* 设备授权-控制器
* Class AuthDeviceController
* @package app\api\controllers
* manufacture 厂商ID string 是个数字字符串,例如“001”代表 XX厂商
device_id 设备id string 设备的ID
project 项目ID string 项目ID
model 型号ID string 例如 001
timestamp 时间戳 int 例如 2019-10-10 01:01:01
sign 签名 string 用来认证请求是否合法 签名组合为 md5(manufacture + project+ model + production + timestamp + salt) salt 为客户端和服务器约定的key
production 生产日期ID string 日期 例如001
*
*/
class AuthDeviceController extends BaseController
{
const SIGN_SALT = '13456';
private static function myLog($str)
{
AppLog::DEBUG($str);
}
/**
* 设备授权接口
* @return stdClass
*/
public function actionIndex()
{
$e = new stdClass();
$e->status = 1;
$e->message = 'message';
$e->serial_no = '';;
$e->mac = '';
$getPostData = file_get_contents('php://input', 'r');
self::myLog('actionIndex postData:'.$getPostData);
if (!$getPostData) {
$e->status = 1;
$e->message = '传入的数据为空';
return $e;
}
$getPostData = json_decode($getPostData, true);
$manufactureNo = isset($getPostData['manufacture'])?$getPostData['manufacture']:'';
$deviceId = isset($getPostData['device_id'])?$getPostData['device_id']:'';
$projectNo = isset($getPostData['project'])?$getPostData['project']:'';
$modelNo = isset($getPostData['model'])?$getPostData['model']:'';
$productionNo = isset($getPostData['production'])?$getPostData['production']:'';
$timestamp = isset($getPostData['timestamp'])?$getPostData['timestamp']:'';
$sign = isset($getPostData['sign'])?$getPostData['sign']:'';
$salt = self::SIGN_SALT;
$makeSign = md5($manufactureNo . $projectNo. $modelNo . $productionNo . $timestamp . $deviceId. $salt);
if ($sign != $makeSign) {
$e->status = 2;
$e->message = '签名出错';
return $e;
}
$authResult = Device::authDevice($deviceId, $manufactureNo, $projectNo, $modelNo, $productionNo);
$e->status = $authResult->status;
$e->message = $authResult->message;
if ($authResult->success) {
$e->mac = $authResult->mac;
$e->serial_no = $authResult->serial_no;
}
return $e;
}
}