246 lines
9.1 KiB
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();
|
|
}
|
|
} |