diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php
index d6a4d7e96..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,6 +1123,8 @@ class UsersController extends AbstractController
* - join: 加入会议,有效参数:meetingid (必填)
* @apiParam {String} [meetingid] 频道ID(不是数字)
* @apiParam {String} [name] 会话ID
+ * @apiParam {String} [sharekey] 分享的key
+ * @apiParam {String} [username] 用户名称
* @apiParam {Array} [userids] 邀请成员
*
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
@@ -1128,12 +1133,20 @@ class UsersController extends AbstractController
*/
public function meeting__open()
{
- $user = User::auth();
- //
$type = trim(Request::input('type'));
$meetingid = trim(Request::input('meetingid'));
$name = trim(Request::input('name'));
$userids = Request::input('userids');
+ $sharekey = trim(Request::input('sharekey'));
+ $username = trim(Request::input('username'));
+ $user = null;
+ if(!empty($sharekey) && $type === 'join'){
+ if(!Meeting::getShareInfo($sharekey)){
+ return Base::retError('分享链接已过期');
+ }
+ }else{
+ $user = User::auth();
+ }
$isCreate = false;
// 创建、加入
if ($type === 'join') {
@@ -1143,13 +1156,13 @@ class UsersController extends AbstractController
}
} elseif ($type === 'create') {
$meetingid = strtoupper(Base::generatePassword(11, 1));
- $name = $name ?: "{$user->nickname} 发起的会议";
+ $name = $name ?: "{$user?->nickname} 发起的会议";
$channel = "DooTask:" . substr(md5($meetingid . env("APP_KEY")), 16);
$meeting = Meeting::createInstance([
'meetingid' => $meetingid,
'name' => $name,
'channel' => $channel,
- 'userid' => $user->userid
+ 'userid' => $user?->userid
]);
$meeting->save();
$isCreate = true;
@@ -1165,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) {
@@ -1194,13 +1210,40 @@ class UsersController extends AbstractController
//
$data['appid'] = $meetingSetting['appid'];
$data['uid'] = $uid;
- $data['userimg'] = $user->userimg;
- $data['nickname'] = $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 c5e76bb6d..e19d56e79 100644
--- a/resources/assets/js/pages/manage/components/MeetingManager.vue
+++ b/resources/assets/js/pages/manage/components/MeetingManager.vue
@@ -4,13 +4,17 @@