wesmiler il y a 2 ans
Parent
commit
e28f2c9d9e

+ 50 - 0
app/Http/Controllers/Api/v1/MemberController.php

@@ -4,12 +4,16 @@ namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\webApp;
 use App\Http\Validator\MemberValidator;
+use App\Models\AcceptorModel;
+use App\Models\MerchantModel;
 use App\Services\Api\ImChatService;
 use App\Services\Api\MemberCollectService;
 use App\Services\Api\MemberNodeService;
 use App\Services\Api\MemberService;
 use App\Services\Api\MessageService;
 use App\Services\Api\VideoCollectService;
+use App\Services\RedisService;
+use App\Services\WalletService;
 use Illuminate\Http\Request;
 
 /**
@@ -51,6 +55,52 @@ class MemberController extends webApp
     }
 
     /**
+     * 聊天用户信息
+     * @return array
+     */
+    public function chatInfo()
+    {
+        $params = request()->all();
+        $token = isset($params['token'])? $params['token'] : '';
+        if(empty($token)){
+            return showJson(1066,false);
+        }
+
+        $tokenData = MemberService::make()->getChatToken($token, 2);
+        $userId = isset($tokenData['user_id'])? $tokenData['user_id'] : 0;
+        $userType = isset($tokenData['user_type']) && $tokenData['user_type']? $tokenData['user_type'] : 1;
+        $cacheKey = "caches:members:chat_{$userId}_{$userType}";
+        $info = RedisService::get($cacheKey);
+        if($info){
+            return $info;
+        }
+
+        if($userType == 1){
+            $info = MemberService::make()->getInfo($userId, 'chat',['id','username','nickname','gender','app_uuid','avatar']);
+        }else if($userType == 2){
+            $info = MerchantModel::where(['user_id'=> $userId,'mark'=>1])
+                ->select(['user_id as id','name as nickname','mobile as username','logo as avatar'])
+                ->first();
+            $info = $info? $info->toArray() :[];
+        }else if($userType == 3){
+            $info = AcceptorModel::from('acceptor as a')
+                ->leftJoin('member as b','b.id','=','a.user_id')
+                ->where(['a.user_id'=> $userId,'a.mark'=>1])
+                ->select(['a.user_id as id','a.name as nickname','b.username','b.avatar'])
+                ->first();
+            $info = $info? $info->toArray() :[];
+        }
+
+        if($info){
+            $info['avatar'] = $info['avatar']? get_image_url($info['avatar']) : get_image_url('/images/member/logo.png');
+            RedisService::set($cacheKey, $info, rand(5,10));
+        }
+
+        return showJson(1010,true, $info);
+
+    }
+
+    /**
      * 关注
      * @return array|mixed
      */

+ 5 - 0
app/Http/Kernel.php

@@ -46,6 +46,11 @@ class Kernel extends HttpKernel
             \Illuminate\Routing\Middleware\SubstituteBindings::class,
             \Illuminate\Session\Middleware\StartSession::class,
         ],
