微信登录

This commit is contained in:
gcd 2025-03-28 10:01:30 +08:00
parent dd1fac2198
commit 49d7b3f1ac
4 changed files with 61 additions and 18 deletions

View File

@ -6,17 +6,28 @@ use app\common\controller\Api;
class Worker extends Api class Worker extends Api
{ {
protected $noNeedLogin = ['phoneLogin']; protected $noNeedLogin = ['login'];
protected $noNeedRight = ['*']; protected $noNeedRight = ['*'];
function phoneLogin() function login()
{ {
$params = $this->request->request(); $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) { if ($validate !== true) {
$this->error($validate); $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']));
} }
} }

View File

@ -7,7 +7,7 @@ use think\Validate;
class Worker extends Validate class Worker extends Validate
{ {
protected $rule = [ protected $rule = [
'code|手机号获取凭证 code ' => 'require|max:128', 'code' => 'require|max:128',
]; ];
protected $message = [ protected $message = [
@ -15,6 +15,7 @@ class Worker extends Validate
]; ];
protected $scene = [ protected $scene = [
'phoneLogin' => ['code'], 'login' => ['code'],
'bindPhoneNumber' => ['code'],
]; ];
} }

View File

@ -13,8 +13,13 @@ class BaseService
protected function apiError($msg, $code = 0, $data = []) protected function apiError($msg, $code = 0, $data = [])
{ {
if (!empty($data)) { if (!empty($data)) {
array_unshift($data, $msg); array_unshift($data, ['msg' => $msg]);
Log::log($data);
$log = [
'请求参数' => $_REQUEST,
'结果' => $data,
];
Log::log($log);
} }
throw new ApiException($msg, $code); throw new ApiException($msg, $code);

View File

@ -2,29 +2,55 @@
namespace app\services; namespace app\services;
use app\api\library\ApiException;
use EasyWeChat\Factory; use EasyWeChat\Factory;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use EasyWeChat\MiniProgram\Application;
class WorkerService extends BaseService class WorkerService extends BaseService
{ {
public function phoneLogin(string $code) public function bindPhoneNumber(string $code)
{ {
$config = [ //getPhoneNumber 方法通过魔术方法 __call 获取
'app_id' => config('mini_program.app_id'), $phoneInfo = $this->getMiniProgramApp()->getPhoneNumber($code);
'secret' => config('mini_program.secret'),
];
$app = Factory::miniProgram($config);
$phoneInfo = $app->getPhoneNumber($code);
if (empty($phoneInfo)) { if (empty($phoneInfo)) {
$this->apiError('手机号登录失败', 0, $phoneInfo); $this->apiError('获取手机号失败', 0, $phoneInfo);
} }
if ($phoneInfo['errcode'] !== 0) { if ($phoneInfo['errcode'] !== 0) {
$this->apiError('手机号登录失败', 0, $phoneInfo); $this->apiError('获取手机号失败', 0, $phoneInfo);
} }
$phone = $phoneInfo['phone_info']['phoneNumber']; $phone = $phoneInfo['phone_info']['phoneNumber'];
dump($phone); 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);
}
} }