113 lines
4.0 KiB
PHP
113 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use app\common\service\XyxServices;
|
|
use ba\Tree;
|
|
use Throwable;
|
|
use think\facade\Db;
|
|
use think\facade\Config;
|
|
use app\common\controller\Frontend;
|
|
use app\common\library\token\TokenExpirationException;
|
|
use app\admin\model\User as UserModel;
|
|
use app\admin\model\Config as ConfigModel;
|
|
|
|
class Index extends Frontend
|
|
{
|
|
protected array $noNeedLogin = ['index', 'xyxLogin'];
|
|
|
|
public function initialize(): void
|
|
{
|
|
parent::initialize();
|
|
}
|
|
|
|
/**
|
|
* 前台和会员中心的初始化请求
|
|
* @throws Throwable
|
|
*/
|
|
public function index(): void
|
|
{
|
|
$menus = [];
|
|
if ($this->auth->isLogin()) {
|
|
$rules = [];
|
|
$userMenus = $this->auth->getMenus();
|
|
|
|
// 首页加载的规则,验权,但过滤掉会员中心菜单
|
|
foreach ($userMenus as $item) {
|
|
if ($item['type'] == 'menu_dir') {
|
|
$menus[] = $item;
|
|
} elseif ($item['type'] != 'menu') {
|
|
$rules[] = $item;
|
|
}
|
|
}
|
|
$rules = array_values($rules);
|
|
} else {
|
|
// 若是从前台会员中心内发出的请求,要求必须登录,否则会员中心异常
|
|
$requiredLogin = $this->request->get('requiredLogin/b', false);
|
|
if ($requiredLogin) {
|
|
|
|
// 触发可能的 token 过期异常
|
|
try {
|
|
$token = get_auth_token(['ba', 'user', 'token']);
|
|
$this->auth->init($token);
|
|
} catch (TokenExpirationException) {
|
|
$this->error(__('Token expiration'), [], 409);
|
|
}
|
|
|
|
$this->error(__('Please login first'), [
|
|
'type' => $this->auth::NEED_LOGIN
|
|
], $this->auth::LOGIN_RESPONSE_CODE);
|
|
}
|
|
|
|
$rules = Db::name('user_rule')
|
|
->where('status', 1)
|
|
->where('no_login_valid', 1)
|
|
->where('type', 'in', ['route', 'nav', 'button'])
|
|
->order('weigh', 'desc')
|
|
->select()
|
|
->toArray();
|
|
$rules = Tree::instance()->assembleChild($rules);
|
|
}
|
|
|
|
$this->success('', [
|
|
'site' => [
|
|
'siteName' => get_sys_config('site_name'),
|
|
'version' => get_sys_config('version'),
|
|
'cdnUrl' => full_url(),
|
|
'upload' => keys_to_camel_case(get_upload_config(), ['max_size', 'save_name', 'allowed_suffixes', 'allowed_mime_types']),
|
|
'recordNumber' => get_sys_config('record_number'),
|
|
'cdnUrlParams' => Config::get('buildadmin.cdn_url_params'),
|
|
],
|
|
'openMemberCenter' => Config::get('buildadmin.open_member_center'),
|
|
'userInfo' => $this->auth->getUserInfo(),
|
|
'rules' => $rules,
|
|
'menus' => $menus,
|
|
]);
|
|
}
|
|
|
|
public function xyxLogin()
|
|
{
|
|
$encodedContent = $this->request->param('userData', '');
|
|
$merchantId = $this->request->param('clientMerchant', '');
|
|
$gameId = $this->request->post('page');
|
|
if (!$encodedContent || !$merchantId || !$gameId) {
|
|
$this->error(__('Parameter %s can not be empty'));
|
|
}
|
|
$config = ConfigModel::where('group', 'jdk_api')->where('name', 'access_id')->where('value', $merchantId)->find();
|
|
if (!$config) {
|
|
$this->error(__('clientMerchant error'));
|
|
}
|
|
parse_str(base64_decode($encodedContent), $output);
|
|
$user = $output['jdkUserId'] ?? '';
|
|
$player = UserModel::where('jk_user_id', $user)->find();
|
|
if (!$player) {
|
|
$this->error(__('player not found'));
|
|
}
|
|
$xyxServices = new XyxServices($player);
|
|
$res = $xyxServices->login(['gameCode' => $gameId]);
|
|
if ($res) {
|
|
return redirect($res);
|
|
}
|
|
$this->error('error');
|
|
}
|
|
} |