Files
littleTiger/application/mobile/controller/User.php
2019-02-28 19:48:21 +08:00

1665 lines
64 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
/**
* tpshop
* ============================================================================
* * 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* 采用最新Thinkphp5助手函数特性实现单字母函数M D U等简写方式
* ============================================================================
* 2015-11-21
*/
namespace app\mobile\controller;
use app\common\logic\CartLogic;
use app\common\logic\Message;
use app\common\logic\UsersLogic;
use app\common\logic\OrderLogic;
use app\common\model\MenuCfg;
use app\common\model\UserAddress;
use app\common\model\Users as UserModel;
use app\common\model\UserMessage;
use app\common\util\TpshopException;
use think\Cache;
use think\Page;
use think\Verify;
use think\Loader;
use think\db;
use think\Image;
class User extends MobileBase
{
public $user_id = 0;
public $user = array();
/*
* 初始化操作
*/
public function _initialize()
{
parent::_initialize();
if (session('?user')) {
$User = new UserModel();
$session_user = session('user');
$this->user = $User->where('user_id', $session_user['user_id'])->find();
if(!empty($this->user->auth_users)){
$session_user = array_merge($this->user->toArray(), $this->user->auth_users[0]);
session('user', $session_user); //覆盖session 中的 user
}
$this->user_id = $this->user['user_id'];
$this->assign('user', $this->user); //存储用户信息0
}
$nologin = array(
'login', 'pop_login', 'do_login', 'logout', 'verify', 'set_pwd', 'finished',
'verifyHandle', 'reg', 'send_sms_reg_code', 'find_pwd', 'check_validate_code',
'forget_pwd', 'check_captcha', 'check_username', 'send_validate_code', 'express' , 'bind_guide', 'bind_account','bind_reg'
);
$is_bind_account = tpCache('basic.is_bind_account');
if (!$this->user_id && !in_array(ACTION_NAME, $nologin)) {
if(strstr($_SERVER['HTTP_USER_AGENT'],'MicroMessenger') && $is_bind_account){
header("location:" . U('Mobile/User/bind_guide'));//微信浏览器, 调到绑定账号引导页面
}else{
header("location:" . U('Mobile/User/login'));
}
exit;
}
$order_status_coment = array(
'WAITPAY' => '待付款 ', //订单查询状态 待支付
'WAITSEND' => '待发货', //订单查询状态 待发货
'WAITRECEIVE' => '待收货', //订单查询状态 待收货
'WAITCCOMMENT' => '待评价', //订单查询状态 待评价
);
$this->assign('order_status_coment', $order_status_coment);
}
public function index()
{
$MenuCfg = new MenuCfg();
$menu_list = $MenuCfg->where('is_show', 1)->order('menu_id asc')->select();
$this->assign('menu_list', $menu_list);
return $this->fetch();
}
public function logout()
{
session_unset();
session_destroy();
setcookie('uname','',time()-3600,'/');
setcookie('cn','',time()-3600,'/');
setcookie('user_id','',time()-3600,'/');
setcookie('PHPSESSID','',time()-3600,'/');
//$this->success("退出成功",U('Mobile/Index/index'));
header("Location:" . U('Mobile/Index/index'));
exit();
}
/*
* 账户资金
*/
public function account()
{
$user = session('user');
//获取账户资金记录
$logic = new UsersLogic();
$data = $logic->get_account_log($this->user_id, I('get.type'));
$account_log = $data['result'];
$this->assign('user', $user);
$this->assign('account_log', $account_log);
$this->assign('page', $data['show']);
if ($_GET['is_ajax']) {
return $this->fetch('ajax_account_list');
exit;
}
return $this->fetch();
}
public function account_list()
{
$type = I('type','all');
$usersLogic = new UsersLogic;
$result = $usersLogic->account($this->user_id, $type);
$this->assign('type', $type);
$this->assign('account_log', $result['account_log']);
if ($_GET['is_ajax']) {
return $this->fetch('ajax_account_list');
}
return $this->fetch();
}
public function account_detail(){
$log_id = I('log_id/d',0);
$detail = Db::name('account_log')->where(['log_id'=>$log_id])->find();
$this->assign('detail',$detail);
return $this->fetch();
}
/**
* 优惠券
*/
public function coupon()
{
$logic = new UsersLogic();
$data = $logic->get_coupon($this->user_id, input('type'));
foreach($data['result'] as $k =>$v){
$user_type = $v['use_type'];
$data['result'][$k]['use_scope'] = C('COUPON_USER_TYPE')["$user_type"];
if($user_type==1){ //指定商品
$data['result'][$k]['goods_id'] = M('goods_coupon')->field('goods_id')->where(['coupon_id'=>$v['cid']])->getField('goods_id');
}
if($user_type==2){ //指定分类
$data['result'][$k]['category_id'] = Db::name('goods_coupon')->where(['coupon_id'=>$v['cid']])->getField('goods_category_id');
}
}
$coupon_list = $data['result'];
$this->assign('coupon_list', $coupon_list);
$this->assign('page', $data['show']);
if (input('is_ajax')) {
return $this->fetch('ajax_coupon_list');
exit;
}
return $this->fetch();
}
/**
* 登录
*/
public function login()
{
if ($this->user_id > 0) {
// header("Location: " . U('Mobile/User/index'));
$this->redirect('Mobile/User/index');
}
$referurl = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : U("Mobile/User/index");
$this->assign('referurl', $referurl);
// 新版支付宝跳转链接
$this->assign('alipay_url', urlencode(SITE_URL.U("Mobile/LoginApi/login",['oauth'=>'alipaynew'])));
return $this->fetch();
}
/**
* 登录
*/
public function do_login()
{
$username = trim(I('post.username'));
$password = trim(I('post.password'));
//验证码验证
if (isset($_POST['verify_code'])) {
$verify_code = I('post.verify_code');
$verify = new Verify();
if (!$verify->check($verify_code, 'user_login')) {
$res = array('status' => 0, 'msg' => '验证码错误');
exit(json_encode($res));
}
}
$logic = new UsersLogic();
$res = $logic->login($username, $password);
if ($res['status'] == 1) {
$res['url'] = htmlspecialchars_decode(I('post.referurl'));
session('user', $res['result']);
setcookie('user_id', $res['result']['user_id'], null, '/');
setcookie('is_distribut', $res['result']['is_distribut'], null, '/');
$nickname = empty($res['result']['nickname']) ? $username : $res['result']['nickname'];
setcookie('uname', urlencode($nickname), null, '/');
setcookie('cn', 0, time() - 3600, '/');
$cartLogic = new CartLogic();
$cartLogic->setUserId($res['result']['user_id']);
$cartLogic->doUserLoginHandle();// 用户登录后 需要对购物车 一些操作
$orderLogic = new OrderLogic();
$orderLogic->setUserId($res['result']['user_id']);//登录后将超时未支付订单给取消掉
$orderLogic->abolishOrder();
}
exit(json_encode($res));
}
/**
* 注册
*/
public function reg()
{
if($this->user_id > 0) {
$this->redirect(U('Mobile/User/index'));
}
$reg_sms_enable = tpCache('sms.regis_sms_enable');
$reg_smtp_enable = tpCache('sms.regis_smtp_enable');
if (IS_POST) {
$logic = new UsersLogic();
//验证码检验
//$this->verifyHandle('user_reg');
$nickname = I('post.nickname', '');
$username = I('post.username', '');
$password = I('post.password', '');
$password2 = I('post.password2', '');
$is_bind_account = tpCache('basic.is_bind_account');
//是否开启注册验证码机制
$code = I('post.mobile_code', '');
$scene = I('post.scene', 1);
$session_id = session_id();
//是否开启注册验证码机制
if(check_mobile($username)){
if($reg_sms_enable){
//手机功能没关闭
$check_code = $logic->check_validate_code($code, $username, 'phone', $session_id, $scene);
if($check_code['status'] != 1){
$this->ajaxReturn($check_code);
}
}
}
//是否开启注册邮箱验证码机制
if(check_email($username)){
if($reg_smtp_enable){
//邮件功能未关闭
$check_code = $logic->check_validate_code($code, $username);
if($check_code['status'] != 1){
$this->ajaxReturn($check_code);
}
}
}
$invite = I('invite');
if(!empty($invite)){
$invite = get_user_info($invite,2);//根据手机号查找邀请人
if(empty($invite)){
$this->ajaxReturn(['status'=>-1,'msg'=>'推荐人不存在','result'=>'']);
}
}else{
$invite = array();
}
if($is_bind_account && session("third_oauth")){ //绑定第三方账号
$thirdUser = session("third_oauth");
$head_pic = $thirdUser['head_pic'];
$data = $logic->reg($username, $password, $password2, 0, $invite ,$nickname , $head_pic);
//用户注册成功后, 绑定第三方账号
$userLogic = new UsersLogic();
$data = $userLogic->oauth_bind_new($data['result']);
}else{
$data = $logic->reg($username, $password, $password2,0,$invite);
}
if ($data['status'] != 1) $this->ajaxReturn($data);
//获取公众号openid,并保持到session的user中
$oauth_users = M('OauthUsers')->where(['user_id'=>$data['result']['user_id'] , 'oauth'=>'weixin' , 'oauth_child'=>'mp'])->find();
$oauth_users && $data['result']['open_id'] = $oauth_users['open_id'];
session('user', $data['result']);
setcookie('user_id', $data['result']['user_id'], null, '/');
setcookie('is_distribut', $data['result']['is_distribut'], null, '/');
$cartLogic = new CartLogic();
$cartLogic->setUserId($data['result']['user_id']);
$cartLogic->doUserLoginHandle();// 用户登录后 需要对购物车 一些操作
$this->ajaxReturn($data);
exit;
}
$this->assign('regis_sms_enable',$reg_sms_enable); // 注册启用短信:
$this->assign('regis_smtp_enable',$reg_smtp_enable); // 注册启用邮箱:
$sms_time_out = tpCache('sms.sms_time_out')>0 ? tpCache('sms.sms_time_out') : 120;
$this->assign('sms_time_out', $sms_time_out); // 手机短信超时时间
return $this->fetch();
}
public function bind_guide(){
$data = session('third_oauth');
//没有第三方登录的话就跳到登录页
if(empty($data)){
$this->redirect('User/login');
}
$first_leader = Cache::get($data['openid']);
if($first_leader){
//拿关注传时候过来来的上级id
setcookie('first_leader',$first_leader);
}
$this->assign("nickname", $data['nickname']);
$this->assign("oauth", $data['oauth']);
$this->assign("head_pic", $data['head_pic']);
$this->assign('store_name',tpCache('shop_info.store_name'));
return $this->fetch();
}
/**
* 绑定已有账号
* @return \think\mixed
*/
public function bind_account()
{
$mobile = input('mobile/s');
$verify_code = input('verify_code/s');
//发送短信验证码
$logic = new UsersLogic();
$check_code = $logic->check_validate_code($verify_code, $mobile, 'phone', session_id(), 1);
if($check_code['status'] != 1){
$this->ajaxReturn(['status'=>0,'msg'=>$check_code['msg'],'result'=>'']);
}
if(empty($mobile) || !check_mobile($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '手机格式错误']);
}
$users = Db::name('users')->where('mobile',$mobile)->find();
if (empty($users)) {
$this->ajaxReturn(['status' => 0, 'msg' => '账号不存在']);
}
$user = new \app\common\logic\User();
$user->setUserById($users['user_id']);
$cartLogic = new CartLogic();
try{
$user->checkOauthBind();
$user->oauthBind();
$user->doLeader();
$user->refreshCookie();
$cartLogic->setUserId($users['user_id']);
$cartLogic->doUserLoginHandle();
$orderLogic = new OrderLogic();//登录后将超时未支付订单给取消掉
$orderLogic->setUserId($users['user_id']);
$orderLogic->abolishOrder();
$this->ajaxReturn(['status' => 1, 'msg' => '绑定成功']);
}catch (TpshopException $t){
$error = $t->getErrorArr();
$this->ajaxReturn($error);
}
}
/**
* 先注册再绑定账号
* @return \think\mixed
*/
public function bind_reg()
{
$mobile = input('mobile/s');
$verify_code = input('verify_code/s');
$password = input('password/s');
$nickname = input('nickname/s', '');
if(empty($mobile) || !check_mobile($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '手机格式错误']);
}
if(empty($password)){
$this->ajaxReturn(['status' => 0, 'msg' => '请输入密码']);
}
$logic = new UsersLogic();
$check_code = $logic->check_validate_code($verify_code, $mobile, 'phone', session_id(), 1);
if($check_code['status'] != 1){
$this->ajaxReturn(['status'=>0,'msg'=>$check_code['msg'],'result'=>'']);
}
$thirdUser = session('third_oauth');
$data = $logic->reg($mobile, $password, $password, 0, [], $nickname, $thirdUser['head_pic']);
if ($data['status'] != 1) {
$this->ajaxReturn(['status'=>0,'msg'=>$data['msg'],'result'=>'']);
}
$user = new \app\common\logic\User();
$user->setUserById($data['result']['user_id']);
try{
$user->checkOauthBind();
$user->oauthBind();
$user->refreshCookie();
$this->ajaxReturn(['status' => 1, 'msg' => '绑定成功']);
}catch (TpshopException $t){
$error = $t->getErrorArr();
$this->ajaxReturn($error);
}
}
public function ajaxAddressList()
{
$UserAddress = new UserAddress();
$address_list = $UserAddress->where('user_id', $this->user_id)->order('is_default desc')->select();
if($address_list){
$address_list = collection($address_list)->append(['address_area'])->toArray();
}else{
$address_list = [];
}
$this->ajaxReturn($address_list);
}
/**
* 用户地址列表
*/
public function address_list()
{
$address_lists = db('user_address')->where('user_id', $this->user_id)->select();
$region_list = db('region')->cache(true)->getField('id,name');
$this->assign('region_list', $region_list);
$this->assign('lists', $address_lists);
return $this->fetch();
}
/**
* 保存地址
*/
public function addressSave()
{
$address_id = input('address_id/d',0);
$data = input('post.');
$userAddressValidate = Loader::validate('UserAddress');
if (!$userAddressValidate->batch()->check($data)) {
$this->ajaxReturn(['status' => 0, 'msg' => '操作失败', 'result' => $userAddressValidate->getError()]);
}
if (!empty($address_id)) {
//编辑
$userAddress = UserAddress::get(['address_id'=>$address_id,'user_id'=> $this->user_id]);
if(empty($userAddress)){
$this->ajaxReturn(['status' => 0, 'msg' => '参数错误']);
}
} else {
//新增
$userAddress = new UserAddress();
$user_address_count = Db::name('user_address')->where("user_id", $this->user_id)->count();
if ($user_address_count >= 20) {
$this->ajaxReturn(['status' => 0, 'msg' => '最多只能添加20个收货地址']);
}
$data['user_id'] = $this->user_id;
}
$userAddress->data($data);
$userAddress['longitude'] = true;
$userAddress['latitude'] = true;
$row = $userAddress->save();
if ($row !== false) {
$this->ajaxReturn(['status' => 1, 'msg' => '操作成功', 'result'=>['address_id'=>$userAddress->address_id]]);
} else {
$this->ajaxReturn(['status' => 0, 'msg' => '操作失败']);
}
}
/*
* 添加地址
*/
public function add_address()
{
$source = input('source');
if (IS_POST) {
$post_data = input('post.');
$logic = new UsersLogic();
$data = $logic->add_address($this->user_id, 0, $post_data);
if ($data['status'] != 1){
$this->ajaxReturn($data);
} else {
$data['url']= U('/Mobile/User/address_list');
$this->ajaxReturn($data);
}
}
$p = M('region')->where(array('parent_id' => 0, 'level' => 1))->select();
$this->assign('province', $p);
$this->assign('source', $source);
return $this->fetch();
}
/*
* 地址编辑
*/
public function edit_address()
{
$id = I('id/d');
$address = M('user_address')->where(array('address_id' => $id, 'user_id' => $this->user_id))->find();
if (IS_POST) {
$post_data = input('post.');
$source = $post_data['source'];
$logic = new UsersLogic();
$data = $logic->add_address($this->user_id, $id, $post_data);
if ($source == 'cart2') {
$data['url']=U('/Mobile/Cart/cart2', array('address_id' => $data['result'],'goods_id'=>$post_data['goods_id'],'goods_num'=>$post_data['goods_num'],'item_id'=>$post_data['item_id'],'action'=>$post_data['action']));
$this->ajaxReturn($data);
} elseif ($source == 'integral') {
$data['url'] = U('/Mobile/Cart/integral', array('address_id' => $data['result'],'goods_id'=>$post_data['goods_id'],'goods_num'=>$post_data['goods_num'],'item_id'=>$post_data['item_id']));
$this->ajaxReturn($data);
} elseif($source == 'pre_sell_cart'){
$data['url'] = U('/Mobile/Cart/pre_sell_cart', array('address_id' => $data['result'],'act_id'=>$post_data['act_id'],'goods_num'=>$post_data['goods_num']));
$this->ajaxReturn($data);
} elseif($source == 'team'){
$data['url']= U('/Mobile/Team/order', array('address_id' => $data['result'],'order_id'=>$post_data['order_id']));
$this->ajaxReturn($data);
} elseif ($_POST['source'] == 'pre_sell') {
$prom_id = input('prom_id/d');
$data['url'] = U('/Mobile/Cart/pre_sell', array('address_id' => $data['result'],'goods_num' => $goods_num,'prom_id' => $prom_id));
$this->ajaxReturn($data);
} else {
$data['url']= U('/Mobile/User/address_list');
$this->ajaxReturn($data);
}
}
//获取省份
$p = M('region')->where(array('parent_id' => 0, 'level' => 1))->select();
$c = M('region')->where(array('parent_id' => $address['province'], 'level' => 2))->select();
$d = M('region')->where(array('parent_id' => $address['city'], 'level' => 3))->select();
if ($address['twon']) {
$e = M('region')->where(array('parent_id' => $address['district'], 'level' => 4))->select();
$this->assign('twon', $e);
}
$this->assign('province', $p);
$this->assign('city', $c);
$this->assign('district', $d);
$this->assign('address', $address);
return $this->fetch();
}
/*
* 设置默认收货地址
*/
public function set_default()
{
$id = I('get.id/d');
$source = I('get.source');
M('user_address')->where(array('user_id' => $this->user_id))->save(array('is_default' => 0));
$row = M('user_address')->where(array('user_id' => $this->user_id, 'address_id' => $id))->save(array('is_default' => 1));
if ($source == 'cart2') {
header("Location:" . U('Mobile/Cart/cart2'));
exit;
} else {
header("Location:" . U('Mobile/User/address_list'));
}
}
/*
* 地址删除
*/
public function del_address()
{
$id = I('get.id/d');
$address = M('user_address')->where("address_id", $id)->find();
$row = M('user_address')->where(array('user_id' => $this->user_id, 'address_id' => $id))->delete();
// 如果删除的是默认收货地址 则要把第一个地址设置为默认收货地址
if ($address['is_default'] == 1) {
$address2 = M('user_address')->where("user_id", $this->user_id)->find();
$address2 && M('user_address')->where("address_id", $address2['address_id'])->save(array('is_default' => 1));
}
if (!$row)
$this->error('操作失败', U('User/address_list'));
else
$this->success("操作成功", U('User/address_list'));
}
/*
* 个人信息
*/
public function userinfo()
{
$userLogic = new UsersLogic();
$user_info = $userLogic->get_info($this->user_id); // 获取用户信息
$user_info = $user_info['result'];
if (IS_POST) {
if ($_FILES['head_pic']['tmp_name']) {
$file = $this->request->file('head_pic');
$image_upload_limit_size = config('image_upload_limit_size');
$validate = ['size'=>$image_upload_limit_size,'ext'=>'jpg,png,gif,jpeg'];
$dir = UPLOAD_PATH.'head_pic/';
if (!($_exists = file_exists($dir))){
$isMk = mkdir($dir);
}
$parentDir = date('Ymd');
$info = $file->validate($validate)->move($dir, true);
if($info){
$post['head_pic'] = '/'.$dir.$parentDir.'/'.$info->getFilename();
}else{
$this->error($file->getError());//上传错误提示错误信息
}
}
I('post.nickname') ? $post['nickname'] = I('post.nickname') : false; //昵称
I('post.qq') ? $post['qq'] = I('post.qq') : false; //QQ号码
I('post.head_pic') ? $post['head_pic'] = I('post.head_pic') : false; //头像地址
I('post.sex') ? $post['sex'] = I('post.sex') : $post['sex'] = 0; // 性别
I('post.birthday') ? $post['birthday'] = strtotime(I('post.birthday')) : false; // 生日
I('post.province') ? $post['province'] = I('post.province') : false; //省份
I('post.city') ? $post['city'] = I('post.city') : false; // 城市
I('post.district') ? $post['district'] = I('post.district') : false; //地区
I('post.email') ? $post['email'] = I('post.email') : false; //邮箱
I('post.mobile') ? $post['mobile'] = I('post.mobile') : false; //手机
$email = I('post.email');
$mobile = I('post.mobile');
$code = I('post.mobile_code', '');
$scene = I('post.scene', 6);
if (!empty($email)) {
$c = M('users')->where(['email' => input('post.email'), 'user_id' => ['<>', $this->user_id]])->count();
$c && $this->error("邮箱已被使用");
}
if (!empty($mobile)) {
$c = M('users')->where(['mobile' => input('post.mobile'), 'user_id' => ['<>', $this->user_id]])->count();
$c && $this->error("手机已被使用");
if (!$code)
$this->error('请输入验证码');
$check_code = $userLogic->check_validate_code($code, $mobile, 'phone', $this->session_id, $scene);
if ($check_code['status'] != 1)
$this->error($check_code['msg']);
}
if (!$userLogic->update_info($this->user_id, $post))
$this->error("保存失败");
setcookie('uname',urlencode($post['nickname']),null,'/');
$this->success("操作成功",U('User/userinfo'));
exit;
}
// 获取省份
$province = M('region')->where(array('parent_id' => 0, 'level' => 1))->select();
// 获取订单城市
$city = M('region')->where(array('parent_id' => $user_info['province'], 'level' => 2))->select();
// 获取订单地区
$area = M('region')->where(array('parent_id' => $user_info['city'], 'level' => 3))->select();
$this->assign('province', $province);
$this->assign('city', $city);
$this->assign('area', $area);
$this->assign('user', $user_info);
$this->assign('sex', C('SEX'));
//从哪个修改用户信息页面进来,
$dispaly = I('action');
if ($dispaly != '') {
return $this->fetch("$dispaly");
}
return $this->fetch();
}
/**
* 修改绑定手机
* @return mixed
*/
public function setMobile(){
$userLogic = new UsersLogic();
if (IS_POST) {
$mobile = input('mobile');
$mobile_code = input('mobile_code');
$scene = input('post.scene', 6);
$validate = I('validate',0);
$status = I('status',0);
$c = Db::name('users')->where(['mobile' => $mobile, 'user_id' => ['<>', $this->user_id]])->count();
$c && $this->error('手机已被使用');
if (!$mobile_code)
$this->error('请输入验证码');
$check_code = $userLogic->check_validate_code($mobile_code, $mobile, 'phone', $this->session_id, $scene);
if($check_code['status'] !=1){
$this->error($check_code['msg']);
}
if($validate == 1 && $status == 0){
$res = Db::name('users')->where(['user_id' => $this->user_id])->update(['mobile'=>$mobile,'mobile_validated'=>1]);
if($res!==false){
$source = I('source');
!empty($source) && $this->success('绑定成功', U("User/$source"));
$this->success('修改成功',U('User/userinfo'));
}
$this->error('修改失败');
}
}
$this->assign('status',$status);
return $this->fetch();
}
/*
* 邮箱验证
*/
public function email_validate()
{
$userLogic = new UsersLogic();
$user_info = $userLogic->get_info($this->user_id); // 获取用户信息
$user_info = $user_info['result'];
$step = I('get.step', 1);
//验证是否未绑定过
if ($user_info['email_validated'] == 0)
$step = 2;
//原邮箱验证是否通过
if ($user_info['email_validated'] == 1 && session('email_step1') == 1)
$step = 2;
if ($user_info['email_validated'] == 1 && session('email_step1') != 1)
$step = 1;
if (IS_POST) {
$email = I('post.email');
$code = I('post.code');
$info = session('email_code');
if (!$info)
$this->error('非法操作');
if ($info['email'] == $email || $info['code'] == $code) {
if ($user_info['email_validated'] == 0 || session('email_step1') == 1) {
session('email_code', null);
session('email_step1', null);
if (!$userLogic->update_email_mobile($email, $this->user_id))
$this->error('邮箱已存在');
$this->success('绑定成功', U('Home/User/index'));
} else {
session('email_code', null);
session('email_step1', 1);
redirect(U('Home/User/email_validate', array('step' => 2)));
}
exit;
}
$this->error('验证码邮箱不匹配');
}
$this->assign('step', $step);
return $this->fetch();
}
/*
* 手机验证
*/
public function mobile_validate()
{
$userLogic = new UsersLogic();
$user_info = $userLogic->get_info($this->user_id); // 获取用户信息
$user_info = $user_info['result'];
$step = I('get.step', 1);
//验证是否未绑定过
if ($user_info['mobile_validated'] == 0)
$step = 2;
//原手机验证是否通过
if ($user_info['mobile_validated'] == 1 && session('mobile_step1') == 1)
$step = 2;
if ($user_info['mobile_validated'] == 1 && session('mobile_step1') != 1)
$step = 1;
if (IS_POST) {
$mobile = I('post.mobile');
$code = I('post.code');
$info = session('mobile_code');
if (!$info)
$this->error('非法操作');
if ($info['email'] == $mobile || $info['code'] == $code) {
if ($user_info['email_validated'] == 0 || session('email_step1') == 1) {
session('mobile_code', null);
session('mobile_step1', null);
if (!$userLogic->update_email_mobile($mobile, $this->user_id, 2))
$this->error('手机已存在');
$this->success('绑定成功', U('Home/User/index'));
} else {
session('mobile_code', null);
session('email_step1', 1);
redirect(U('Home/User/mobile_validate', array('step' => 2)));
}
exit;
}
$this->error('验证码手机不匹配');
}
$this->assign('step', $step);
return $this->fetch();
}
/**
* 用户收藏列表
*/
public function collect_list()
{
$userLogic = new UsersLogic();
$data = $userLogic->get_goods_collect($this->user_id);
$this->assign('page', $data['show']);// 赋值分页输出
$this->assign('goods_list', $data['result']);
if (IS_AJAX) { //ajax加载更多
return $this->fetch('ajax_collect_list');
exit;
}
return $this->fetch();
}
/*
*取消收藏
*/
public function cancel_collect()
{
$collect_id = I('collect_id/d');
$user_id = $this->user_id;
if (M('goods_collect')->where(['collect_id' => $collect_id, 'user_id' => $user_id])->delete()) {
$this->success("取消收藏成功", U('User/collect_list'));
} else {
$this->error("取消收藏失败", U('User/collect_list'));
}
}
/**
* 我的留言
*/
public function message_list()
{
C('TOKEN_ON', true);
if (IS_POST) {
if(!$this->verifyHandle('message')){
$this->error('验证码错误', U('User/message_list'));
};
$data = I('post.');
$data['user_id'] = $this->user_id;
$user = session('user');
$data['user_name'] = $user['nickname'];
$data['msg_time'] = time();
if (M('feedback')->add($data)) {
$this->success("留言成功", U('User/message_list'));
exit;
} else {
$this->error('留言失败', U('User/message_list'));
exit;
}
}
$msg_type = array(0 => '留言', 1 => '投诉', 2 => '询问', 3 => '售后', 4 => '求购');
$count = M('feedback')->where("user_id", $this->user_id)->count();
$Page = new Page($count, 100);
$Page->rollPage = 2;
$message = M('feedback')->where("user_id", $this->user_id)->limit($Page->firstRow . ',' . $Page->listRows)->select();
$showpage = $Page->show();
header("Content-type:text/html;charset=utf-8");
$this->assign('page', $showpage);
$this->assign('message', $message);
$this->assign('msg_type', $msg_type);
return $this->fetch();
}
/**账户明细*/
public function points()
{
$type = I('type', 'all'); //获取类型
$this->assign('type', $type);
if ($type == 'recharge') {
//充值明细
$count = M('recharge')->where("user_id", $this->user_id)->count();
$Page = new Page($count, 16);
$account_log = M('recharge')->where("user_id", $this->user_id)->order('order_id desc')->limit($Page->firstRow . ',' . $Page->listRows)->select();
} else if ($type == 'points') {
//积分记录明细
$count = M('account_log')->where(['user_id' => $this->user_id, 'pay_points' => ['<>', 0]])->count();
$Page = new Page($count, 16);
$account_log = M('account_log')->where(['user_id' => $this->user_id, 'pay_points' => ['<>', 0]])->order('log_id desc')->limit($Page->firstRow . ',' . $Page->listRows)->select();
} else {
//全部
$count = M('account_log')->where(['user_id' => $this->user_id])->count();
$Page = new Page($count, 16);
$account_log = M('account_log')->where(['user_id' => $this->user_id])->order('log_id desc')->limit($Page->firstRow . ',' . $Page->listRows)->select();
}
$show = $Page->show();
$this->assign('account_log', $account_log);
$this->assign('page', $show);
$this->assign('listRows', $Page->listRows);
if ($_GET['is_ajax']) {
return $this->fetch('ajax_points');
exit;
}
return $this->fetch();
}
public function points_list()
{
$type = I('type','all');
$usersLogic = new UsersLogic;
$result = $usersLogic->points($this->user_id, $type);
$this->assign('type', $type);
$showpage = $result['page']->show();
$this->assign('account_log', $result['account_log']);
$this->assign('page', $showpage);
if ($_GET['is_ajax']) {
return $this->fetch('ajax_points');
}
return $this->fetch();
}
/*
* 密码修改
*/
public function password()
{
if (IS_POST) {
$logic = new UsersLogic();
$data = $logic->get_info($this->user_id);
$user = $data['result'];
if ($user['mobile'] == '' && $user['email'] == '')
$this->ajaxReturn(['status'=>-1,'msg'=>'请先绑定手机或邮箱','url'=>U('/Mobile/User/index')]);
$userLogic = new UsersLogic();
$data = $userLogic->password($this->user_id, I('post.old_password'), I('post.new_password'), I('post.confirm_password'));
if ($data['status'] == -1)
$this->ajaxReturn(['status'=>-1,'msg'=>$data['msg']]);
$this->ajaxReturn(['status'=>1,'msg'=>$data['msg'],'url'=>U('/Mobile/User/index')]);
exit;
}
return $this->fetch();
}
function forget_pwd()
{
if ($this->user_id > 0) {
$this->redirect("User/index");
}
$username = I('username');
if (IS_POST) {
if (!empty($username)) {
if(!$this->verifyHandle('forget')){
$this->ajaxReturn(['status'=>-1,'msg'=>"验证码错误"]);
};
$field = 'mobile';
if (check_email($username)) {
$field = 'email';
}
$user = M('users')->where("email", $username)->whereOr('mobile', $username)->find();
if ($user) {
$sms_status = checkEnableSendSms(2);
session('find_password', array('user_id' => $user['user_id'], 'username' => $username,
'email' => $user['email'], 'mobile' => $user['mobile'], 'type' => $field,'sms_status'=>$sms_status['status']));
$regis_smtp_enable = $this->tpshop_config['smtp_regis_smtp_enable'];
if(($field=='mobile' && $this->tpshop_config['sms_forget_pwd_sms_enable']==1)){
$this->ajaxReturn(['status'=>1,'msg'=>"用户验证成功",'url'=>U('User/find_pwd')]);
}
if(($field=='email' && $regis_smtp_enable==0) || ($field=='mobile' && $sms_status['status']<1)){
$this->ajaxReturn(['status'=>1,'msg'=>"用户验证成功",'url'=>U('User/set_pwd')]);
}
exit;
} else {
$this->ajaxReturn(['status'=>-1,'msg'=>"用户名不存在,请检查"]);
}
}
}
return $this->fetch();
}
function find_pwd()
{
if ($this->user_id > 0) {
header("Location: " . U('User/index'));
}
$user = session('find_password');
if (empty($user)) {
$this->error("请先验证用户名", U('User/forget_pwd'));
}
$this->assign('user', $user);
return $this->fetch();
}
public function set_pwd()
{
if ($this->user_id > 0) {
$this->redirect('Mobile/User/index');
}
$check = session('validate_code');
$find_password = session('find_password');
$field = $find_password['field'];
$sms_status = session('find_password')['sms_status'];
$regis_smtp_enable = $this->tpshop_config['smtp_regis_smtp_enable'];
$is_check_code=false;
//需要验证邮箱或者手机
if($field=='email' && $regis_smtp_enable==1)$is_check_code = true;
if($field=='mobile' && $sms_status['status']==1)$is_check_code = true;
if ((empty($check) || $check['is_check'] == 0) && $is_check_code) {
$this->error('验证码还未验证通过',U('User/forget_pwd'));
}
if (IS_POST) {
$data['password'] = $password = I('post.password');
$data['password2'] = $password2 = I('post.password2');
$UserRegvalidate = Loader::validate('User');
if(!$UserRegvalidate->scene('set_pwd')->check($data)){
$this->error($UserRegvalidate->getError(),U('User/forget_pwd'));
}
M('users')->where("user_id", $find_password['user_id'])->save(array('password' => encrypt($password)));
session('validate_code', null);
return $this->fetch('reset_pwd_sucess');
}
$is_set = I('is_set', 0);
$this->assign('is_set', $is_set);
return $this->fetch();
}
/**
* 验证码验证
* $id 验证码标示
*/
private function verifyHandle($id)
{
$verify = new Verify();
if (!$verify->check(I('post.verify_code'), $id ? $id : 'user_login')) {
return false;
}
return true;
}
/**
* 验证码获取
*/
public function verify()
{
//验证码类型
$type = I('get.type') ? I('get.type') : 'user_login';
$config = array(
'fontSize' => 30,
'length' => 4,
'imageH' => 60,
'imageW' => 300,
'fontttf' => '5.ttf',
'useCurve' => false,
'useNoise' => false,
);
$Verify = new Verify($config);
$Verify->entry($type);
exit();
}
/**
* 账户管理
*/
public function accountManage()
{
return $this->fetch();
}
public function recharge()
{
$order_id = I('order_id/d');
$paymentList = M('Plugin')->where(['type'=>'payment' ,'code'=>['neq','cod'],'status'=>1,'scene'=> ['in','0,1']])->select();
$paymentList = convert_arr_key($paymentList, 'code');
//微信浏览器
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
unset($paymentList['weixinH5']);
}else{
unset($paymentList['weixin']);
}
foreach ($paymentList as $key => $val) {
$val['config_value'] = unserialize($val['config_value']);
if ($val['config_value']['is_bank'] == 2) {
$bankCodeList[$val['code']] = unserialize($val['bank_code']);
}
}
$bank_img = include APP_PATH . 'home/bank.php'; // 银行对应图片
$this->assign('paymentList', $paymentList);
$this->assign('bank_img', $bank_img);
$this->assign('bankCodeList', $bankCodeList);
// 查找最近一次充值方式
$recharge_arr = Db::name('Recharge')->field('pay_code')->where('user_id', $this->user_id)
->order('order_id desc')->find();
$alipay = 'alipayMobile'; //默认支付宝支付
if($recharge_arr){
foreach ($paymentList as $key=>$item) {
if($key == $recharge_arr['pay_code']){
$alipay = $recharge_arr['pay_code'];
}
}
}
$this->assign('alipay', $alipay);
if ($order_id > 0) {
$order = M('recharge')->where("order_id", $order_id)->find();
$this->assign('order', $order);
}
return $this->fetch();
}
public function recharge_list(){
$usersLogic = new UsersLogic;
$result= $usersLogic->get_recharge_log($this->user_id); //充值记录
$this->assign('page', $result['show']);
$this->assign('lists', $result['result']);
if (I('is_ajax')) {
return $this->fetch('ajax_recharge_list');
}
return $this->fetch();
}
//添加、编辑提现支付宝账号
public function add_card(){
$user_id=$this->user_id;
$data=I('post.');
if($data['type']==0){
$info['cash_alipay']=$data['card'];
$info['realname']=$data['cash_name'];
$info['user_id']=$user_id;
$res=DB::name('user_extend')->where('user_id='.$user_id)->count();
if($res){
$res2=Db::name('user_extend')->where('user_id='.$user_id)->save($info);
}else{
$res2=Db::name('user_extend')->add($info);
}
$this->ajaxReturn(['status'=>1,'msg'=>'操作成功']);
}else{
//防止非支付宝类型的表单提交
$this->ajaxReturn(['status'=>0,'msg'=>'不支持的提现方式']);
}
}
/**
* 申请提现记录
*/
public function withdrawals()
{
C('TOKEN_ON', true);
$cash_open=tpCache('cash.cash_open');
if($cash_open!=1){
$this->error('提现功能已关闭,请联系商家');
}
if (IS_POST) {
$cash_open=tpCache('cash.cash_open');
if($cash_open!=1){
$this->ajaxReturn(['status'=>0, 'msg'=>'提现功能已关闭,请联系商家']);
}
$data = I('post.');
$data['user_id'] = $this->user_id;
$data['create_time'] = time();
$cash = tpCache('cash');
if(encrypt($data['paypwd']) != $this->user['paypwd']){
$this->ajaxReturn(['status'=>0, 'msg'=>'支付密码错误']);
}
if ($data['money'] > $this->user['user_money']) {
$this->ajaxReturn(['status'=>0, 'msg'=>"本次提现余额不足"]);
}
if ($data['money'] <= 0) {
$this->ajaxReturn(['status'=>0, 'msg'=>'提现额度必须大于0']);
}
// 统计所有01的金额
$status = ['in','0,1'];
$total_money = Db::name('withdrawals')->where(array('user_id' => $this->user_id, 'status' => $status))->sum('money');
if ($total_money + $data['money'] > $this->user['user_money']) {
$this->ajaxReturn(['status'=>0, 'msg'=>"您有提现申请待处理,本次提现余额不足"]);
}
if ($cash['cash_open'] == 1) {
$taxfee = round($data['money'] * $cash['service_ratio'] / 100, 2);
// 限手续费
if ($cash['max_service_money'] > 0 && $taxfee > $cash['max_service_money']) {
$taxfee = $cash['max_service_money'];
}
if ($cash['min_service_money'] > 0 && $taxfee < $cash['min_service_money']) {
$taxfee = $cash['min_service_money'];
}
if ($taxfee >= $data['money']) {
$this->ajaxReturn(['status'=>0, 'msg'=>'提现额度必须大于手续费!']);
}
$data['taxfee'] = $taxfee;
// 每次限最多提现额度
if ($cash['min_cash'] > 0 && $data['money'] < $cash['min_cash']) {
$this->ajaxReturn(['status'=>0, 'msg'=>'每次最少提现额度' . $cash['min_cash']]);
}
if ($cash['max_cash'] > 0 && $data['money'] > $cash['max_cash']) {
$this->ajaxReturn(['status'=>0, 'msg'=>'每次最多提现额度' . $cash['max_cash']]);
}
$status = ['in','0,1,2,3'];
$create_time = ['gt',strtotime(date("Y-m-d"))];
// 今天限总额度
if ($cash['count_cash'] > 0) {
$total_money2 = Db::name('withdrawals')->where(array('user_id' => $this->user_id, 'status' => $status, 'create_time' => $create_time))->sum('money');
if (($total_money2 + $data['money'] > $cash['count_cash'])) {
$total_money = $cash['count_cash'] - $total_money2;
if ($total_money <= 0) {
$this->ajaxReturn(['status'=>0, 'msg'=>"你今天累计提现额为{$total_money2},金额已超过可提现金额."]);
} else {
$this->ajaxReturn(['status'=>0, 'msg'=>"你今天累计提现额为{$total_money2},最多可提现{$total_money}账户余额."]);
}
}
}
// 今天限申请次数
if ($cash['cash_times'] > 0) {
$total_times = Db::name('withdrawals')->where(array('user_id' => $this->user_id, 'status' => $status, 'create_time' => $create_time))->count();
if ($total_times >= $cash['cash_times']) {
$this->ajaxReturn(['status'=>0, 'msg'=>"今天申请提现的次数已用完."]);
}
}
}else{
$data['taxfee'] = 0;
}
if (M('withdrawals')->add($data)) {
$this->ajaxReturn(['status'=>1,'msg'=>"已提交申请",'url'=>U('User/account',['type'=>2])]);
} else {
$this->ajaxReturn(['status'=>0,'msg'=>'提交失败,联系客服!']);
}
}
$user_extend=Db::name('user_extend')->where('user_id='.$this->user_id)->find();
//获取用户绑定openId
$oauthUsers = M("OauthUsers")->where(['user_id'=>$this->user_id, 'oauth'=>'wx'])->find();
$openid = $oauthUsers['openid'];
if(empty($oauthUsers)){
$openid = Db::name('oauth_users')->where(['user_id'=>$this->user_id, 'oauth'=>'weixin'])->value('openid');
}
$this->assign('user_extend',$user_extend);
$this->assign('cash_config', tpCache('cash'));//提现配置项
$this->assign('user_money', $this->user['user_money']); //用户余额
$this->assign('openid',$openid); //用户绑定的微信openid
return $this->fetch();
}
//手机端是通过扫码PC端来绑定微信,需要ajax获取一下openID
public function get_openid(){
//halt($this->user_id); 22
$oauthUsers = M("OauthUsers")->where(['user_id'=>$this->user_id, 'oauth'=>'weixin'])->find();
$openid = $oauthUsers['openid'];
if(empty($oauthUsers)){
$openid = Db::name('oauth_users')->where(['user_id'=>$this->user_id, 'oauth'=>'wx'])->value('openid');
}
if($openid){
$this->ajaxReturn(['status'=>1,'result'=>$openid]);
}else{
$this->ajaxReturn(['status'=>0,'result'=>'']);
}
}
/**
* 申请记录列表
*/
public function withdrawals_list()
{
$withdrawals_where['user_id'] = $this->user_id;
$count = M('withdrawals')->where($withdrawals_where)->count();
// $pagesize = C('PAGESIZE'); //10条数据不显示滚动效果
// $page = new Page($count, $pagesize);
$page = new Page($count, 15);
$list = M('withdrawals')->where($withdrawals_where)->order("id desc")->limit("{$page->firstRow},{$page->listRows}")->select();
$this->assign('page', $page->show());// 赋值分页输出
$this->assign('list', $list); // 下线
if (I('is_ajax')) {
return $this->fetch('ajax_withdrawals_list');
}
return $this->fetch();
}
/**
* 我的关注
* @author lxl
* @time 2017/1
*/
public function myfocus()
{
return $this->fetch();
}
/**
* 用户消息通知
* @author yhj
* @time 2018/07/10
*/
public function message_notice()
{
$message_logic = new Message();
$message_logic->checkPublicMessage();
$where = array(
'user_id' => $this->user_id,
'deleted' => 0,
'category' => 0
);
$userMessage = new UserMessage();
$data['message_notice'] = $userMessage->where($where)->LIMIT(1)->order('rec_id desc')->find();
$where['category'] = 1;
$data['message_activity'] = $userMessage->where($where)->LIMIT(1)->order('rec_id desc')->find();
$where['category'] = 2;
$data['message_logistics'] = $userMessage->where($where)->LIMIT(1)->order('rec_id desc')->find();
//$where['category'] = 3;
//$data['message_private'] = $userMessage->where($where)->LIMIT(1)->order('rec_id desc')->find();
$data['no_read'] = $message_logic->getUserMessageCount();
// 最近消息,日期,内容
$this->assign($data);
return $this->fetch();
}
/**
* 查看通知消息详情
*/
public function message_notice_detail()
{
$type = I('type', 0);
// $type==3私信暂时没有
$message_logic = new Message();
$message_logic->checkPublicMessage();
$where = array(
'user_id' => $this->user_id,
'deleted' => 0,
'category' => $type
);
$userMessage = new UserMessage();
$count = $userMessage->where($where)->count();
$page = new Page($count, 10);
//$lists = $userMessage->where($where)->order("rec_id DESC")->limit($page->firstRow . ',' . $page->listRows)->select();
$rec_id = $userMessage->where( $where)->LIMIT($page->firstRow.','.$page->listRows)->order('rec_id desc')->column('rec_id');
$lists = $message_logic->sortMessageListBySendTime($rec_id, $type);
$this->assign('lists', $lists);
if ($_GET['is_ajax']) {
return $this->fetch('ajax_message_detail');
}
if (empty($lists)) {
return $this->fetch('user/message_none');
}
return $this->fetch();
}
/**
* 通知消息详情
*/
public function message_notice_info(){
$message_logic = new Message();
$message_details = $message_logic->getMessageDetails(I('msg_id'), I('type', 0));
$this->assign('message_details', $message_details);
return $this->fetch();
}
/**
* 浏览记录
*/
public function visit_log()
{
$count = M('goods_visit')->where('user_id', $this->user_id)->count();
$Page = new Page($count, 20);
$visit = M('goods_visit')->alias('v')
->field('v.visit_id, v.goods_id, v.visittime, g.goods_name, g.shop_price, g.cat_id')
->join('__GOODS__ g', 'v.goods_id=g.goods_id')
->where('v.user_id', $this->user_id)
->order('v.visittime desc')
->limit($Page->firstRow, $Page->listRows)
->select();
/* 浏览记录按日期分组 */
$curyear = date('Y');
$visit_list = [];
foreach ($visit as $v) {
if ($curyear == date('Y', $v['visittime'])) {
$date = date('m月d日', $v['visittime']);
} else {
$date = date('Y年m月d日', $v['visittime']);
}
$visit_list[$date][] = $v;
}
$this->assign('visit_list', $visit_list);
if (I('get.is_ajax', 0)) {
return $this->fetch('ajax_visit_log');
}
return $this->fetch();
}
/**
* 删除浏览记录
*/
public function del_visit_log()
{
$visit_ids = I('get.visit_ids', 0);
$row = M('goods_visit')->where('visit_id','IN', $visit_ids)->delete();
if(!$row) {
$this->error('操作失败',U('User/visit_log'));
} else {
$this->success("操作成功",U('User/visit_log'));
}
}
/**
* 清空浏览记录
*/
public function clear_visit_log()
{
$row = M('goods_visit')->where('user_id', $this->user_id)->delete();
if(!$row) {
$this->error('操作失败',U('User/visit_log'));
} else {
$this->success("操作成功",U('User/visit_log'));
}
}
/**
* 支付密码
* @return mixed
*/
public function paypwd()
{
//检查是否第三方登录用户
$user = M('users')->where('user_id', $this->user_id)->find();
if ($user['mobile'] == '')
$this->error('请先绑定手机号',U('User/setMobile',['source'=>'paypwd']));
$step = I('step', 1);
if ($step > 1) {
$check = session('validate_code');
if (empty($check)) {
$this->error('验证码还未验证通过', U('mobile/User/paypwd'));
}
}
if (IS_POST && $step == 2) {
$new_password = trim(I('new_password'));
$confirm_password = trim(I('confirm_password'));
$oldpaypwd = trim(I('old_password'));
//以前设置过就得验证原来密码
if(!empty($user['paypwd']) && ($user['paypwd'] != encrypt($oldpaypwd))){
$this->ajaxReturn(['status'=>-1,'msg'=>'原密码验证错误!','result'=>'']);
}
$userLogic = new UsersLogic();
$data = $userLogic->paypwd($this->user_id, $new_password, $confirm_password);
$this->ajaxReturn($data);
exit;
}
$this->assign('step', $step);
return $this->fetch();
}
/**
* 会员签到积分奖励
* 2017/9/28
*/
public function sign()
{
$userLogic = new UsersLogic();
$user_id = $this->user_id;
$info = $userLogic->idenUserSign($user_id);//标识签到
$this->assign('info', $info);
return $this->fetch();
}
/**
* Ajax会员签到
* 2017/11/19
*/
public function user_sign()
{
$userLogic = new UsersLogic();
$user_id = $this->user_id;
$config = tpCache('sign');
$date = I('date'); //2017-9-29
//是否正确请求
(date("Y-n-j", time()) != $date) && $this->ajaxReturn(['status' => false, 'msg' => '签到失败!', 'result' => '']);
//签到开关
if ($config['sign_on_off'] > 0) {
$map['sign_last'] = $date;
$map['user_id'] = $user_id;
$userSingInfo = Db::name('user_sign')->where($map)->find();
//今天是否已签
$userSingInfo && $this->ajaxReturn(['status' => false, 'msg' => '您今天已经签过啦!', 'result' => '']);
//是否有过签到记录
$checkSign = Db::name('user_sign')->where(['user_id' => $user_id])->find();
if (!$checkSign) {
$result = $userLogic->addUserSign($user_id, $date); //第一次签到
} else {
$result = $userLogic->updateUserSign($checkSign, $date); //累计签到
}
$return = ['status' => $result['status'], 'msg' => $result['msg'], 'result' => ''];
} else {
$return = ['status' => false, 'msg' => '该功能未开启!', 'result' => ''];
}
$this->ajaxReturn($return);
}
/**
* vip充值
*/
public function rechargevip(){
$paymentList = M('Plugin')->where("`type`='payment' and code!='cod' and status = 1 and scene in(0,1)")->select();
//微信浏览器
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
$paymentList = M('Plugin')->where("`type`='payment' and status = 1 and code='weixin'")->select();
}
$paymentList = convert_arr_key($paymentList, 'code');
foreach ($paymentList as $key => $val) {
$val['config_value'] = unserialize($val['config_value']);
if ($val['config_value']['is_bank'] == 2) {
$bankCodeList[$val['code']] = unserialize($val['bank_code']);
}
}
$bank_img = include APP_PATH . 'home/bank.php'; // 银行对应图片
$payment = M('Plugin')->where("`type`='payment' and status = 1")->select();
$this->assign('paymentList', $paymentList);
$this->assign('bank_img', $bank_img);
$this->assign('bankCodeList', $bankCodeList);
return $this->fetch();
}
/**
* 个人海报推广二维码 (我的名片)
*/
public function qr_code()
{
$user_id = $this->user['user_id'];
if (!$user_id) {
return $this->fetch();
}
//判断是否是分销商
$user = M('users')->where('user_id', $user_id)->find();
// if (!$user && $user['is_distribut'] != 1) {
// return $this->fetch();
// }
//判断是否存在海报背景图
if(!DB::name('poster')->where(['enabled'=>1])->find()){
echo "<script>alert('请上传海报背景');</script>";
return $this->fetch();
}
//分享数据来源
$shareLink = urlencode("http://{$_SERVER['HTTP_HOST']}/index.php?m=Mobile&c=Index&a=index&first_leader={$user['user_id']}");
$head_pic = $user['head_pic'] ?: '';
if ($head_pic && strpos($head_pic, 'http') !== 0) {
$head_pic = '.'.$head_pic;
}
$this->assign('user', $user);
$this->assign('head_pic', $head_pic);
$this->assign('ShareLink', $shareLink);
return $this->fetch();
}
// 用户海报二维码
public function poster_qrcode()
{
ob_end_clean();
vendor('topthink.think-image.src.Image');
vendor('phpqrcode.phpqrcode');
error_reporting(E_ERROR);
$url = isset($_GET['data']) ? $_GET['data'] : '';
$url = urldecode($url);
$poster = DB::name('poster')->where(['enabled'=>1])->find();
define('IMGROOT_PATH', str_replace("\\","/",realpath(dirname(dirname(__FILE__)).'/../../'))); //图片根目录(绝对路径)
$project_path = '/public/images/poster/'.I('_saas_app','all');
$file_path = IMGROOT_PATH.$project_path;
if(!is_dir($file_path)){
mkdir($file_path,777,true);
}
$head_pic = input('get.head_pic', ''); //个人头像
$back_img = IMGROOT_PATH.$poster['back_url']; //海报背景
$valid_date = input('get.valid_date', 0); //有效时间
$qr_code_path = UPLOAD_PATH.'qr_code/';
if (!file_exists($qr_code_path)) {
mkdir($qr_code_path,777,true);
}
/* 生成二维码 */
$qr_code_file = $qr_code_path.time().rand(1, 10000).'.png';
\QRcode::png($url, $qr_code_file, QR_ECLEVEL_M,1.8);
/* 二维码叠加水印 */
$QR = Image::open($qr_code_file);
$QR_width = $QR->width();
$QR_height = $QR->height();
/* 添加头像 */
if ($head_pic) {
//如果是网络头像
if (strpos($head_pic, 'http') === 0) {
//下载头像
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $head_pic);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$file_content = curl_exec($ch);
curl_close($ch);
//保存头像
if ($file_content) {
$head_pic_path = $qr_code_path.time().rand(1, 10000).'.png';
file_put_contents($head_pic_path, $file_content);
$head_pic = $head_pic_path;
}
}
//如果是本地头像
if (file_exists($head_pic)) {
$logo = Image::open($head_pic);
$logo_width = $logo->height();
$logo_height = $logo->width();
$logo_qr_width = $QR_width / 4;
$scale = $logo_width / $logo_qr_width;
$logo_qr_height = $logo_height / $scale;
$logo_file = $qr_code_path.time().rand(1, 10000);
$logo->thumb($logo_qr_width, $logo_qr_height)->save($logo_file, null, 100);
$QR = $QR->thumb($QR_width, $QR_height)->water($logo_file, \think\Image::WATER_CENTER);
$logo_file && unlink($logo_file);
}
$head_pic_path && unlink($head_pic_path);
}
if ($valid_date && strpos($url, 'weixin.qq.com') !== false) {
$QR = $QR->text('有效时间 '.$valid_date, "./vendor/topthink/think-captcha/assets/zhttfs/1.ttf", 7, '#00000000', Image::WATER_SOUTH);
}
$QR->save($qr_code_file, null, 100);
$canvas_maxWidth = $poster['canvas_width'];
$canvas_maxHeight = $poster['canvas_height'];
$info = getimagesize($back_img); //取得一个图片信息的数组
$im = checkPosterImagesType($info,$back_img); //根据图片的格式对应的不同的函数
$rate_poster_width = $canvas_maxWidth/$info[0]; //计算绽放比例
$rate_poster_height = $canvas_maxHeight/$info[1];
$maxWidth = floor($info[0]*$rate_poster_width);
$maxHeight = floor($info[1]*$rate_poster_height); //计算出缩放后的高度
$des_im = imagecreatetruecolor($maxWidth,$maxHeight); //创建一个缩放的画布
imagecopyresized($des_im,$im,0,0,0,0,$maxWidth,$maxHeight,$info[0],$info[1]); //缩放
$news_poster = $file_path.'/'.createImagesName() . ".png"; //获得缩小后新的二维码路径
inputPosterImages($info,$des_im,$news_poster); //输出到png即为一个缩放后的文件
$QR = imagecreatefromstring(file_get_contents($qr_code_file));
$background_img = imagecreatefromstring ( file_get_contents ( $news_poster ) );
imagecopyresampled ( $background_img, $QR,$poster['canvas_x'],$poster['canvas_y'],0,0,80,92,80, 78 ); //合成图片
$result_png = '/'.createImagesName(). ".png";
$file = $file_path . $result_png;
imagepng ($background_img, $file); //输出合成海报图片
$final_poster = imagecreatefromstring ( file_get_contents ( $file ) ); //获得该图片资源显示图片
header("Content-type: image/png");
imagepng ( $final_poster);
imagedestroy( $final_poster);
$news_poster && unlink($news_poster);
$qr_code_file && unlink($qr_code_file);
$file && unlink($file);
exit;
}
}