diff --git a/app/controller/api/Auth.php b/app/controller/api/Auth.php index 8eb39a98..a15a9af2 100644 --- a/app/controller/api/Auth.php +++ b/app/controller/api/Auth.php @@ -309,6 +309,63 @@ class Auth extends BaseController return app('json')->success($userRepository->returnToken($user[1], $tokenInfo)); } + /** + * 手机号用户绑定微信账号 + * @param UserRepository $repository + * @return mixed + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + */ + public function bindMp(UserRepository $repository) + { + list($code, $post_cache_key, $phone) = $this->request->params([ + 'code', + 'cache_key', + 'phone', + ], true); + $userInfoCong = Cache::get('eb_api_code_' . $code); + if (!$code && !$userInfoCong) + return app('json')->fail('授权失败,参数有误'); + $miniProgramService = MiniProgramService::create(); + if ($code && !$userInfoCong) { + try { + $userInfoCong = $miniProgramService->getUserInfo($code); + Cache::set('eb_api_code_' . $code, $userInfoCong, 86400); + } catch (Exception $e) { + return app('json')->fail('获取session_key失败,请检查您的配置!', ['line' => $e->getLine(), 'message' => $e->getMessage()]); + } + } + $data = $this->request->params([ + ['spread_spid', 0], + ['spread_code', ''], + ['iv', ''], + ['encryptedData', ''], + ]); + try { + //解密获取用户信息 + $userInfo = $miniProgramService->encryptor($userInfoCong['session_key'], $data['iv'], $data['encryptedData']); + } catch (Exception $e) { + if ($e->getCode() == '-41003') return app('json')->fail('获取会话密匙失败'); + throw $e; + } + if (!$userInfo) return app('json')->fail('openid获取失败'); + if (!isset($userInfo['openId'])) $userInfo['openId'] = $userInfoCong['openid'] ?? ''; + $userInfo['unionId'] = $userInfoCong['unionid'] ?? $userInfo['unionId'] ?? ''; + if (!$userInfo['openId']) return app('json')->fail('openid获取失败'); + /** @var WechatUserRepository $make */ + $make = app()->make(WechatUserRepository::class); + $user = $make->syncRoutineUser($userInfo['openId'], $userInfo, false); + if (!$user) { + return app('json')->fail('授权失败'); + } + $userInDb = $repository->accountByUser($phone); + if ($userInDb->save(['wechat_user_id' => $user[0]['wechat_user_id']]) === false) { + return app('json')->fail('授权失败'); + } + return app('json')->success(); + } + public function getCaptcha() { $codeBuilder = new CaptchaBuilder(null, new PhraseBuilder(4)); diff --git a/route/api.php b/route/api.php index 0f21917c..c6e86628 100644 --- a/route/api.php +++ b/route/api.php @@ -595,6 +595,8 @@ Route::group('api/', function () { Route::get('auth/wechat', 'api.Auth/auth'); //小程序授权 Route::post('auth/mp', 'api.Auth/mpAuth'); + //绑定小程序账号 + Route::post('auth/bindMp', 'api.Auth/bindMp'); //app授权 Route::post('auth/app', 'api.Auth/appAuth'); //apple授权