diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index b3854a43f..420f423de 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -613,7 +613,10 @@ class UsersController extends AbstractController */ public function basic() { - User::auth(); + $sharekey = Request::header('Sharekey'); + if(empty($sharekey) || !Meeting::getShareInfo($sharekey)){ + User::auth(); + } // $userid = Request::input('userid'); $array = Base::json2array($userid); @@ -1120,7 +1123,7 @@ class UsersController extends AbstractController * - join: 加入会议,有效参数:meetingid (必填) * @apiParam {String} [meetingid] 频道ID(不是数字) * @apiParam {String} [name] 会话ID - * @apiParam {String} [meetingsign] 签名 + * @apiParam {String} [sharekey] 分享的key * @apiParam {String} [username] 用户名称 * @apiParam {Array} [userids] 邀请成员 * @@ -1134,11 +1137,17 @@ class UsersController extends AbstractController $meetingid = trim(Request::input('meetingid')); $name = trim(Request::input('name')); $userids = Request::input('userids'); - $meetingsign = trim(Request::input('meetingsign')); + $sharekey = trim(Request::input('sharekey')); $username = trim(Request::input('username')); - $user = empty($meetingsign) ? User::auth() : null; + $user = null; + if(!empty($sharekey) && $type === 'join'){ + if(!Meeting::getShareInfo($sharekey)){ + return Base::retError('分享链接已过期'); + } + }else{ + $user = User::auth(); + } $isCreate = false; - // 创建、加入 if ($type === 'join') { $meeting = Meeting::whereMeetingid($meetingid)->first(); @@ -1169,7 +1178,10 @@ class UsersController extends AbstractController if (empty($meetingSetting['appid']) || empty($meetingSetting['app_certificate'])) { return Base::retError('会议功能配置错误,请联系管理员'); } - $uid = intval(str_pad( Request::header('fd'), 6, 9, STR_PAD_LEFT) . $user?->userid); + $uid = intval(str_pad(Base::generatePassword(4,1), 9, 8, STR_PAD_LEFT)); + if($user){ + $uid = intval(str_pad(Request::header('fd'), 5, 9, STR_PAD_LEFT).$user->userid); + } try { $service = new AgoraTokenGenerator($meetingSetting['appid'], $meetingSetting['app_certificate'], $meeting->channel, $uid); } catch (\Exception $e) { @@ -1198,13 +1210,40 @@ class UsersController extends AbstractController // $data['appid'] = $meetingSetting['appid']; $data['uid'] = $uid; - $data['userimg'] = $meetingsign ? 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png' : $user?->userimg; - $data['nickname'] = $meetingsign ? $username : $user?->nickname; + $data['userimg'] = $sharekey ? Base::fillUrl('avatar/'.$username.'.png') : $user?->userimg; + $data['nickname'] = $sharekey ? $username : $user?->nickname; $data['token'] = $token; $data['msgs'] = $msgs; + $data['sharelink'] = $meeting->getShareLink(); + // + Meeting::setTouristInfo($data); + // return Base::retSuccess('success', $data); } + /** + * @api {get} api/users/meeting/tourist 16. 【会议】游客信息 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName meeting__tourist + * + * @apiParam {String} tourist_id 游客ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function meeting__tourist() + { + $touristId = trim(Request::input('tourist_id')); + if ($touristInfo = Meeting::getTouristInfo($touristId)) { + return Base::retSuccess('success', $touristInfo); + } + return Base::retError('Id不存在'); + } + /** * @api {get} api/users/meeting/invitation 17. 【会议】发送邀请 * diff --git a/app/Models/Meeting.php b/app/Models/Meeting.php index 92ba18bbc..0b9814f7d 100644 --- a/app/Models/Meeting.php +++ b/app/Models/Meeting.php @@ -2,6 +2,10 @@ namespace App\Models; +use Cache; +use App\Module\Base; +use Illuminate\Support\Carbon; + /** * App\Models\Meeting * @@ -30,5 +34,58 @@ namespace App\Models; */ class Meeting extends AbstractModel { + const CACHE_KEY = 'meeting_share_link_code'; + const CACHE_EXPIRED_TIME = 6; // 小时 + /** + * 获取分享链接 + * @return mixed + */ + public function getShareLink() + { + $code = base64_encode("{$this->meetingid}" . Base::generatePassword()); + Cache::put(self::CACHE_KEY.'_'.$code, [ + 'id' => $this->id, + 'meetingid' => $this->meetingid, + 'channel' => $this->channel, + ], Carbon::now()->addHours(self::CACHE_EXPIRED_TIME)); + return Base::fillUrl("meeting/{$this->meetingid}/".$code); + } + + /** + * 获取分享信息 + * @return mixed + */ + public static function getShareInfo($code) + { + if(Cache::has(self::CACHE_KEY.'_'.$code)){ + return Cache::get(self::CACHE_KEY.'_'.$code); + } + return null; + } + + /** + * 保存访客信息 + * @return mixed + */ + public static function setTouristInfo($data) + { + Cache::put(Meeting::CACHE_KEY.'_'.$data['uid'], [ + 'uid' => $data['uid'], + 'userimg' => $data['userimg'], + 'nickname' => $data['nickname'], + ], Carbon::now()->addHours(self::CACHE_EXPIRED_TIME)); + } + + /** + * 获取访客信息 + * @return mixed + */ + public static function getTouristInfo($touristId) + { + if(Cache::has(Meeting::CACHE_KEY.'_'.$touristId)){ + return Base::retSuccess('success', Cache::get(Meeting::CACHE_KEY.'_'.$touristId) ); + } + return null; + } } diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 8861048fc..b9d75db34 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -337,7 +337,7 @@ export default { this.$store.dispatch("call", { url: 'users/basic', data: { - userid: [ (uuid+"").substring(6) ] + userid: [ (uuid+"").substring(5) ] } }).then(({data}) => { $A.eeuiAppSendMessage({ diff --git a/resources/assets/js/pages/manage/components/MeetingManager.vue b/resources/assets/js/pages/manage/components/MeetingManager.vue index aeb43c941..e19d56e79 100644 --- a/resources/assets/js/pages/manage/components/MeetingManager.vue +++ b/resources/assets/js/pages/manage/components/MeetingManager.vue @@ -5,14 +5,14 @@ v-model="addShow" :title="$L(addData.type === 'join' ? '加入会议' : '新会议')" :mask-closable="false" - :closable="!addData.meetingsign"> + :closable="!addData.sharekey">