微信登录

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
{
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']));
}
}

View File

@ -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'],
];
}

View File

@ -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);

View File

@ -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);
}
}