+
+        'xapi' => [
+            \Illuminate\Routing\Middleware\SubstituteBindings::class,
+            \Illuminate\Session\Middleware\StartSession::class,
+        ],
     ];
 
     /**

+ 1 - 1
app/Http/Middleware/WebLogin.php

@@ -26,7 +26,7 @@ class WebLogin extends Middleware
         $action = app('request')->route()->getAction();
         $controller = class_basename($action['controller']);
         list($controller, $action) = explode('@', $controller);
-        $noLoginActs = ['LoginController','TestController','NotifyController','IndexController','ArticleController','UploadController','TaskController'];
+        $noLoginActs = ['LoginController','TestController','NotifyController','ApiController','IndexController','ArticleController','UploadController','TaskController'];
         $noSignActions = ['UploadController','setAvatar','NotifyController','TestController','TaskController'];
         $token = $request->headers->get('Authorization');
         if (strpos($token, 'Bearer ') !== false) {

+ 4 - 0
app/Providers/RouteServiceProvider.php

@@ -46,6 +46,10 @@ class RouteServiceProvider extends ServiceProvider
             Route::middleware('web')
                 ->namespace($this->namespace)
                 ->group(base_path('routes/web.php'));
+
+            Route::middleware('xapi')
+                ->namespace($this->namespace)
+                ->group(base_path('routes/xapi.php'));
         });
     }
 

+ 33 - 1
app/Services/Api/MemberService.php

@@ -89,6 +89,8 @@ class MemberService extends BaseService
             $defaultField = ['id', 'username', 'nickname','member_level', 'code', 'balance','usdt','trx','trc_url','wait_score', 'score', 'status', 'avatar'];
         }else if ($type == 'info'){
             $withs = ['parent','level'];
+        }else if ($type == 'chat'){
+            $withs = [];
         }
         $field = $field ? $field : $defaultField;
         if (is_array($where)) {
@@ -98,7 +100,7 @@ class MemberService extends BaseService
         }
 
         $info = $info ? $info->toArray() : [];
-        if ($info && !in_array($type, ['auth', 'check','login'])) {
+        if ($info && !in_array($type, ['auth', 'check','login','chat'])) {
             $info['avatar'] = $info['avatar'] ? get_image_url($info['avatar']) : get_image_url('/images/member/logo.png');
             $info['balance'] = moneyFormat($info['balance'], 2);
             $info['usdt'] = isset($info['usdt'])?moneyFormat($info['usdt'], 2):'0.00';
@@ -138,6 +140,7 @@ class MemberService extends BaseService
                 $liveOpenLevel = ConfigService::make()->getConfigByCode('live_open_level',0);
                 $liveOpenLevel = $liveOpenLevel>0? $liveOpenLevel : 0;
                 $info['live_open'] = $info['member_level']>=$liveOpenLevel? 1 : 0;
+                $info['chat_token'] = MemberService::make()->getChatToken($info['id'].'-1', 1);
             }else if($type == 'buy'){
                 $address = MemberAddressService::make()->getBindInfo($userId);
                 $info['address'] = $address;
@@ -213,6 +216,35 @@ class MemberService extends BaseService
     }
 
     /**
+     * 获取聊天TOKEN或者解码用户ID
+     * @param $key
+     * @param $type
+     * @return false|string|string[]
+     */
+    public function getChatToken($key, $type)
+    {
+        // 加密
+        $salt = 'starLink';
+        if ($type == 1) {
+            $baseStr = base64_encode($salt.'-'.$key);
+            $str = substr($baseStr, -6, 7) . substr(md5($salt), 2, 6) . substr($baseStr, 0, -6);
+            return str_replace(['==', '='], ['-2', '-1'], $str);
+
+        } // 解密
+        else {
+            $str1 = substr($key, 12) . substr($key, 0, 6);
+            $str1 = str_replace(['-1', '-2'], ['=', '=='], $str1);
+            $str =  base64_decode($str1);
+            $str = str_replace("{$salt}-",'', $str);
+            $data = explode('@', $str);
+            return [
+                'user_id'=> isset($data[0])? $data[0] : 0,
+                'user_type'=> isset($data[1]) && $data[1]? $data[1] : 1,
+            ];
+        }
+    }
+
+    /**
      * 获取用户缓存信息
      * @param $where
      * @param array $field

+ 1 - 0
resources/lang/zh-cn/api.php

@@ -65,6 +65,7 @@ return [
     '1063' => '手机验证码发送成功',
     '1064' => '请选择邮箱验证或手机号验证',
     '1065' => '登录密码不为空',
+    '1066' => '未授权',
 
     // 登录注册
     '2001'=> '账号非法或未注册',

+ 0 - 1
routes/api.php

@@ -82,7 +82,6 @@ Route::prefix('v1')->group(function(){
     Route::post('/video/play', [\App\Http\Controllers\Api\v1\VideoController::class, 'updatePlay']);
     Route::post('/video/setting', [\App\Http\Controllers\Api\v1\VideoController::class, 'setting']);
     Route::post('/video/delete', [\App\Http\Controllers\Api\v1\VideoController::class, 'delete']);
-    Route::post('/video/visibleType', [\App\Http\Controllers\Api\v1\VideoController::class, 'visibleType']);
 
     // 视频评论
     Route::post('/video/comment/index', [\App\Http\Controllers\Api\v1\IndexController::class, 'videoComment']);

+ 24 - 0
routes/xapi.php

@@ -0,0 +1,24 @@
+<?php
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Route;
+
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+Route::middleware('auth:api')->get('/user', function (Request $request) {
+    return $request->user();
+});
+
+// 路由组
+Route::prefix('chat')->group(function(){
+    Route::match(['POST',"GET"],'/userInfo', [\App\Http\Controllers\Api\v1\MemberController::class, 'chatInfo']);
+});