Files
hyperf_service/app/Service/Api/Login/WxFastLoginService.php
2024-11-25 11:51:02 +08:00

95 lines
2.1 KiB
PHP

<?php
/**
* This service file is part of item.
*
* @author ctexthuang
* @contact ctexthuang@qq.com
*/
declare(strict_types=1);
namespace App\Service\Api\Login;
use App\Constants\Common\ThirdCode;
use App\Exception\ErrException;
use App\Model\UserThird;
use App\Service\ServiceTrait\Api\WxMiniTrait;
use Hyperf\DbConnection\Db;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use RedisException;
class WxFastLoginService extends LoginBaseService
{
use WxMiniTrait;
/**
* 登录类型 2=微信小程序
*/
const int LOGIN_TYPE = 2;
/**
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws RedisException
*/
public function handle()
{
$this->jsCode = $this->request->input('js_code');
if (empty($this->jsCode)) throw new ErrException('登录参数错误');
$wxInfo = $this->jsCodeGetOpenId($this->jsCode);
$this->openId = $wxInfo['openid'];
$this->unionId = $wxInfo['unionid'] ?? '';
$this->checkLock(self::LOGIN_TYPE);
$this->register();
$this->login();
$this->redis->delLock($this->lockKey);
return $this->getReturn();
}
/**
* 注册
* @return void
*/
protected function register(): void
{
$thirdInfo = $this->userThirdModel->getThirdInfoByOpenId($this->openId);
if (!empty($thirdInfo)) {
$this->userId = $thirdInfo->user_id;
return;
}
// todo 设备封禁不可注册 注册限制
Db::transaction(function () {
$this->addUser();
$this->addUserThird();
//todo 要不要生成邀请码 有没有注册奖励
});
}
/**
* @return void
*/
private function addUserThird(): void
{
$model = new UserThird();
$model->user_id = $this->userId;
$model->open_id = $this->openId;
$model->union_id = $this->unionId;
$model->type = ThirdCode::WX_LOGIN;
if (!$model->save()) throw new ErrException('注册失败-00001');
}
}