483 lines
19 KiB
PHP
483 lines
19 KiB
PHP
<?php
|
||
/**
|
||
* SAAS应用系统 --- 十年开发经验汇集巨献!
|
||
* ==========================================================
|
||
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
|
||
* ----------------------------------------------------------
|
||
* 官方网址: https://www.zoomtk.com
|
||
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
|
||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布传播。
|
||
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
|
||
* ==========================================================
|
||
*/
|
||
namespace addon\member\api\controller;
|
||
use addon\member\model\Member as MemberModel;
|
||
use addon\member\model\MemberAccount;
|
||
use addon\member\model\Register as RegisterModel;
|
||
use addon\member\model\MemberLevel as MemberLevelModel;
|
||
use app\model\message\Message;
|
||
use think\facade\Cache;
|
||
use extend\QRcode as QRcodeExtend;
|
||
use app\api\controller\BaseApi;
|
||
use think\facade\Db;
|
||
class Member extends BaseApi
|
||
{
|
||
/**
|
||
* 基础信息
|
||
*/
|
||
public function info()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
$member_model = new MemberModel();
|
||
$info = $member_model->getMemberInfo([['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]], 'member_id,source_member,username,nickname,mobile,email,password,status,headimg,member_level,member_level_name,member_label,member_label_name,qq,realname,sex,location,birthday,point,balance,balance_money,growth,sign_days_series,password,member_level_type,level_expire_time,is_edit_username,is_fenxiao,rcode');
|
||
if (!empty($info['data'])) {
|
||
$info['data']['nickname']=emojiDecode($info['data']['nickname']);
|
||
$info['data']['password'] = empty($info['data']['password']) ? 0 : 1;
|
||
$member_level_model = new MemberLevelModel();
|
||
$member_level_result = $member_level_model->getMemberLevelInfo([['level_id', '=', $info['data']['member_level']]]);
|
||
$member_level = $member_level_result['data'] ?? [];
|
||
$info['data']['member_level_info'] = $member_level;
|
||
}
|
||
return $this->response($info);
|
||
}
|
||
|
||
/**
|
||
* 修改会员头像
|
||
* @return string
|
||
*/
|
||
public function modifyheadimg()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$headimg = isset($this->params['headimg']) ? $this->params['headimg'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['headimg' => $headimg], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 修改用户名
|
||
* @return false|string
|
||
*/
|
||
public function modifyUsername(){
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$username = isset($this->params['username']) ? $this->params['username'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editUsername($this->member_id, $this->site_id, $username);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 修改昵称
|
||
* @return string
|
||
*/
|
||
public function modifynickname()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$nickname = isset($this->params['nickname']) ? $this->params['nickname'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['nickname' => $nickname], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 修改手机号
|
||
* @return string
|
||
*/
|
||
public function modifymobile()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
// 校验验证码
|
||
$captcha = new Captcha();
|
||
$check_res = $captcha->checkCaptcha(false);
|
||
if ($check_res['code'] < 0) return $this->response($check_res);
|
||
$register = new RegisterModel();
|
||
$exist = $register->mobileExist($this->params['mobile'], $this->site_id);
|
||
if ($exist) {
|
||
return $this->response($this->error("", "手机号已存在"));
|
||
} else {
|
||
$key = $this->params['key'];
|
||
$verify_data = Cache::get($key);
|
||
if ($verify_data["mobile"] == $this->params["mobile"] && $verify_data["code"] == $this->params["code"]) {
|
||
$mobile = isset($this->params['mobile']) ? $this->params['mobile'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['mobile' => $mobile], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
} else {
|
||
$res = $this->error("", "验证码不正确");
|
||
}
|
||
return $this->response($res);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 修改密码
|
||
* @return string
|
||
*/
|
||
public function modifypassword()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
$old_password = isset($this->params['old_password']) ? $this->params['old_password'] : '';
|
||
$new_password = isset($this->params['new_password']) ? $this->params['new_password'] : '';
|
||
$member_model = new MemberModel();
|
||
$info = $member_model->getMemberInfo([['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]], 'password');
|
||
// 未设置密码时设置密码需验证身份
|
||
if (empty($info['data']['password'])) {
|
||
$key = $this->params['key'] ?? '';
|
||
$code = $this->params['code'] ?? '';
|
||
$verify_data = Cache::get($key);
|
||
if (empty($verify_data) || $verify_data["code"] != $code) {
|
||
return $this->response($this->error("", "手机验证码不正确"));
|
||
}
|
||
}
|
||
$res = $member_model->modifyMemberPassword($token['data']['member_id'], $old_password, $new_password);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 绑定短信验证码
|
||
*/
|
||
public function bindmobliecode()
|
||
{
|
||
// 校验验证码
|
||
$captcha = new Captcha();
|
||
$check_res = $captcha->checkCaptcha(false);
|
||
if ($check_res['code'] < 0) return $this->response($check_res);
|
||
|
||
$mobile = $this->params['mobile'];//注册手机号
|
||
$register = new RegisterModel();
|
||
$exist = $register->mobileExist($mobile, $this->site_id);
|
||
if ($exist) {
|
||
return $this->response($this->error("", "当前手机号已存在"));
|
||
} else {
|
||
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
|
||
$message_model = new Message();
|
||
$res = $message_model->sendMessage(["mobile" => $mobile, "site_id" => $this->site_id, "code" => $code, "support_type" => ["sms"], "keywords" => "MEMBER_BIND"]);
|
||
if ($res["code"] >= 0) {
|
||
//将验证码存入缓存
|
||
$key = 'bind_mobile_code_' . md5(uniqid(null, true));
|
||
Cache::tag("bind_mobile_code")->set($key, ['mobile' => $mobile, 'code' => $code], 600);
|
||
return $this->response($this->success(["key" => $key]));
|
||
} else {
|
||
return $this->response($res);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 设置密码时获取验证码
|
||
*/
|
||
public function pwdmobliecode()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
// 校验验证码
|
||
$captcha = new Captcha();
|
||
$check_res = $captcha->checkCaptcha(false);
|
||
if ($check_res['code'] < 0) return $this->response($check_res);
|
||
|
||
$member_model = new MemberModel();
|
||
$info = $member_model->getMemberInfo([['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]], 'mobile');
|
||
if (empty($info['data'])) return $this->response($this->error([], '未获取到会员信息!'));
|
||
if (empty($info['data']['mobile'])) return $this->response($this->error([], '会员信息尚未绑定手机号!'));
|
||
|
||
$mobile = $info['data']['mobile'];
|
||
|
||
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
|
||
$message_model = new Message();
|
||
$res = $message_model->sendMessage(["mobile" => $mobile, "site_id" => $this->site_id, "code" => $code, "support_type" => ["sms"], "keywords" => "SET_PASSWORD"]);
|
||
if (isset($res["code"]) && $res["code"] >= 0) {
|
||
//将验证码存入缓存
|
||
$key = 'password_mobile_code_' . md5(uniqid(null, true));
|
||
Cache::tag("password_mobile_code_")->set($key, ['mobile' => $mobile, 'code' => $code], 600);
|
||
return $this->response($this->success(["key" => $key, 'code' => $code]));
|
||
} else {
|
||
return $this->response($this->error('', '发送失败'));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 验证手机号
|
||
* @return string
|
||
*/
|
||
public function checkmobile()
|
||
{
|
||
$mobile = isset($this->params['mobile']) ? $this->params['mobile'] : '';
|
||
if (empty($mobile)) {
|
||
return $this->response($this->error('', 'REQUEST_MOBILE'));
|
||
}
|
||
$member_model = new MemberModel();
|
||
$condition = [
|
||
['mobile', '=', $mobile],
|
||
['site_id', '=', $this->site_id]
|
||
];
|
||
$res = $member_model->getMemberCount($condition);
|
||
if ($res['data'] > 0) {
|
||
return $this->response($this->error('', '当前手机号已存在'));
|
||
}
|
||
return $this->response($this->success());
|
||
}
|
||
|
||
/**
|
||
* 修改支付密码
|
||
* @return string
|
||
*/
|
||
public function modifypaypassword()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$key = $this->params['key'] ?? '';
|
||
$code = $this->params['code'] ?? '';
|
||
$password = isset($this->params['password']) ? trim($this->params['password']) : '';
|
||
if (empty($password)) return $this->response($this->error('', '支付密码不可为空'));
|
||
|
||
$verify_data = Cache::get($key);
|
||
if ($verify_data["code"] == $this->params["code"]) {
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->modifyMemberPayPassword($token['data']['member_id'], $password);
|
||
} else {
|
||
$res = $this->error("", "验证码不正确");
|
||
}
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 检测会员是否设置支付密码
|
||
*/
|
||
public function issetpayaassword()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->memberIsSetPayPassword($this->member_id);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 检测支付密码是否正确
|
||
*/
|
||
public function checkpaypassword()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$password = isset($this->params['pay_password']) ? trim($this->params['pay_password']) : '';
|
||
if (empty($password)) return $this->response($this->error('', '支付密码不可为空'));
|
||
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->checkPayPassword($this->member_id, $password);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
*
|
||
* 修改支付密码发送手机验证码
|
||
*/
|
||
public function paypwdcode()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
|
||
$message_model = new Message();
|
||
$res = $message_model->sendMessage(["member_id" => $this->member_id, "site_id" => $this->site_id, "code" => $code, "support_type" => ["sms"], "keywords" => "MEMBER_PAY_PASSWORD"]);
|
||
if ($res["code"] >= 0) {
|
||
//将验证码存入缓存
|
||
$key = 'pay_password_code_' . md5(uniqid(null, true));
|
||
Cache::tag("pay_password_code")->set($key, ['member_id' => $this->member_id, 'code' => $code], 600);
|
||
return $this->response($this->success(["key" => $key]));
|
||
} else {
|
||
return $this->response($res);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 验证修改支付密码动态码
|
||
*/
|
||
public function verifypaypwdcode()
|
||
{
|
||
$key = isset($this->params['key']) ? trim($this->params['key']) : '';
|
||
|
||
$verify_data = Cache::get($key);
|
||
if ($verify_data["code"] == $this->params["code"]) {
|
||
$res = $this->success([]);
|
||
} else {
|
||
$res = $this->error("", "验证码不正确");
|
||
}
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 通过token得到会员id
|
||
*/
|
||
public function id()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
return $this->response($this->success($this->member_id));
|
||
}
|
||
|
||
/**
|
||
* 账户奖励规则说明
|
||
* @return false|string
|
||
*/
|
||
public function accountrule()
|
||
{
|
||
//积分
|
||
$point = event('MemberAccountRule', ['account' => 'point', 'site_id' => $this->site_id]);
|
||
|
||
//消费券
|
||
$balance = event('MemberAccountRule', ['account' => 'balance', 'site_id' => $this->site_id]);
|
||
|
||
//成长值
|
||
$growth = event('MemberAccountRule', ['account' => 'growth', 'site_id' => $this->site_id]);
|
||
|
||
$res = [
|
||
'point' => $point,
|
||
'balance' => $balance,
|
||
'growth' => $growth
|
||
];
|
||
|
||
return $this->response($this->success($res));
|
||
}
|
||
|
||
/**
|
||
* 拉取会员头像
|
||
*/
|
||
public function pullheadimg()
|
||
{
|
||
$member_id = input('member_id', '');
|
||
$member = new MemberModel();
|
||
$member->pullHeadimg($member_id);
|
||
}
|
||
|
||
/**
|
||
* 修改真实姓名
|
||
*/
|
||
public function modifyrealname()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$realname = isset($this->params['realname']) ? $this->params['realname'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['realname' => $realname], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 修改性别
|
||
*/
|
||
public function modifysex()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$sex = isset($this->params['sex']) ? $this->params['sex'] : 0;
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['sex' => $sex], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 修改生日
|
||
*/
|
||
public function modifybirthday()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
|
||
$birthday = isset($this->params['birthday']) ? $this->params['birthday'] : '';
|
||
$member_model = new MemberModel();
|
||
$res = $member_model->editMember(['birthday' => $birthday], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
|
||
return $this->response($res);
|
||
}
|
||
|
||
|
||
/**
|
||
* 生成会员二维码
|
||
*/
|
||
public function membereqrcode()
|
||
{
|
||
$token = $this->checkToken();
|
||
if ($token['code'] < 0) return $this->response($token);
|
||
$member_id = $token['data']['member_id'];
|
||
$number = date_to_time(date('Y-m-d H:i')).rand(10000000,99999999);
|
||
|
||
// 二维码
|
||
$qrcode_dir = 'upload/qrcode/qrcodereduceaccount';
|
||
if (!is_dir($qrcode_dir) && !mkdir($qrcode_dir, intval('0755', 8), true)) {
|
||
return $this->error('', '会员码生成失败');
|
||
}
|
||
$qrcode_name = 'memberqrcode_' . $member_id . '_' . $this->site_id;
|
||
$filename = $qrcode_dir . '/' . $qrcode_name . '_' . $this->params['app_type'] . '.png';
|
||
QRcodeExtend::png($number, $filename, 'L', 4, 1);
|
||
$res = $this->success(['path' => $filename]);
|
||
|
||
Cache::tag('member_qrcode')->set($number,['member_id'=>$member_id,'is_user'=>0],'60');
|
||
// 条形码
|
||
Cache::tag('memberqrcode')->set($number,['member_id'=>$member_id,'is_user'=>0],'60');
|
||
$bar_code = getBarcode($number);
|
||
$res['bar_code'] = $bar_code;
|
||
// 动态码
|
||
$dynamic_number = NoRand(0,9,4);
|
||
Cache::tag('dynamic_number')->set($dynamic_number,['member_id'=>$member_id,'is_user'=>0],'60');
|
||
$res['dynamic_number'] = $dynamic_number;
|
||
return $this->response($res);
|
||
}
|
||
|
||
/**
|
||
* 会员二维码扣款
|
||
*/
|
||
public function qrcodereduceaccount()
|
||
{
|
||
$member_data = Cache::get($this->params['number']);
|
||
$member_id = $member_data['member_id'];
|
||
if(empty($member_id)){
|
||
return $this->response($this->error([], "参数已过期!"));
|
||
}
|
||
$member_model = new \addon\member\model\Member();
|
||
$member_data = $member_model->getMemberInfo([['member_id','=',$member_id],['site_id','=',$this->site_id]]);
|
||
$balance_money = $member_data['data']['balance_money']; //可提现余额
|
||
$balance = $member_data['data']['balance']; //不可提现余额
|
||
$member_account_model = new MemberAccount();
|
||
$surplus_banance = $this->params['money']; //支付金额
|
||
//优先扣除不可提现余额
|
||
if ($balance > 0) {
|
||
if ($balance >= $surplus_banance) {
|
||
$real_balance = $surplus_banance;
|
||
} else {
|
||
$real_balance = $balance;
|
||
}
|
||
$result = $member_account_model->addMemberAccount($this->site_id,$member_id, "balance", -$real_balance, 'membercode', 0, "会员码支付,扣除不可提现余额:" . $real_balance);
|
||
$surplus_banance -= $real_balance;
|
||
}
|
||
if ($surplus_banance > 0) {
|
||
$result = $member_account_model->addMemberAccount($this->site_id, $member_id, "balance_money", -$surplus_banance,'membercode', 0, "会员码支付,扣除可提现余额:" . $surplus_banance);
|
||
}
|
||
Cache::tag('memberqrcode')->clear();
|
||
Cache::tag('dynamic_number')->clear();
|
||
return $this->response($result);
|
||
}
|
||
|
||
/**
|
||
* 获取推荐码
|
||
* @return false|string
|
||
*/
|
||
public function RecommendationCode(){
|
||
// 参数获取
|
||
$memberId = input('source_member');
|
||
$rcode = Db::name('member')->cache('source_member'.$memberId,null,'source_member_json')->where('member_id',$memberId)->value('rcode');
|
||
return $this->response($this->success($rcode));
|
||
}
|
||
} |