From bb241fbb2e36f5e24776b419ed1fdac3f294dde6 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 18 Jul 2023 11:01:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=89=E6=96=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/ThirdAppController.php | 56 ++++++++++++ app/Admin/Controllers/ThirdLogController.php | 40 +++++++++ app/Admin/routes.php | 3 + .../ThirdApi/SendSmsController.php | 58 ++++++++++++ app/Http/Middleware/ApiCustomToken.php | 90 +++++++++++++++++++ app/Http/Middleware/VerifyCsrfToken.php | 1 + app/Models/ThirdAccess.php | 24 +++++ app/Models/ThirdLog.php | 11 +++ ..._01_091003_create_third_accesses_table.php | 34 +++++++ ...2_05_10_171258_create_third_logs_table.php | 40 +++++++++ lang/zh_CN/third-app.php | 15 ++++ lang/zh_CN/third-log.php | 19 ++++ routes/web.php | 10 +++ 13 files changed, 401 insertions(+) create mode 100644 app/Admin/Controllers/ThirdAppController.php create mode 100644 app/Admin/Controllers/ThirdLogController.php create mode 100644 app/Http/Controllers/ThirdApi/SendSmsController.php create mode 100644 app/Http/Middleware/ApiCustomToken.php create mode 100644 app/Models/ThirdAccess.php create mode 100644 app/Models/ThirdLog.php create mode 100644 database/migrations/2021_09_01_091003_create_third_accesses_table.php create mode 100644 database/migrations/2022_05_10_171258_create_third_logs_table.php create mode 100644 lang/zh_CN/third-app.php create mode 100644 lang/zh_CN/third-log.php diff --git a/app/Admin/Controllers/ThirdAppController.php b/app/Admin/Controllers/ThirdAppController.php new file mode 100644 index 0000000..e7821c4 --- /dev/null +++ b/app/Admin/Controllers/ThirdAppController.php @@ -0,0 +1,56 @@ +column('id')->sortable(); + $grid->column('third_name'); + $grid->column('third_appid')->copyable(); + $grid->column('third_appkey')->copyable(); + $grid->column('created_at')->sortable(); + + $grid->model()->orderBy('created_at', 'desc'); + + $grid->showCreateButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.third_apps.create')); + $grid->showQuickEditButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.third_apps.edit')); + $grid->showDeleteButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.third_apps.destroy')); + + $grid->filter(function (Grid\Filter $filter) { + $filter->equal('third_name')->width(3); + + }); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new ThirdAccess(), function (Form $form) { + $form->display('id'); + $form->text('third_name')->required(); + $form->text('third_appid')->required(); + + $form->display('created_at'); + $form->display('updated_at'); + }); + } +} diff --git a/app/Admin/Controllers/ThirdLogController.php b/app/Admin/Controllers/ThirdLogController.php new file mode 100644 index 0000000..0f3db19 --- /dev/null +++ b/app/Admin/Controllers/ThirdLogController.php @@ -0,0 +1,40 @@ +column('id')->sortable(); + $grid->column('app_id')->copyable(); + $grid->column('api_path')->copyable(); + $grid->column('api_name'); + $grid->column('sign_status')->bool(); + $grid->column('http_code'); + $grid->column('request_params')->copyable(); + $grid->column('response_params')->copyable(); + $grid->column('created_at')->sortable(); + + $grid->model()->orderBy('created_at', 'desc'); + $grid->disableActions(); + + $grid->filter(function (Grid\Filter $filter) { + $filter->equal('app_id')->width(3); + + }); + }); + } + +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 9c2a9a4..6349fea 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -23,4 +23,7 @@ Route::group([ $router->resource('crop-yields', 'CropYieldController')->names('crop_yields'); $router->resource('devices', 'DeviceController')->names('devices'); + + $router->resource('third-apps', 'ThirdAppController')->names('third_apps'); + $router->resource('third-logs', 'ThirdLogController')->names('third_logs'); }); diff --git a/app/Http/Controllers/ThirdApi/SendSmsController.php b/app/Http/Controllers/ThirdApi/SendSmsController.php new file mode 100644 index 0000000..5bce065 --- /dev/null +++ b/app/Http/Controllers/ThirdApi/SendSmsController.php @@ -0,0 +1,58 @@ +log_id ?? 0; + $log = ThirdLog::find($logId); + if(empty($log)){ + return response()->json([ + 'respCd'=>'99', + 'respMsg' => '系统错误', + ], 500); + } + $log->api_name = '发送农机开机提醒'; + + $resData = [ + 'respCd'=>'00', + 'respMsg'=>'', + ]; + + $log->resp_status = 1; + $log->response_params = json_encode($resData); + $log->save(); + + return response()->json($resData); + } + + public function makeSign(){ + $params = [ + 'appKey'=>'aaaa', + 'timeStamp'=>time(), + // 'startTime'=>'2022-05-01 00:00:00', + // 'endTime'=>'2022-06-01 00:00:00', + // 'signDate'=>'2022-6-1', + ]; + + $appSecret = 'yK44SmeRktiXnn4QrapE3XOykcKsDM0O'; + + $paramStr = ''; + + ksort($params); + foreach ($params as $k=>$v) { + $paramStr .= "$k=".$v."&"; + } + $paramStr = substr($paramStr, 0, -1); + + $params['sign'] = md5($paramStr.$appSecret); + + return response()->json($params); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/ApiCustomToken.php b/app/Http/Middleware/ApiCustomToken.php new file mode 100644 index 0000000..3479330 --- /dev/null +++ b/app/Http/Middleware/ApiCustomToken.php @@ -0,0 +1,90 @@ +input(); + + $params = ''; + $appKey = Arr::get($postData, 'appKey', ''); + $timeStamp = Arr::get($postData, 'timeStamp',''); + + //拿出sign,剩下的参数按照key排序, 拼接 + $postSign = Arr::get($postData, 'sign', ''); + + if(empty($appKey) || empty($postSign) || empty($timeStamp)){ + $resData = [ + 'respCd' => '02', + 'respMsg' => '参数缺失', + ]; + + return response()->json($resData, 400); + } + + //记录请求日志 + $log = new ThirdLog(); + $log->app_id = $appKey; + $log->api_path = $request->path(); + $log->request_params = json_encode($postData); + + unset($postData['sign']); + + ksort($postData); + foreach ($postData as $k=>$v) { + $params .= "$k=".$v."&"; //默认UTF-8编码格式 + } + $postDataStr = substr($params, 0, -1); + + $appSecret = ThirdAccess::where('third_appid', $appKey)->value('third_appkey'); + // + $sign = md5($postDataStr.$appSecret); + + if($sign !== $postSign){ + $resData = [ + 'respCd' => '01', + 'respMsg' => '签名失败', + ]; + //签名失败 + $log->sign_status = 0; + $log->http_code = 400; + $log->response_params = json_encode($resData); + $log->save(); + return response()->json($resData, 400); + } + + if(abs(time() - $timeStamp) > 5*60){ + $resData = [ + 'respCd' => '05', + 'respMsg' => '签名过期', + ]; + //签名过期 + $log->sign_status = 0; + $log->http_code = 400; + $log->response_params = json_encode($resData); + $log->save(); + return response()->json($resData, 400); + } + + $log->save(); + $request->offsetSet('log_id', $log->id); + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 2f29f21..b26e9f6 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware */ protected $except = [ 'callback/*', + 'third/*' ]; } diff --git a/app/Models/ThirdAccess.php b/app/Models/ThirdAccess.php new file mode 100644 index 0000000..45f82e0 --- /dev/null +++ b/app/Models/ThirdAccess.php @@ -0,0 +1,24 @@ +third_appkey = \Illuminate\Support\Str::random(32); + }); + } +} diff --git a/app/Models/ThirdLog.php b/app/Models/ThirdLog.php new file mode 100644 index 0000000..60fbd48 --- /dev/null +++ b/app/Models/ThirdLog.php @@ -0,0 +1,11 @@ +id(); + $table->string('third_name')->comment('第三方名称'); + $table->string('third_appid')->nullable()->default('')->comment('第三方APPid'); + $table->string('third_appkey')->nullable()->default('')->comment('第三方AppSecret'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('third_accesses'); + } +} diff --git a/database/migrations/2022_05_10_171258_create_third_logs_table.php b/database/migrations/2022_05_10_171258_create_third_logs_table.php new file mode 100644 index 0000000..93d9e1c --- /dev/null +++ b/database/migrations/2022_05_10_171258_create_third_logs_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('app_id')->nullable()->comment('应用id'); + $table->string('api_path')->nullable()->comment('接口地址'); + $table->string('api_name')->nullable()->comment('接口名称'); + $table->unsignedTinyInteger('sign_status')->default(1)->comment('验签状态:0未通过,1通过'); + $table->string('http_code')->default(200)->comment('响应HTTPcode'); + // $table->string('mobile')->nullable()->comment('手机号'); + $table->text('request_params')->nullable()->comment('请求参数'); + $table->text('response_params')->nullable()->comment('返回参数'); + $table->unsignedTinyInteger('resp_status')->default(0)->comment('结果状态:0否,1是'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('third_logs'); + } +} diff --git a/lang/zh_CN/third-app.php b/lang/zh_CN/third-app.php new file mode 100644 index 0000000..f4d54ff --- /dev/null +++ b/lang/zh_CN/third-app.php @@ -0,0 +1,15 @@ + [ + 'ThirdApp' => '三方应用', + 'third-apps' => '三方应用', + ], + 'fields' => [ + 'third_name' => '名称', + 'third_appid' => 'APPid', + 'third_appkey' => 'APPkey', + ], + 'options' => [ + + ], +]; diff --git a/lang/zh_CN/third-log.php b/lang/zh_CN/third-log.php new file mode 100644 index 0000000..1ab3f7e --- /dev/null +++ b/lang/zh_CN/third-log.php @@ -0,0 +1,19 @@ + [ + 'ThirdLog' => '三方请求日志', + 'third-logs' => '三方请求日志', + ], + 'fields' => [ + 'app_id' => 'APPid', + 'api_path' => '接口地址', + 'api_name' => '接口名称', + 'sign_status'=>'验签状态', + 'http_code'=>'HTTP-CODE', + 'request_params'=>'请求参数', + 'response_params'=>'返回参数', + ], + 'options' => [ + + ], +]; diff --git a/routes/web.php b/routes/web.php index c454f11..591cb17 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,9 +2,19 @@ use App\Http\Controllers\Callback\LinkosController; use Illuminate\Support\Facades\Route; +use App\Http\Middleware\ApiCustomToken; +use App\Http\Controllers\ThirdApi\SendSmsController; Route::post('callback/linkos', LinkosController::class); +Route::group(['prefix'=>'third'], function(){ + Route::middleware([ApiCustomToken::class])->group(function(){ + Route::post('send/sms/start-machine', [SendSmsController::class, 'startMachine']); + }); + + Route::get('g-sign', [SendSmsController::class, 'makeSign']);//记得注释 +}); + Route::get('/', function () { return view('welcome'); });