添加三方接口记录
parent
51101bc087
commit
bb241fbb2e
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers;
|
||||
|
||||
use Dcat\Admin\Form;
|
||||
use Dcat\Admin\Grid;
|
||||
use Dcat\Admin\Admin;
|
||||
use App\Models\ThirdAccess;
|
||||
use Dcat\Admin\Http\Controllers\AdminController;
|
||||
|
||||
class ThirdAppController extends AdminController
|
||||
{
|
||||
/**
|
||||
* Make a grid builder.
|
||||
*
|
||||
* @return Grid
|
||||
*/
|
||||
protected function grid()
|
||||
{
|
||||
return Grid::make(new ThirdAccess(), function (Grid $grid) {
|
||||
$grid->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');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers;
|
||||
|
||||
use Dcat\Admin\Grid;
|
||||
use Dcat\Admin\Admin;
|
||||
use App\Models\ThirdLog;
|
||||
use Dcat\Admin\Http\Controllers\AdminController;
|
||||
|
||||
class ThirdLogController extends AdminController
|
||||
{
|
||||
/**
|
||||
* Make a grid builder.
|
||||
*
|
||||
* @return Grid
|
||||
*/
|
||||
protected function grid()
|
||||
{
|
||||
return Grid::make(new ThirdLog(), function (Grid $grid) {
|
||||
$grid->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);
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\ThirdApi;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ThirdLog;
|
||||
|
||||
class SendSmsController extends Controller
|
||||
{
|
||||
public function startMachine(Request $request)
|
||||
{
|
||||
$logId = $request->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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use App\Models\ThirdLog;
|
||||
use App\Models\ThirdAccess;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class ApiCustomToken
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
//获取body参数
|
||||
$postData = $request->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);
|
||||
}
|
||||
}
|
||||
|
|
@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware
|
|||
*/
|
||||
protected $except = [
|
||||
'callback/*',
|
||||
'third/*'
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ThirdAccess extends Model
|
||||
{
|
||||
use HasDateTimeFormatter;
|
||||
|
||||
protected $fillable = [
|
||||
'third_name', 'third_appid', 'third_appkey'
|
||||
];
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
// 监听 oldman 的创建事件,用于初始化 位置信息
|
||||
static::creating(function ($thirdAccess) {
|
||||
$thirdAccess->third_appkey = \Illuminate\Support\Str::random(32);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ThirdLog extends Model
|
||||
{
|
||||
use HasDateTimeFormatter;
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateThirdAccessesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('third_accesses', function (Blueprint $table) {
|
||||
$table->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');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateThirdLogsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('third_logs', function (Blueprint $table) {
|
||||
$table->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');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
return [
|
||||
'labels' => [
|
||||
'ThirdApp' => '三方应用',
|
||||
'third-apps' => '三方应用',
|
||||
],
|
||||
'fields' => [
|
||||
'third_name' => '名称',
|
||||
'third_appid' => 'APPid',
|
||||
'third_appkey' => 'APPkey',
|
||||
],
|
||||
'options' => [
|
||||
|
||||
],
|
||||
];
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
return [
|
||||
'labels' => [
|
||||
'ThirdLog' => '三方请求日志',
|
||||
'third-logs' => '三方请求日志',
|
||||
],
|
||||
'fields' => [
|
||||
'app_id' => 'APPid',
|
||||
'api_path' => '接口地址',
|
||||
'api_name' => '接口名称',
|
||||
'sign_status'=>'验签状态',
|
||||
'http_code'=>'HTTP-CODE',
|
||||
'request_params'=>'请求参数',
|
||||
'response_params'=>'返回参数',
|
||||
],
|
||||
'options' => [
|
||||
|
||||
],
|
||||
];
|
||||
|
|
@ -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');
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue