admin/addon/member/api/controller/Member.php

483 lines
19 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\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));
}
}