getPcApp(); $user = $app->oauth->userFromCode($code); $weInfo = $user->toArray(); $wx_unionid = $weInfo['raw']['unionid'] ?? ''; $wx_h5_openid = $weInfo['raw']['openid']; $key2 = 'wechat:userInfo:' . $code; Cache::put($key2, $weInfo, 600); //根据openid判断该用户是否已经存在,如果存在则登录跳转 $flag = false; $materialService = new MaterialService(new EavSetService('user')); $memberInfo = $materialService->elasticClientService()->queryOne(['wx_h5_openid' => $wx_h5_openid]); if ($memberInfo) { $flag = true; } else { if ($wx_unionid) { $memberInfo = $materialService->elasticClientService()->queryOne(['wx_unionid' => $wx_unionid]); if ($memberInfo) { $flag = true; } } } if ($flag) { //更新微信的头像和昵称信息 $materialService->update($memberInfo['id'], ['wx_unionid' => $wx_unionid, 'wx_h5_openid' => $wx_h5_openid, 'wx_info' => json_encode($weInfo)]); $loginToken = $this->setLoginStatus($memberInfo); $loginKey = md5(microtime() . mt_rand()); Cache::put($loginKey, $loginToken, 120); $url = toRoute('/store/tologin?is_login=1&key=' . $loginKey); } else { $loginKey = $code; $url = toRoute('/store/tologin?is_login=2&key=' . $loginKey); } Cache::forget($wechat_cache_key); return redirect($url); } /** * 微信公账号登录,客户绑定手机号 */ public function bindIn() { $requestData = Request::all(); $rule = [ 'key' => 'required', 'mobile' => 'required', 'sms_code' => 'required', ]; $msg = [ 'key.required' => '参数错误!', 'mobile.required' => '请填写手机号!', 'sms_code.required' => '请填写6位短信验证码!', 'sms_code.size' => '短信验证码必须是6个字符!', ]; $validator = Validator::make($requestData, $rule, $msg); if ($validator->fails()) { $errorMessage = $validator->errors()->all(); return response()->json(['result' => false, 'code' => 2001, 'msg' => $errorMessage[0] ?? '']); } //判断验证短信验证码是否正确 $result_bool = $this->smsService->checkSmsCode($requestData['mobile'], $requestData['sms_code'], 'bind'); if (!$result_bool) { return $this->responseMessage(2002, '短信验证码错误,请确认后再试!'); } //获取微信的信息 $key2 = 'wechat:userInfo:' . $requestData['key']; $weInfo = Cache::get($key2); if (empty($weInfo)) { return $this->responseMessage(2003, '微信登录失败,请重试!'); } $wx_unionid = $weInfo['raw']['unionid'] ?? ''; $wx_h5_openid = $weInfo['raw']['openid']; //检测手机号是否已经存在 $loginToken = ''; $materialService = new MaterialService(new EavSetService($this->userSetAlias)); $userInfo = $materialService->elasticClientService()->queryOne(['mobile' => $requestData['mobile']]); if ($userInfo) { //更新到数据库 $is_success = $materialService->update($userInfo['id'], ['wx_unionid' => $wx_unionid, 'wx_h5_openid' => $wx_h5_openid, 'wx_info' => json_encode($weInfo)]); if ($is_success) { //设置登录状态 $loginService = new LoginService($this->siteAliasName); $loginToken = $loginService->setLoginCookie($userInfo); //给管理员发送邮件通知 $this->dispatch(new SendEmail('597196313@qq.com', '老用户【' . $requestData['mobile'] . '】【' . $weInfo['nickname'] . '】,通过微信绑定成功!!')); } } else { //保存到数据库 $data = [ 'mobile' => $requestData['mobile'], 'username' => $weInfo['nickname'], 'wx_unionid' => $wx_unionid, 'wx_h5_openid' => $wx_h5_openid, 'gender' => $weInfo['raw']['sex'] ?? 0, 'wx_info' => json_encode($weInfo), 'password' => '', //生成随机密码 'avatar' => $weInfo['avatar'], 'role_id' => 1, 'status' => 1, // 状态 1正常 2黑名单 'setmeal_type' => 1, // 7天 体验版 'end_use_time' => time() + 3600 * 24 * 7 ]; $is_success = $materialService->addProduct($data, true); if ($is_success) { //设置登录状态 $userInfo = $materialService->elasticClientService()->docGet($is_success); $loginService = new LoginService($this->siteAliasName); $loginToken = $loginService->setLoginCookie($userInfo); //给管理员发送邮件通知 $this->dispatch(new SendEmail('597196313@qq.com', '新商家【' . $data['mobile'] . '】【' . $weInfo['nickname'] . '】,通过微信绑定,注册成功!!请尽快和该用户取得联系。提供服务!')); } } // 登录日志 if ($loginToken) { return $this->responseMessage(1001, '绑定成功', $loginToken); } else { return $this->responseMessage(2001, '绑定失败,请稍后再试!'); } } }