377 lines
14 KiB
PHP
377 lines
14 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\upload\Upload;
|
||
use app\model\BaseModel;
|
||
use app\model\message\Sms;
|
||
use app\model\system\Stat;
|
||
use extend\NickName;
|
||
/**
|
||
* 登录
|
||
* @author Administrator
|
||
*/
|
||
class Register extends BaseModel
|
||
{
|
||
public $password = '000000';
|
||
/**
|
||
* 用户名密码注册(必传username, password),之前检测重复性,判断用户名是否为手机,邮箱
|
||
* @param $data
|
||
* @return array|mixed
|
||
*/
|
||
public function usernameRegister($data)
|
||
{
|
||
$exist = $this->usernameExist($data['username'], $data['site_id']);
|
||
if ($exist) {
|
||
return $this->error("", "用户名已存在");
|
||
} else {
|
||
$member_level = new MemberLevel();
|
||
$member_level_info = $member_level->getMemberLevelInfo([['is_default', '=', 1], ['site_id', '=', $data['site_id']]], '*');
|
||
$member_level_info = $member_level_info['data'];
|
||
if (isset($data['source_member']) && !empty($data['source_member'])) {
|
||
$count = model("member")->getCount([['member_id', '=', $data['source_member']], ['site_id', '=', $data['site_id']], ['is_delete', '=', 0]]);
|
||
if (!$count) return $this->error('无推荐码');
|
||
}
|
||
$nickname = NickName::Name();
|
||
if (isset($data['avatarUrl']) && is_url($data['avatarUrl'])) {
|
||
$upload = new Upload($data['site_id'] ?: 0);
|
||
$res = $upload->setPath('upload/user/haedimg/')->remotePull($data['avatarUrl']);
|
||
if ($res['code'] >= 0) {
|
||
$data['headimg'] = $res['data']['pic_path'];
|
||
}
|
||
}
|
||
$data_reg = [
|
||
'site_id' => $data['site_id'],
|
||
'source_member' => isset($data['source_member']) ? $data['source_member'] : 0,
|
||
'username' => $data['username'],
|
||
'nickname' => $nickname,
|
||
'password' => data_md5($data['password']),
|
||
'headimg' => isset($data['headimg']) ? $data['headimg'] : '',
|
||
'member_level' => $member_level_info['level_id'],
|
||
'member_level_name' => $member_level_info['level_name'],
|
||
'reg_time' => time(),
|
||
'login_time' => time(),
|
||
'last_login_time' => time(),
|
||
'is_edit_username' => 1,
|
||
'login_type' => $data['app_type'] ?? '',
|
||
'login_type_name' => $data['app_type_name'] ?? '',
|
||
];
|
||
return $this->addMember($data_reg, $data, $member_level_info);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 手机号密码注册(必传mobile, password),之前检测重复性
|
||
* @param $data
|
||
* @return array|mixed
|
||
*/
|
||
public function mobileRegister($data)
|
||
{
|
||
$member_level = new MemberLevel();
|
||
$member_level_info = $member_level->getMemberLevelInfo([['is_default', '=', 1], ['site_id', '=', $data['site_id']]], '*');
|
||
$member_level_info = $member_level_info['data'];
|
||
if (isset($data['source_member']) && !empty($data['source_member'])) {
|
||
$count = model("member")->getCount([['member_id', '=', $data['source_member']], ['site_id', '=', $data['site_id']]]);
|
||
if (!$count) return error(-1, '无效推荐人');
|
||
}
|
||
if (!isset($data['source_member'])) {
|
||
return error(-1, '请使用推荐人二维码注册');
|
||
}
|
||
if (isset($data['avatarUrl']) && is_url($data['avatarUrl'])) {
|
||
$upload = new Upload($data['site_id'] ?: 0);
|
||
$res = $upload->setPath('upload/user/haedimg/')->remotePull($data['avatarUrl']);
|
||
if ($res['code'] >= 0) {
|
||
$data['headimg'] = $res['data']['pic_path'];
|
||
}
|
||
}
|
||
if (isset($data['password']) && $data['password']) {
|
||
$this->password = $data['password'];
|
||
}
|
||
$nickname = NickName::Name();
|
||
if (isset($data['nickName']) && !empty($data['nickName'])) {
|
||
$nickname = preg_replace_callback('/./u',
|
||
function (array $match) {
|
||
return strlen($match[0]) >= 4 ? '' : $match[0];
|
||
},
|
||
$data['nickName']);
|
||
}
|
||
$username = $this->createRandUsername($data['site_id']);
|
||
$data_reg = [
|
||
'site_id' => $data['site_id'],
|
||
'source_member' => isset($data['source_member']) ? $data['source_member'] : 0,
|
||
'username' => $username,
|
||
'mobile' => $data['mobile'],
|
||
'nickname' => $nickname,
|
||
'password' => data_md5($this->password),
|
||
'headimg' => isset($data['headimg']) ? $data['headimg'] : '',
|
||
'member_level' => $member_level_info['level_id'],
|
||
'member_level_name' => $member_level_info['level_name'],
|
||
'reg_time' => time(),
|
||
'login_time' => time(),
|
||
'last_login_time' => time(),
|
||
'is_edit_username' => 1,
|
||
'login_type' => $data['app_type'] ?? '',
|
||
'login_type_name' => $data['app_type_name'] ?? '',
|
||
];
|
||
return $this->addMember($data_reg, $data, $member_level_info);
|
||
}
|
||
|
||
/**
|
||
* 第三方注册
|
||
* @param $data
|
||
*/
|
||
public function authRegister($data)
|
||
{
|
||
$member_level = new MemberLevel();
|
||
$member_level_info = $member_level->getMemberLevelInfo([['is_default', '=', 1], ['site_id', '=', $data['site_id']]], '*');
|
||
$member_level_info = $member_level_info['data'];
|
||
if (isset($data['source_member']) && !empty($data['source_member'])) {
|
||
$count = model("member")->getCount([['member_id', '=', $data['source_member']], ['site_id', '=', $data['site_id']]]);
|
||
if (!$count) return error(-1, '无效推荐人');
|
||
}
|
||
if (!isset($data['source_member'])) {
|
||
return error(-1, '请使用推荐人二维码注册');
|
||
}
|
||
if (isset($data['avatarUrl']) && is_url($data['avatarUrl'])) {
|
||
$upload = new Upload($data['site_id'] ?: 0);
|
||
$res = $upload->setPath('upload/user/haedimg/')->remotePull($data['avatarUrl']);
|
||
if ($res['code'] >= 0) {
|
||
$data['headimg'] = $res['data']['pic_path'];
|
||
}
|
||
}
|
||
$nickname = NickName::Name();
|
||
if (isset($data['nickName']) && !empty($data['nickName'])) {
|
||
$nickname = preg_replace_callback('/./u',
|
||
function (array $match) {
|
||
return strlen($match[0]) >= 4 ? '' : $match[0];
|
||
},
|
||
$data['nickName']);
|
||
}
|
||
$username = $this->createRandUsername($data['site_id']);
|
||
$data_reg = [
|
||
'site_id' => $data['site_id'],
|
||
'source_member' => isset($data['source_member']) ? $data['source_member'] : 1,
|
||
'username' => $username,
|
||
'nickname' => $nickname,
|
||
'password' => data_md5($this->password),
|
||
'headimg' => isset($data['headimg']) ? $data['headimg'] : '',
|
||
'member_level' => $member_level_info['level_id'],
|
||
'member_level_name' => $member_level_info['level_name'],
|
||
'reg_time' => time(),
|
||
'login_time' => time(),
|
||
'last_login_time' => time(),
|
||
'is_edit_username' => 1,
|
||
'login_type' => $data['app_type'] ?? '',
|
||
'login_type_name' => $data['app_type_name'] ?? '',
|
||
];
|
||
return $this->addMember($data_reg, $data, $member_level_info);
|
||
}
|
||
|
||
/**
|
||
* 添加会员
|
||
* @param $data
|
||
* @return array
|
||
*/
|
||
private function addMember($data, $rawdata = [], $member_level_info = [])
|
||
{
|
||
Member::startTrans();
|
||
try {
|
||
$res = Member::create($data);
|
||
if ($res) {
|
||
//添加统计
|
||
$data['member_id'] = $res['member_id'];
|
||
$rawdata['uid'] = $res['member_id'];
|
||
$res->rcode=createShareCode($res['member_id']);
|
||
$res->save();
|
||
$this->BindOpenid($rawdata);//添加第三方绑定
|
||
//添加站点统计
|
||
$stat = new Stat();
|
||
$stat->addShopStat(['member_count' => 1, 'site_id' => $rawdata['site_id']]);
|
||
//会员注册事件
|
||
event("MemberRegister", array_merge($data, $rawdata, $member_level_info));
|
||
Member::commit();
|
||
return $this->success($res['member_id']);
|
||
} else {
|
||
Member::rollback();
|
||
return $this->error();
|
||
}
|
||
} catch (\Exception $e) {
|
||
Member::rollback();
|
||
return $this->error('', $e->getMessage());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 生成随机用户名
|
||
* @param $site_id
|
||
*/
|
||
private function createRandUsername($site_id)
|
||
{
|
||
$usernamer = 'u_' . random_keys(10);
|
||
$count = model('member')->getCount([['username', '=', $usernamer]]);
|
||
if ($count) {
|
||
$usernamer = $this->createRandUsername($site_id);
|
||
return $usernamer;
|
||
} else {
|
||
return $usernamer;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 检测用户存在性(用户名)
|
||
* @param $username
|
||
* @return int
|
||
*/
|
||
public function usernameExist($username, $site_id)
|
||
{
|
||
$member_info = model("member")->getInfo(
|
||
[
|
||
['username|mobile', '=', $username],
|
||
['site_id', '=', $site_id],
|
||
['is_delete', '=', 0]
|
||
], 'member_id'
|
||
);
|
||
if (!empty($member_info)) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检测用户存在性(用户名) 存在返回1
|
||
* @param $mobile
|
||
* @return int
|
||
*/
|
||
public function mobileExist($mobile, $site_id)
|
||
{
|
||
$member_info = model("member")->getInfo(
|
||
[
|
||
['mobile', '=', $mobile],
|
||
['site_id', '=', $site_id],
|
||
['is_delete', '=', 0]
|
||
], 'member_id'
|
||
);
|
||
if (!empty($member_info)) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/**
|
||
* 注册发送验证码
|
||
* @param $data
|
||
* @return array|mixed|void
|
||
*/
|
||
public function registerCode($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 registerSuccess($data)
|
||
{
|
||
|
||
$member_model = new Member();
|
||
$member_info_result = $member_model->getMemberInfo([["member_id", "=", $data["member_id"]]], "username,mobile,email,reg_time,wx_openid,last_login_type");
|
||
$member_info = $member_info_result["data"];
|
||
$name = $member_info["username"] == '' ? $member_info["mobile"] : $member_info["username"];
|
||
//发送短信
|
||
$var_parse = [
|
||
"shopname" => replaceSpecialChar($data['site_info']['site_name']), //商城名称
|
||
"username" => replaceSpecialChar($name), //会员名称
|
||
];
|
||
$data["sms_account"] = $member_info["mobile"] ?? '';//手机号
|
||
$data["var_parse"] = $var_parse;
|
||
$sms_model = new Sms();
|
||
$sms_result = $sms_model->sendMessage($data);
|
||
//发送模板消息
|
||
$wechat_model = new WechatMessage();
|
||
$data["openid"] = $member_info["wx_openid"];
|
||
|
||
$data["template_data"] = [
|
||
'keyword1' => $member_info["username"],
|
||
'keyword2' => time_to_date($member_info["reg_time"]),
|
||
];
|
||
$data["page"] = '';
|
||
$wechat_model->sendMessage($data);
|
||
|
||
return $this->success();
|
||
}
|
||
|
||
/**
|
||
* 拉取用户头像
|
||
* @param unknown $info
|
||
*/
|
||
private function pullHeadimg($data)
|
||
{
|
||
if (!empty($data['headimg']) && is_url($data['headimg'])) {
|
||
$url = __ROOT__ . '/api/member/pullheadimg?member_id=' . $data['member_id'];
|
||
http($url, 1);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 账号绑定(用户重新进行绑定)
|
||
* @param $data
|
||
* @return array
|
||
*/
|
||
public function BindOpenid($data)
|
||
{
|
||
if (isset($data['openid'])) {
|
||
$nickname = NickName::Name();
|
||
if (isset($data['nickName']) && !empty($data['nickName'])) {
|
||
$nickname = preg_replace_callback('/./u',
|
||
function (array $match) {
|
||
return strlen($match[0]) >= 4 ? '' : $match[0];
|
||
},
|
||
$data['nickName']);
|
||
}
|
||
$arr = [
|
||
'site_id' => isset($data['site_id']) ? $data['site_id'] : 0,
|
||
'uid' => $data['uid'] ?? 0,
|
||
'open_id' => $data['openid']??'',
|
||
'unionid' => $data['unionid'] ?? '',
|
||
'app_type' => $data['app_type'],
|
||
'nickname' => $nickname,
|
||
'headimg' => $data['headimg'] ?? '',
|
||
];
|
||
$model = new UniFans();
|
||
if ($info = $model->where(['open_id' => $arr['open_id'], 'site_id' => $arr['site_id']])->find()) {
|
||
$info->save($arr);
|
||
} else {
|
||
$model->save($arr);
|
||
}
|
||
}
|
||
return $this->success();
|
||
}
|
||
} |