all(); if (empty($postData)) { $source = $request->header("referer")."login"; } else { $source = $request->header("referer")."login?".http_build_query($postData); } $userInfo = WechatService::getWebOauthInfo($source,1,false); // $userInfo['openid'] = "otdgy3S5ZzPUD5DYOsHacX5KhZ9I"; // $userInfo['openid'] = "omf322AlD9wFjm5Ucix9uKmRXd4I"; if (empty($userInfo['openid'])) { return success("ok",['url' => $userInfo['url'],'type' => 1]); // 跳转 } else { $service = (new SystemConfig)->where("type","service")->column("value","name"); $user = (new SystemUserOpen)->where(['openid' => $userInfo['openid']])->findOrEmpty(); if ($user->isEmpty()) { return success("ok",['url' => '','shop_name' => "",'type' => 2,'service' => $service,'token' => ['access_token' => $userInfo['openid']]]); // 跳到绑定用户 } $loginUser = (new SystemUser)->where(['id' => $user['uid']])->with(['account' => function($query){ $query->field("shop_id,shop_name"); }])->findOrEmpty(); return success("ok",['url' => '','shop_name' => $loginUser['account']['shop_name'],'type' => 3,'service' => $service,'menu' => $this->getMenu(),'token' => get_object_vars((new Auth)->guard("mp")->login($user->toArray()))]); // 正常登陆进入 } } catch (\Throwable $th) { return error($th->getMessage()); } } /** * @param Request $request * @return Response */ #[Route(path: "bind",methods: "post")] public function bindLogin(Request $request): Response { try { $param = $this->_valid([ "username.require" => trans("empty.user"), "password.require" => trans("empty.passwd"), "open.require" => trans("empty.passwd"), ],"post"); if (!is_array($param)) return error($param); $map = ["is_deleted" => 0,"username" => $param['username']]; $user = (new SystemUser)->where($map)->with(['account' => function($query){ $query->field("shop_id,shop_name"); }])->findOrEmpty(); if ($user->isEmpty()) return errorTrans("error.user-empty"); if ($user['status'] <> 1) return errorTrans("error.user-status"); if (md5($param['password'].$user['salt']) <> $user['password']) return errorTrans("error.passwd"); $userOpen = (new SystemUserOpen)->where(['openid' => $param['open'],'shop_id' => $user['agent_id']])->findOrEmpty(); if (!$userOpen->isEmpty()) return error("请勿重复授权"); $openData = [ "uid" => $user['id'], "openid" => $param['open'], "shop_id" => $user['agent_id'], "shop_name" => $user['account']['shop_name']??'', 'is_msg' => 1 ]; $state = $userOpen->insertGetId($openData); $openData['id'] = $state; if (!$state) return errorTrans("error.data"); return success("ok",['shop_name' => $user['account']['shop_name'],'menu' => $this->getMenu(),'token' => get_object_vars((new Auth)->guard("mp")->login($openData))]); // 正常登陆进入 } catch (\Throwable $th) { return error($th->getMessage()); } } /** * @return array[] */ protected function getMenu(): array { return [ [ "path" => "/dashboard", "name" => "dashboard", "component" => "dashboard", "meta" => [ "icon" => "", "title" => "总揽", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/shop/detail", "name" => "shop/detail", "component" => "shop/detail", "meta" => [ "icon" => "", "title" => "店铺详情", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/shop/change", "name" => "shop/change", "component" => "shop/change", "meta" => [ "icon" => "", "title" => "切换店铺", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/print", "name" => "print/index", "component" => "print/index", "meta" => [ "icon" => "el-icon-printer", "title" => "打印机", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/print/price", "name" => "print/price", "component" => "print/price", "meta" => [ "icon" => "el-icon-shopping-bag", "title" => "价格设置", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/print/discount", "name" => "print/discount", "component" => "print/discount", "meta" => [ "icon" => "el-icon-price-tag", "title" => "折扣设置", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/order", "name" => "order/index", "component" => "order/index", "meta" => [ "icon" => "el-icon-tickets", "title" => "实时订单", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/order/detail", "name" => "order/detail", "component" => "order/detail", "meta" => [ "icon" => "el-icon-tickets", "title" => "订单详情", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/turnover/index", "name" => "turnover/index", "component" => "turnover/index", "meta" => [ "icon" => "el-icon-money", "title" => "营业额", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/member/index", "name" => "member/index", "component" => "member/index", "meta" => [ "icon" => "el-icon-credit-card", "title" => "会员卡", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/member/list", "name" => "member/list", "component" => "member/list", "meta" => [ "icon" => "el-icon-credit-card", "title" => "会员列表", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/member/recharge", "name" => "member/recharge", "component" => "member/recharge", "meta" => [ "icon" => "el-icon-credit-card", "title" => "充值套餐", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/wallet/index", "name" => "wallet/index", "component" => "wallet/index", "meta" => [ "icon" => "el-icon-wallet", "title" => "我的钱包", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/wallet/log", "name" => "wallet/log", "component" => "wallet/log", "meta" => [ "icon" => "el-icon-wallet", "title" => "钱包记录", "type" => "menu", "color" => "#333" ], "hide" => 1 ],[ "path" => "/wallet/card", "name" => "wallet/card", "component" => "wallet/card", "meta" => [ "icon" => "el-icon-postcard", "title" => "结算卡", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/shop/bind", "name" => "shop/bind", "component" => "shop/bind", "meta" => [ "icon" => "el-icon-connection", "title" => "绑定门店", "type" => "menu", "color" => "#333" ], "hide" => 0 ],[ "path" => "/shop/msg", "name" => "shop/msg", "component" => "shop/msg", "meta" => [ "icon" => "el-icon-notification", "title" => "消息开关", "type" => "menu", "color" => "#333" ], "hide" => 0 ] ]; } /** * 获取当前请求的完整 URL * @param bool $withQuery 是否包含查询参数 * @return string */ protected function getFullUrl($withQuery = true) { // 1. 获取协议(支持代理) $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http'; // 2. 获取主机名(支持代理) $host = $_SERVER['HTTP_X_FORWARDED_HOST'] ?? $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? 'localhost'; // 3. 获取端口(支持代理) $port = $_SERVER['HTTP_X_FORWARDED_PORT'] ?? $_SERVER['SERVER_PORT'] ?? 80; // 4. 获取请求URI(包含路径和查询参数) $requestUri = $_SERVER['REQUEST_URI'] ?? '/'; // 5. 构建基础URL $baseUrl = $protocol . '://' . $host; // 6. 如果不是标准端口,添加端口号 $isStandardPort = ($protocol === 'http' && $port == 80) || ($protocol === 'https' && $port == 443); if (!$isStandardPort) { $baseUrl .= ':' . $port; } // 7. 返回完整URL return $baseUrl . $requestUri; } }