defaultStoreId(); $access_token = input_params('access_token'); $ignore_user = intval(input_params('ignore_user')); if (!in_array(Yii::$app->controller->getRoute(), [ 'client/v1/store/mp-audit', 'client/v1/user/user-audit', 'client/v1/user/user-audit-setting', 'client/v1/default/store', 'client/v1/passport/login', 'client/v1/passport/auth-phone', 'client/v1/passport/code', 'client/v1/passport/send-code', 'client/v1/passport/login', 'client/v1/alipay/passport/auth', 'client/v1/alipay/passport/phone', 'client/v1/alipay/passport/login', 'client/v1/diy/template-unit', 'client/v1/upload/upload-image' ]) && !$access_token) { $result = $this->userAuditSetting(); \Yii::$app->response->format = Response::FORMAT_JSON; if ($result['code'] !== 0) { \Yii::$app->response->data = $result; return false; } } if (get_params('version')) { $version = get_params('version'); $cache = cacheLock(); $key = 'store_' . get_store_id(). '_version'; if (\Yii::$app->prod_is_dandianpu()) { $self_mini = Option::get('self_mini', get_store_id(), 'store', 0)['value']; if (!$self_mini) { $key = 'store_dandianpu_version'; } } if (!cache_lock($key . '_time', 60 * 5)) { $cache->set($key, $version); } } if (!$access_token && (in_array(Yii::$app->controller->getRoute(), self::ALLOW_LIST) || in_array($_GET['callback'],self::ALLOW_LIST))) { return true; } // 支付宝依然取user表数据 // if (input_params('platform') == 'alipay') { // $user = User::findIdentityByAccessToken($access_token); // if ($user) { // \Yii::$app->jwt->setUser($user); // } else { // \Yii::$app->response->format = Response::FORMAT_JSON; // \Yii::$app->response->data = [ // 'code' => 401, // 'msg' => '登陆失败' // ]; // return false; // } // } else { // 微信平台目前统一走saas_user表,统一用户 $saas_user = SaasUser::findIdentityByAccessToken($access_token); if (empty($access_token) && $saas_user) { \Yii::$app->response->format = Response::FORMAT_JSON; \Yii::$app->response->data = [ 'code' => 401, 'msg' => '登陆失败' ]; return false; } if ($saas_user) { \Yii::$app->jwt->setSaasUser($saas_user); $store_id = intval(post_params('store_id')) ?: get_params('store_id'); if ($store_id > 0) { //判断当前没有store_id,给绑定上 if ($saas_user->store_id <= 0) { $store = Store::findOne(['id' => $store_id, 'is_delete' => 0]); if ($store) { $saas_user->store_id = $store_id; } $saas_user->save(); } $user = User::findOne(['binding' => $saas_user->mobile, 'store_id' => $store_id]); if (is_alipay_platform() && !$user) { $user = User::findOne(['alipay_open_id' => $saas_user->ali_user_id, 'store_id' => $store_id]); } if (is_wechat_platform() && !$user) { $user = User::findOne(['wechat_open_id' => $saas_user->platform_open_id, 'store_id' => $store_id]); } if (!$user) { try { $user = new User(); $user->access_token = \Yii::$app->security->generateRandomString(); $user->binding = $saas_user->mobile; $user->type = User::USER_TYPE_NORMAL; $user->nickname = substr_replace($saas_user->mobile, '******', 3, 6); $user->avatar_url = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/v1/statics/images/avatar.png'; $user->username = \Yii::$app->security->generateRandomString(); $user->password = \Yii::$app->security->generatePasswordHash(\Yii::$app->security->generateRandomString(), 5); $user->auth_key = \Yii::$app->security->generateRandomString(); $user->is_delete = User::USER_NOT_DELETE; $user->store_id = $store_id; $user->platform = input_params('platform') == 'alipay'?User::USER_FROM_ALIPAY:User::USER_FROM_WECHAT; // 微信 $user->alipay_open_id = $saas_user->ali_user_id; $user->wechat_open_id = $saas_user->platform_open_id; $user->save(); } catch (\Exception $e){} } else { $user->binding = $saas_user->mobile; $user->alipay_open_id = $saas_user->ali_user_id; $user->save(); } // if (!$user) { // $user = User::findOne(['binding' => $saas_user->mobile, 'store_id' => input_params('store_id')]); // if (is_alipay_platform()) { // $user = User::findOne(['alipay_open_id' => $saas_user->ali_user_id, 'store_id' => input_params('store_id')]); // } // // } if ((int)$user->blacklist === 1) { \Yii::$app->response->format = Response::FORMAT_JSON; \Yii::$app->response->data = [ 'code' => 401, 'msg' => '身份验证失败' ]; return false; } if ($user && $user->platform == User::USER_FROM_WECHAT) { if(empty($user->wechat_open_id)){ $user->wechat_open_id = $saas_user['platform_open_id']; $user->save(); } } } $result = $this->userAuditSetting($user); if ($result['code'] !== 0) { \Yii::$app->response->format = Response::FORMAT_JSON; \Yii::$app->response->data = $result; return false; } if (!empty($user) && !$ignore_user) { \Yii::$app->jwt->setUser($user); } } else { if (in_array(Yii::$app->controller->getRoute(), self::ALLOW_LIST)) { return true; } $result = $this->userAuditSetting(); \Yii::$app->response->format = Response::FORMAT_JSON; if ($result['code'] !== 0) { \Yii::$app->response->data = $result; return false; } \Yii::$app->response->data = [ 'code' => 401, 'msg' => '登陆失败' ]; return false; } // } return true; } public function userAuditSetting($user = null) { if (is_wechat_platform() || is_alipay_platform()) { //判断是否开启审核设置 $userAuditSetting = UserAuditSetting::findOne(['store_id' => get_store_id()]); if ($userAuditSetting) { $is_store_audit = (int)$userAuditSetting->status; //用户提交/获取审核接口 if (intval($is_store_audit) && !in_array(Yii::$app->controller->getRoute(), ['client/v1/store/mp-audit', 'client/v1/user/user-audit', 'client/v1/default/store', 'client/v1/store/get-info', 'client/v1/upload/upload-image'])) { //开启 $userAuditLog = UserAuditLog::findOne(['user_id' => $user->id ?? 0, 'is_delete' => 0]); if (empty($userAuditLog)) { \Yii::$app->response->format = Response::FORMAT_JSON; return [ 'code' => 402, 'msg' => '需要提交用户申请' ]; } if (in_array(intval($userAuditLog->status), [UserAuditLog::STATUS_NOT_AGREE, UserAuditLog::STATUS_PASS])) { $msg = "用户申请审核暂未通过"; if (intval($userAuditLog->status) === UserAuditLog::STATUS_PASS) { $msg = "用户申请审核被拒绝 " . $userAuditLog->pass_remark; } \Yii::$app->response->format = Response::FORMAT_JSON; return [ 'code' => 402, 'msg' => $msg ]; } } } } return [ 'code' => 0 ]; } //解决供应链store_id为空 就给默认店铺的store_id public function defaultStoreId() { $store_id = get_store_id(); if (intval($store_id) <= 0) { if (\Yii::$app->prod_is_dandianpu()) { $default_store = \app\models\Option::get('one_store_default_store', 0, 'saas', 1)['value']; debug_log(['default_store' => $default_store], 'default.log'); $store_id = $default_store; } } $_GET['store_id'] = $_POST['store_id'] = $store_id; } }