admin/addon/member/model/Login.php

246 lines
9.1 KiB
PHP

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace addon\member\model;
use addon\wechat\model\Message as WechatMessage;
use app\model\BaseModel;
use app\model\message\Sms;
/**
* 登录
*
* @author Administrator
*
*/
class Login extends BaseModel
{
/**
* 用户登录
* @param unknown $data 必然传输username
*/
public function login($data)
{
//必然传输usern
$info = model("member")->getInfo(
[
['username|mobile|email', '=', $data['username']],
['password', '=', data_md5($data['password'])],
['site_id', '=', $data['site_id']],
['is_delete', '=', 0]
], 'member_id,
username, nickname, mobile, email, status,last_login_time'
);
if (empty($info)) {
return $this->error('', 'USERNAME_OR_PASSWORD_ERROR');
} elseif ($info['status'] == 0) {
return $this->error('', 'MEMBER_IS_LOCKED');
} else {
//更新登录时间
model("member")->update([
'login_time' => time(),
'last_login_time' => time(),
'login_ip' => request()->ip(),
'login_type' => $data['app_type'] ?? '',
'login_type_name' => $data['app_type_name'] ?? '',
], [['member_id', '=', $info['member_id']]]);
//执行登录奖励
event("MemberLogin", ['member_id' => $info['member_id'], 'site_id' => $data['site_id']], true);
$register=new Register();
$data['uid']=$info['member_id'];
//用户第三方信息刷新
$register->BindOpenid($data);
return $this->success($info);
}
}
/***
* 第三方登录
* @param $data
* @param int $site_id
*/
public function ThirdLogin($data,$site_id)
{
$where=[
['uni_fans.site_id','=',$site_id],
['uni_fans.open_id','=',$data['openid']],
];
$unionid='';
if(isset($data['unionid']) && $data['unionid']){
$unionid=$data['unionid'];
$where=[
['uni_fans.unionid','=',$unionid]
];
}
$info = UniFans::where($where)->field('open_id,app_type,unionid,nickname,headimg')->withJoin('bindMember')->find();
if (empty($info)) {
$register = new Register();
$config = new Config();
//会员不存在 第三方自动注册开启 未开启绑定手机 则进行自动注册
$reg_config = $config->getRegisterConfig($site_id)[ 'data' ][ 'value' ];
if ($reg_config['third_party'] && !$reg_config[ 'bind_mobile' ]) {
$register_res = $register->authRegister($data);
if ($register_res[ 'code' ] >= 0) {
$memberInfo=Member::where('member_id','=',$register_res[ 'data' ])->withoutField('password,pay_password')->find();
$memberInfo['site_id']=$site_id;
$memberInfo['app_type']=$data['app_type'];
$memberInfo['is_register']=1;
$loginInfo=$memberInfo;
$loginInfo['site_id']=$site_id;
$loginInfo['app_type']=$data['app_type'];
$loginInfo['openid']=$data['openid'];
$loginInfo['unionid']=$unionid;
event("MemberLogin", $loginInfo, true);
return $memberInfo;
}else{
return $this->error('', 'MEMBER_NOT_EXIST');
}
}else if($reg_config[ 'bind_mobile' ]){
$data['code']=-1;
$data['bind_mobile']=1;
return $data;
}else{
return $this->error('MEMBER_NOT_EXIST');
}
} elseif ($info['bindMember']['status'] == 0) {
return $this->error('', 'MEMBER_IS_LOCKED');
} else {
$info->hidden(['bindMember'=>['password','pay_password']]);
$info->bindMember->save([
'last_login_ip'=> $info->bindMember->login_ip,
'last_login_type'=>$info->bindMember->login_type,
'last_login_time'=>$info->bindMember->login_time,
'login_time' => time(),
'login_type' =>$data['app_type'],
'login_ip' => request()->ip(),
]);
$info=$info->toArray();
$loginInfo=$info['bindMember'];
$loginInfo['site_id']=$site_id;
$loginInfo['app_type']=$info['app_type'];
$memberInfo=$loginInfo;
$loginInfo['openid']=$info['open_id'];
$loginInfo['unionid']=$info['unionid'];
if($unionid){
$register = new Register();
$data['uid']= $memberInfo['member_id'];
$data['site_id']= $site_id;
$data['headimg']= $info['headimg'];
$register->BindOpenid($data);
}
event("MemberLogin", $loginInfo, true);
return $memberInfo;
}
}
/**
* 用户登录
* @param unknown $data 必然传输username
*/
public function mobileLogin($data)
{
//必然传输usern
$info = model("member")->getInfo(
[
['mobile', '=', $data['mobile']],
['site_id', '=', $data['site_id']],
['is_delete','=',0]
],
'member_id,username, nickname, mobile, email, status,last_login_time'
);
if (empty($info)) {
return $this->error('', 'MEMBER_NOT_EXIST');
} elseif ($info['status'] == 0) {
return $this->error('', 'MEMBER_IS_LOCKED');
} else {
//更新登录时间
model("member")->update([
'login_time' => time(),
'last_login_time' => time(),
'login_ip' => request()->ip(),
'login_type' => $data['app_type'] ?? '',
'login_type_name' => $data['app_type_name'] ?? '',
], [['member_id', '=', $info['member_id']]]);
event("MemberLogin", ['member_id' => $info['member_id'], 'site_id' => $data['site_id']], true);
//用户第三方信息刷新
// $this->refreshAuth($info['member_id'], $data);
return $this->success($info);
}
}
/**
* 登录动态码
* @param $data
*/
public function loginCode($data)
{
//发送短信
$sms_model = new Sms();
$var_parse = array(
"code" => $data["code"],
);
$data["sms_account"] = $data["mobile"] ?? '';//手机号
$data["var_parse"] = $var_parse;
$sms_result = $sms_model->sendMessage($data);
if ($sms_result["code"] < 0)
return $sms_result;
return $this->success();
}
/**
* 登录通知
* @param $data
* @return array|mixed|void
*/
public function loginSuccess($data)
{
$member_model = new Member();
$member_info_result = $member_model->getMemberInfo([["member_id", "=", $data["member_id"]]], "username,mobile,email,reg_time,last_login_type,login_time");
$member_info = $member_info_result["data"];
//发送短信
$sms_model = new Sms();
$name = $member_info["username"] == '' ? $member_info["mobile"] : $member_info["username"];
$var_parse = array(
"name" => replaceSpecialChar($name),//验证码
);
$data["sms_account"] = $member_info["mobile"] ?? '';//手机号
$data["var_parse"] = $var_parse;
$sms_result = $sms_model->sendMessage($data);
// if($sms_result["code"] < 0)
// return $sms_result;
//发送模板消息
$wechat_model = new WechatMessage();
$data["openid"] = $member_info["wechat_openid"];
// if(!empty($member_info["username"])){
// $user_account = $member_info["username"];
// }else{
// if(!empty($member_info["mobile"])){
// $user_account = $member_info["mobile"];
// }else{
// $user_account = $member_info["email"];
// }
// }
$data["template_data"] = [
'keyword1' => !empty($member_info["username"]) ? $member_info["username"] : $member_info["mobile"],
'keyword2' => '登录成功',
'keyword3' => time_to_date($member_info["login_time"]),
];
$data["page"] = '';
$wechat_model->sendMessage($data);
return $this->success();
}
}