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