fullUrl(); //增加授权日志 $wechat_user = session('wechat_user'); $openid = $wechat_user['id'] ?? null; if ($code) { $redirectUrl = WechatService::connectAuthByCode($code, $redirect_url); return $redirectUrl; } // if (empty(session('wechat_user'))) { if (empty($openid)) { $redirectUrl = WechatService::connectAuth($redirect_url); return $redirectUrl; } return $target_path; } public function partnerAuth() { $target_path = '/h5/#/partnerInfo'; $redirectUrl = $this->officialAuth(request()->code, $target_path); return redirect($redirectUrl); } public function agentAuth() { $target_path = '/h5/#/agentHome'; $redirectUrl = $this->officialAuth(request()->code, $target_path); return redirect($redirectUrl); } public function memberAuth() { $target_path = '/h5/#/home'; $redirectUrl = $this->officialAuth(request()->code, $target_path); return redirect($redirectUrl); } public function coachAuth() { $target_path = '/h5/#/coachInfo'; $redirectUrl = $this->officialAuth(request()->code, $target_path); return redirect($redirectUrl); } public function financeAuth() { $target_path = '/h5/#/bindingFinance'; $redirectUrl = $this->officialAuth(request()->code, $target_path); return redirect($redirectUrl); } public function wineCodeAuth(Request $request, $wine_code) { $target_path = config('app.url') . '/h5/#/bindingWine?wine_code=' . $wine_code; $redirectUrl = $this->officialAuth(request()->code, $target_path); Log::info("wineCodeAuth--$redirectUrl"); return redirect($redirectUrl); } public function packCodeAuth(Request $request, $pack_code) { $target_path = config('app.url') . '/h5/#/bindingPackageWine?pack_code=' . $pack_code; $redirectUrl = $this->officialAuth(request()->code, $target_path); Log::info("packCodeAuth--$redirectUrl"); return redirect($redirectUrl); } public function wechatAuth(Request $request) { // $target_path = '/admin/#/h5/partnerInfo'; $target_path = $request->input('target_path'); $params = $request->all(); unset($params['target_path']); $str = http_build_query($params); if ($str) { $target_path = $target_path . "&$str"; } Log::info("wechatAuth----" . $target_path); $target_path = $target_path ? '/h5/#/' . $target_path : '/h5/#'; $param = $request->all(); unset($param['target_path']); $wechat_user = session('wechat_user'); $openid = $wechat_user['id'] ?? null; //判断target_path是否存在openid if (strpos($target_path, 'open_id') === false) { $param['open_id'] = $openid; } //防止重复拼接 if (!empty($param) && strpos($target_path, '?') === false) { $param = http_build_query($param); $target_path .= '?' . $param; } Log::info("wechatAuth1----" . $target_path); $redirectUrl = $this->officialAuth(request()->code, $target_path); Log::info("redirect_url----" . $redirectUrl); // $message = 'wechatAuth微信授权 open_id:'.$openid.', code:'.request()->code.', target_path:'.$target_path.', redirect_url:'.$redirectUrl; // AddErrorLog::dispatch($message)->onQueue('health'); // if (strpos($redirectUrl, "open.weixin.qq.com") === false) { // $redirectUrl = config("app.url") . $redirectUrl; // } // Log::info("redirect_url----" . $redirectUrl); return redirect($redirectUrl); } // public function orderCommentAuth() // { // $target_path = '/admin/#/h5/remarks'; // $redirectUrl = $this->officialAuth(request()->code, $target_path); // return redirect($redirectUrl); // } public function workJsSdkConfig() { $url = request()->input('url', config('app.url')); $type = request()->input('type', 'work'); $config = WechatService::workJsSdkConfig($url, $type); return $this->success('ok', $config); } public function workJsSdkConfigV2() { $start_time = microtime(true); Log::info("workJsSdkConfigV2 开始时间:" . $start_time); $url = request()->input('url', config('app.url')); $work_config = WechatService::workJsSdkConfig($url, 'work'); $app_config = WechatService::workJsSdkConfig($url, 'app'); $version = Version::where('type', Version::TYPE_WECOM)->orderBydesc('id')->value('version'); Log::info("workJsSdkConfigV2 结束时间:" . microtime(true)); Log::info("workJsSdlConfigV2 时长:" . round(microtime(true) - $start_time, 3)); return $this->success('ok', compact('work_config', 'app_config', 'version')); } public function workJsSdkConfigV3() { $start_time = microtime(true); Log::info("workJsSdkConfigV2 开始时间:" . $start_time); $url = request()->input('url', config('app.url')); // $work_config = WechatService::workJsSdkConfig($url, 'work'); // $app_config = WechatService::workJsSdkConfig($url, 'app'); $work_config = $app_config = []; Log::info("workJsSdkConfigV2 结束时间:" . microtime(true)); Log::info("workJsSdlConfigV2 时长:" . round(microtime(true) - $start_time, 3)); return $this->success('ok', compact('work_config', 'app_config')); } public function workAppAuth($code, $target_path) { $redirect_url = config('app.url') . '/' . request()->path(); Log::info("redirect_url1----$redirect_url"); if ($code) { $redirectUrl = WechatService::connectWorkAuthByCode($code); Log::info("redirect_url2---" . $redirectUrl); return $redirectUrl; } if (empty(session('work_wechat_user'))) { $redirectUrl = WechatService::connectWorkAuth($redirect_url); Log::info("redirect_url3---" . $redirectUrl); return $redirectUrl; } return $target_path; } public function workOrderCommentsAuth() { // $target_path = '/admin/#/h5/remarks'; // $target_path = '/h5/#/h5/serviceCentre'; $target_path = '/h5/#/h5/serviceCentre'; $redirectUrl = $this->workAppAuth(request()->code, $target_path); // Log::info("redirect_url---".$redirectUrl); return redirect($redirectUrl); } public function workOrderBoundEnterprise() { Log::info("workOrderBoundEnterprise 开始时间:" . microtime(true)); $target_path = '/h5/#/h5/boundEnterprise'; $redirectUrl = $this->workAppAuth(request()->code, $target_path); Log::info("redirect_url---" . $redirectUrl); Log::info("workOrderBoundEnterprise 结束时间:" . microtime(true)); return redirect($redirectUrl); } public function workOrderBoundEnterpriseV2(Request $request) { $path = $request->input('target_path', 'boundEnterprise'); $target_path = "work/#/h5/" . $path; Log::info("workOrderBoundEnterprise target_path:" . $target_path . "path:" . $path . "开始时间:" . microtime(true)); // $target_path = '/work/#/h5/boundEnterprise'; $redirectUrl = $this->workAppAuth(request()->code, $target_path); Log::info("redirect_url---" . $redirectUrl); Log::info("workOrderBoundEnterprise 结束时间:" . microtime(true)); return redirect($redirectUrl); } public function workInvite() { $target_path = '/work/#/h5/invite'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workViewInvite() { $target_path = '/work/#/h5/viewInvite'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workInviteV2() { $target_path = '/work/#/h5/inviteV2'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workViewInviteV2() { $target_path = '/work/#/h5/viewInviteV2'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workInviteV3() { $target_path = '/work/#/h5/inviteV3'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workViewInviteV3() { $target_path = '/work/#/h5/viewInviteV3'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workInviteV4() { $target_path = '/work/#/h5/inviteV4'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workViewInviteV4() { $target_path = '/work/#/h5/viewInviteV4'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workTalkAuth(Request $request) { $id = $request->input('id'); $path = $request->get('target_path'); Log::info("workTalkAuth1--- id:" . $id . '|target_path:' . $path); if (!empty($path)) { $target_path = $path; } else { if (!empty($id)) { $target_path = '/work/#/h5/discussDetail?id=' . $id; } else { $target_path = '/work/#/h5/discussList'; } } $target_path = urldecode($target_path); Log::info("workTalkAuth2--- id:" . $id . '|target_path:' . $target_path); $redirectUrl = $this->workAuth(request()->code, $target_path, true); Log::info("workTalkAuth2--- id:" . $id . '|target_path:' . $target_path . '|redirectUrl' . $redirectUrl); return redirect($redirectUrl); } public function workAddAnnualMeeting() { $target_path = '/work/#/h5/addAnnualMeeting'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } public function workAllAnnualMeeting() { $target_path = '/work/#/h5/allAnnualMeeting'; $redirectUrl = $this->workAuth(request()->code, $target_path, true); return redirect($redirectUrl); } /** * 企业微信授权 * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function userWorkAuth() { $start_time = time(); $service_user_id = request()->service_user_id; $target_path = request()->target_path; //获取target_path里面的service_user_id,避免有特殊字符导致获取不到 if (empty($service_user_id) && !empty($target_path)) { // 使用正则表达式匹配service_user_id的值 preg_match('/service_user_id=(\d+)/', $target_path, $matches); if (isset($matches[1])) { $service_user_id = $matches[1]; } } session(['service_user_id' => $service_user_id]); $target_path = '/admin/#/h5/bindUserInfor?service_user_id=' . $service_user_id; Log::info('原始目标链接--' . $target_path . '开始时间:' . $start_time); $redirectUrl = $this->workAuth(request()->code, $target_path, true); $end_time = time(); Log::info('授权后目标链接--' . $redirectUrl . '结束时间:' . $end_time); return redirect($redirectUrl); } public function workAuth($code, $target_path, $is_work = false) { Log::info("workAuth: code:" . $code . '|target_path:' . $target_path); $redirect_url = config('app.url') . '/' . request()->path() . "?target_path=" . urlencode($target_path); $config = "work_application"; if ($is_work) { $config = "work_health"; } if ($code) { Log::info("workAuth1:" . $redirect_url); $redirect_url = WechatService::connectWorkAuthByCode($code, $config); return $redirect_url; } if (empty(session('work_wechat_user'))) { Log::info("workAuth2:" . $redirect_url); $redirect_url = WechatService::connectWorkAuth($redirect_url, $config); return $redirect_url; } Log::info("workAuth3:" . $redirect_url); return $target_path; } public function bindWorkUser(Request $request) { $service_user_id = session('service_user_id'); $service_user_id = $service_user_id ?: $request->input('service_user_id'); if (empty($service_user_id)) throw new \Exception("未获取到后台服务用户ID"); if (config('app.env') == 'production') { $work_user = session('work_wechat_user'); if (empty($work_user)) throw new \Exception("未授权企业微信用户"); if (!isset($work_user['raw']['userid'])) return $this->failure("请使用企业微信扫码绑定"); $work_id = $work_user['raw']['userid']; } else { $work_id = 'Feng...'; } $user = ServiceUser::find($service_user_id); if (empty($user)) throw new \Exception("后台服务用户不存在, service_user_id=" . $service_user_id); if ($user->work_user_id && $user->work_user_id != $work_id) return $this->failure("该二维码已绑定其他用户"); //是否多次绑定 $count = ServiceUser::where('work_user_id', $work_id) ->where('id', '<>', $user->id) ->whereNotNull('mobile') ->whereNotNull('name') ->count(); Log::info('bindWorkUser work_id:' . $work_id . '|service_user_id:' . $user->id); if ($count > 0) return $this->failure("该企业微信已绑定其他服务人员"); if (empty($user->work_user_id)) { DB::beginTransaction(); try { //将旧的,没有名字和手机号的置空,并更新wechat表 ServiceUser::where('work_user_id', $work_id)->update(['work_user_id' => null]); Wechat::where('openid', $work_id)->where('type', 'work')->update(['user_id' => $user->user_id]); //将新数据更新 ServiceUser::where('id', $service_user_id)->update(['work_user_id' => $work_id]); DB::commit(); } catch (\Exception $e) { DB::rollBack(); } } return $this->success('ok', $user); } public function bindWorkUserInfo(Request $request) { $service_user_id = session('service_user_id'); // Log::info($service_user_id); $service_user_id = $service_user_id ?: $request->input('service_user_id'); if (empty($service_user_id)) throw new \Exception("未获取到后台用户ID"); if (config('app.env') == 'production') { $work_user = session('work_wechat_user'); if (empty($work_user)) throw new \Exception("未授权企业微信用户"); if (!isset($work_user['raw']['userid'])) return $this->failure("请使用企业微信扫码绑定"); } Log::info("授权企业微信id=" . $service_user_id); $user = ServiceUser::find($service_user_id); if (empty($user)) throw new \Exception("后台服务用户不存在, service_user_id=" . $service_user_id); return $this->success('ok', $user); } public function chatUrlLink(Request $request) { $chat_id = $request->input('chat_id'); if (empty($chat_id)) throw new \Exception("缺少参数群信息chat_id"); $path = '/pages/service/healthMGT'; $query = 'chatId=' . $chat_id . '&index=0'; $url_link = WechatService::urlLink($path, $query); return $this->success('ok', compact('url_link')); } public function urlLink(Request $request) { $path = $request->input('path'); $query = $request->input('query'); $url_link = WechatService::urlLink($path, $query); return $this->success('ok', compact('url_link')); } public function getUrlLink(Request $request) { $url_link = $request->url_link; $url_link_info = WechatService::getUrlLink($url_link); return $this->success('ok', $url_link_info); } /** * 用户主动点击拉起非静默授权 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function newNonSilenceAuth(Request $request) { $code = $request->code; $jump_url = $request->jump_url ?? 'my'; $appid = config('wechat.official_account.default.app_id'); $secret = config('wechat.official_account.default.secret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = http_get_request($url); $invite_user_id = urldecode($request->invite_user_id); if ($result && isset($result['access_token'])) { DB::beginTransaction(); try { $wechat_user = Wechat::where('openid', $result['openid'])->first(); if ($wechat_user) { $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = http_get_request($url); Log::info("code 获取 wechat_user"); Log::info($result); $user = User::where('id', $wechat_user->user_id)->first(); $user->name = $wechat_user->nickname = $result['nickname'] ?? $wechat_user->nickname; if (in_array($result['sex'], [1, 2])) { $user->sex = $result['sex'] ?? ''; } $wechat_user->gender = $result['sex'] ?? ''; $wechat_user->city = $result['city'] ?? $wechat_user->city; $wechat_user->country = $result['country'] ?? $wechat_user->country; $user->avatar = $wechat_user->avatar = $result['headimgurl'] ?? $wechat_user->avatar; $user->save(); $wechat_user->save(); } DB::commit(); } catch (Exception $e) { DB::rollback(); throw new Exception($e); } } $redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?invite_user_id=' . $invite_user_id; return redirect($redirect_url); } /** * 查看用户是否授权 */ public function getUserIsAuth() { try { $user = Auth()->user(); $wechat_user_info = Wechat::where('user_id', $user->id)->where('type', 'official')->first(); $status = false; if ($wechat_user_info->nickname) { $status = true; } return $this->success('ok', $status); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } }