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