admin/addon/member/model/Register.php

377 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();
}
}