Files
ZangShiQi/app/model/member/Register.php
2026-04-04 17:27:12 +08:00

383 lines
14 KiB
PHP
Executable File
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
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\member;
use addon\coupon\model\CouponType;
use addon\wechat\model\Message as WechatMessage;
use app\model\BaseModel;
use app\model\message\Sms;
use addon\coupon\model\Coupon;
use app\model\system\Stat;
use think\facade\Queue;
/**
* 注册
* Class Register
* @package app\model\member
*/
class Register extends BaseModel
{
/**
* 用户名密码注册(必传username password),之前检测重复性,判断用户名是否为手机,邮箱
* @param $data
* @return array|mixed
*/
public function usernameRegister($data)
{
$examine_username_exit = $this->usernameExist($data['username'], $data['site_id']);
if ($examine_username_exit) return $this->error('', '用户名已存在');
$nickname = $data['username']; // 默认昵称为用户名
if (isset($data['nickname']) && !empty($data['nickname'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickname']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 手机号密码注册(必传mobile password),之前检测重复性
* @param $data
* @return array|mixed
*/
public function mobileRegister($data)
{
$examine_mobile_exit = $this->mobileExist($data['mobile'], $data['site_id']);
if ($examine_mobile_exit) return $this->error('', '手机号已存在');
$data['username'] = $data['username'] ?? $this->createRandUsername($data['site_id']);
$nickname = substr($data['mobile'], 0, 3).'****'.substr($data['mobile'], 7);
if (isset($data['nickname']) && !empty($data['nickname'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickname']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 第三方注册
* @param $data
* @return array
*/
public function authRegister($data)
{
$data['username'] = $this->createRandUsername($data['site_id']);
$nickname = $data['username'];
if (isset($data['nickName']) && !empty($data['nickName'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickName']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 会员注册方法
* @param $data
* @return array
*/
private function memberRegister($data)
{
//会员注册相关奖励
$award_array = [
'point' => 0,
'balance' => 0,
'growth' => 0,
'coupon' => 0,
'coupon_list' => [],
'coupon_list_config'=>[]
];
$reg_award_array = event("MemberRegisterAward", ['site_id' => $data['site_id']]);
if (!empty($reg_award_array)) {
foreach ($reg_award_array as $k => $v) {
$award_array['point'] += $v['point'] ?? 0;
$award_array['balance'] += $v['balance'] ?? 0;
$award_array['growth'] += $v['growth'] ?? 0;
$coupon_list = $v['coupon_list'] ?? [];
if (!empty($coupon_list)) {
$award_array['coupon_list'] = empty($award_array['coupon_list']) ? $coupon_list : array_merge($award_array['coupon_list'], $v['coupon_list']);
$award_array['coupon_list_config'] = array_column($v['coupon_new'] ?? [],'num','id');
}
}
}
//查询会员等级相关(根据会员获取的成长值)
$member_level = new MemberLevel();
$member_level_info = $member_level->getFirstMemberLevel([['site_id', '=', $data['site_id']], ['level_type', '=', 0], ['growth', '<=', $award_array['growth']]], '*', 'growth desc')['data'];
//查询会员等级相关奖励
$data_reg = [
'site_id' => $data['site_id'],
'source_member' => $data['source_member'] ?? 0,
'username' => $data['username'],
'nickname' => $data['nickname'],
'mobile' => $data['mobile'] ?? '',
'password' => isset($data['password']) && !empty($data['password']) ? data_md5($data['password']) : '',
'qq_openid' => $data['qq_openid'] ?? '',
'wx_openid' => $data['wx_openid'] ?? '',
'weapp_openid' => $data['weapp_openid'] ?? '',
'wx_unionid' => $data['wx_unionid'] ?? '',
'ali_openid' => $data['ali_openid'] ?? '',
'baidu_openid' => $data['baidu_openid'] ?? '',
'toutiao_openid' => $data['toutiao_openid'] ?? '',
'headimg' => $data['avatarUrl'] ?? '',
'member_level' => !empty($member_level_info) ? $member_level_info['level_id'] : 0,
'member_level_name' => !empty($member_level_info) ? $member_level_info['level_name'] : '',
'is_member' => !empty($member_level_info) ? 1 : 0,
'member_time' => !empty($member_level_info) ? time() : 0,
'reg_time' => time(),
'login_time' => time(),
'last_login_time' => time(),
'is_edit_username' => 1,
'last_visit_time' => time(),
'login_type' => $data['app_type'] ?? '',
'login_type_name' => $data['app_type_name'] ?? '',
];
$member_id = model("member")->add($data_reg);
if ($member_id) {
if (!empty($member_level_info)) {
$award_array['point'] += $member_level_info['send_point'];
$award_array['balance'] += $member_level_info['send_balance'];
//获取优惠券信息
if (!empty($member_level_info['send_coupon'])) {
//优惠券字段
$coupon_field = '*';
$model = new CouponType();
$coupon = $model->getCouponTypeList([['coupon_type_id', 'in', $member_level_info['send_coupon']]], $coupon_field);
$member_level_info['coupon_list'] = $coupon['data'];
}
$coupon_list = $member_level_info['coupon_list'] ?? [];
if (!empty($coupon_list)) {
$award_array['coupon_list'] = empty($award_array['coupon_list']) ? $coupon_list : array_merge($award_array['coupon_list'], $v['coupon_list']);
}
}
//会员注册奖励积分,优惠券,红包
$data_reg['member_id'] = $member_id;
$member_account_model = new MemberAccount();
$member_account_model->addMemberAccountInRegister($data_reg, $award_array);
//给用户发放优惠券
if (!empty($award_array['coupon_list'])) {
$coupon_model = new Coupon();
$coupon_data = [];
foreach($award_array['coupon_list'] as $val){
$coupon_data[] = ['coupon_type_id' => $val['coupon_type_id'], 'num' => $award_array['coupon_list_config'][$val['coupon_type_id']] ?? 1];
}
$coupon_model->giveCoupon($coupon_data, $data['site_id'], $member_id, Coupon::GET_TYPE_ACTIVITY_GIVE);
}
//会员注册成功后续事件
Queue::push('app\job\MemberRegisterAfter', $data_reg);
}
return $this->success($member_id);
}
/**
* 会员注册成功后续事件
* @param $data_reg
*/
public function memberRegisterAfter($data_reg)
{
event("MemberRegister", ['member_id' => $data_reg['member_id'], 'site_id' => $data_reg['site_id']]);
//添加统计
$stat = new Stat();
$stat->switchStat(['type' => 'add_member', 'data' => ['member_count' => 1, 'site_id' => $data_reg['site_id']]]);
$this->pullHeadimg($data_reg);
}
/**
* 生成随机用户名
* @param $site_id
* @return string
*/
private function createRandUsername($site_id)
{
$usernamer = 'u_' . random_keys(10);
$count = model('member')->getCount([['username', '=', $usernamer], ['site_id', '=', $site_id]]);
if ($count) {
$usernamer = $this->createRandUsername($site_id);
return $usernamer;
} else {
return $usernamer;
}
}
/**
* 重置用户微信openid
* @param $data
* @return array
*/
public function wxopenidBind($data)
{
$res = model("member")->update(['wx_openid' => $data['wx_openid']], [['member_id', '=', $data['member_id']], ['site_id', '=', $data['site_id']], ['is_delete', '=', 0]]);
if ($res) {
return $this->success($res);
} else {
return $this->error();
}
}
/**
* 检测用户存在性(用户名)
* @param $username
* @param $site_id
* @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
* @param $site_id
* @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;
}
}
/**
* 检测用户存在性(wx_openid) 存在返回1 新增2021.06.18
* @param $mobile
* @param $site_id
* @return int
*/
public function openidExist($mobile, $site_id)
{
$member_info = model("member")->getInfo([
['mobile', '=', $mobile],
['site_id', '=', $site_id],
['is_delete', '=', 0]
], 'wx_openid');
if (!empty($member_info['wx_openid'])) {
return 1;
} else {
return 0;
}
}
/**
* 获取用户ID 新增2021.06.18
* @param $mobile
* @param $site_id
* @return int
*/
public function getMemberId($mobile, $site_id)
{
$member_info = model("member")->getInfo([
['mobile', '=', $mobile],
['site_id', '=', $site_id],
['is_delete', '=', 0]
], 'member_id');
if (!empty($member_info)) {
return $member_info['member_id'];
} 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,nickname");
$member_info = $member_info_result["data"];
$name = $member_info["nickname"] == '' ? $member_info["mobile"] : $member_info["nickname"];
//发送短信
$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);
// if ($sms_result["code"] < 0) return $sms_result;
//发送模板消息
$wechat_model = new WechatMessage();
$data["openid"] = $member_info["wx_openid"];
$data["template_data"] = [
'keyword1' => $member_info["nickname"],
'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);
}
}
}