From 49d7b3f1acdd3d94cb623037529463953e8d67b6 Mon Sep 17 00:00:00 2001 From: gcd Date: Fri, 28 Mar 2025 10:01:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Worker.php | 19 ++++++++--- application/api/validate/Worker.php | 5 +-- application/services/BaseService.php | 9 +++-- application/services/WorkerService.php | 46 ++++++++++++++++++++------ 4 files changed, 61 insertions(+), 18 deletions(-) diff --git a/application/api/controller/Worker.php b/application/api/controller/Worker.php index 70aa643..5417afa 100644 --- a/application/api/controller/Worker.php +++ b/application/api/controller/Worker.php @@ -6,17 +6,28 @@ use app\common\controller\Api; class Worker extends Api { - protected $noNeedLogin = ['phoneLogin']; + protected $noNeedLogin = ['login']; protected $noNeedRight = ['*']; - function phoneLogin() + function login() { $params = $this->request->request(); - $validate = $this->validate($params, \app\api\validate\Worker::class . '.phoneLogin'); + $validate = $this->validate($params, \app\api\validate\Worker::class . '.login'); if ($validate !== true) { $this->error($validate); } - $this->success('登录成功', $this->getWorkerService()->phoneLogin($params['code'])); + $this->success('登录成功', $this->getWorkerService()->login($params['code'])); + } + + function bindPhoneNumber() + { + $params = $this->request->request(); + $validate = $this->validate($params, \app\api\validate\Worker::class . '.bindPhoneNumber'); + if ($validate !== true) { + $this->error($validate); + } + + $this->success('操作成功', $this->getWorkerService()->bindPhoneNumber($params['code'])); } } diff --git a/application/api/validate/Worker.php b/application/api/validate/Worker.php index 496db24..b27e3d5 100644 --- a/application/api/validate/Worker.php +++ b/application/api/validate/Worker.php @@ -7,7 +7,7 @@ use think\Validate; class Worker extends Validate { protected $rule = [ - 'code|手机号获取凭证 code ' => 'require|max:128', + 'code' => 'require|max:128', ]; protected $message = [ @@ -15,6 +15,7 @@ class Worker extends Validate ]; protected $scene = [ - 'phoneLogin' => ['code'], + 'login' => ['code'], + 'bindPhoneNumber' => ['code'], ]; } diff --git a/application/services/BaseService.php b/application/services/BaseService.php index 56e3b1f..9cd0008 100644 --- a/application/services/BaseService.php +++ b/application/services/BaseService.php @@ -13,8 +13,13 @@ class BaseService protected function apiError($msg, $code = 0, $data = []) { if (!empty($data)) { - array_unshift($data, $msg); - Log::log($data); + array_unshift($data, ['msg' => $msg]); + + $log = [ + '请求参数' => $_REQUEST, + '结果' => $data, + ]; + Log::log($log); } throw new ApiException($msg, $code); diff --git a/application/services/WorkerService.php b/application/services/WorkerService.php index 8ad697e..fb2b075 100644 --- a/application/services/WorkerService.php +++ b/application/services/WorkerService.php @@ -2,29 +2,55 @@ namespace app\services; -use app\api\library\ApiException; use EasyWeChat\Factory; +use EasyWeChat\Kernel\Exceptions\InvalidConfigException; +use EasyWeChat\MiniProgram\Application; class WorkerService extends BaseService { - public function phoneLogin(string $code) + public function bindPhoneNumber(string $code) { - $config = [ - 'app_id' => config('mini_program.app_id'), - 'secret' => config('mini_program.secret'), - ]; - $app = Factory::miniProgram($config); - $phoneInfo = $app->getPhoneNumber($code); + //getPhoneNumber 方法通过魔术方法 __call 获取 + $phoneInfo = $this->getMiniProgramApp()->getPhoneNumber($code); if (empty($phoneInfo)) { - $this->apiError('手机号登录失败', 0, $phoneInfo); + $this->apiError('获取手机号失败', 0, $phoneInfo); } if ($phoneInfo['errcode'] !== 0) { - $this->apiError('手机号登录失败', 0, $phoneInfo); + $this->apiError('获取手机号失败', 0, $phoneInfo); } $phone = $phoneInfo['phone_info']['phoneNumber']; dump($phone); } + + public function login(string $code) + { + $app = $this->getMiniProgramApp(); + try { + $info = $app->auth->session($code); + } catch (InvalidConfigException $e) { + $this->apiError('登录失败', $e); + } + + if (isset($info['errcode']) && $info['errcode'] !== 0) { + $this->apiError('登录失败', 0, $info); + } + + dd($info); + } + + /** + * 获取小程序 App + * @return Application + */ + private function getMiniProgramApp(): Application + { + $config = [ + 'app_id' => config('mini_program.app_id'), + 'secret' => config('mini_program.secret'), + ]; + return Factory::miniProgram($config); + } }