<?php
/**
  * @class 用户操作类
  * @author soul
  * @copyright 2017/4/13
  */
class userAction extends baseAction
{
	/**
	  * @method 会员登录
	  * @http  post
	  * @param  token            string [选填] 调用接口凭证 (post|get)
	  * @param  type             string [必填] 手机登录：mobile    密码登录：password    微信登录：weixin  token：token
	  * @param  mobile           string [type=mobile必填] 手机号码  
	  * @param  mobile_code      string [type=mobile必填] 手机短信验证码 
	  * @param  username         string [type=password必填] 用户名/邮箱/已验证手机
	  * @param  imgcode        int[type=password 且 多次输入密码错误时必填] 图片验证码
	  * @param  password         string [type=password必填] 登录密码   长度为6~20个字符的组合
	  * @param  unionid          string [type=weixin必填] 微信唯一标识码
	  * @param  utoken           string [type=token必填] utoken
	  * @param  from             string [必填] 来源  YP(宜配网)|YPAPP|YPGZG|YPIM|YPYPC|PJD(跑街的)|PJDAPP|PJDGZH|PJDSGZH(商城店铺公众号)|PJL(跑街令)|CRM|BMTSR|CLIENT(客户网)
	  * @param  lang             string [选填] cn|en
	  * @author soul
	  * @copyright 2017/4/13
	  * @return 
			{"status":true,"data":{"u_id":"149894","u_name":"soul12","u_pay_password":null,"u_nickname":"soul12","u_real_name":"欧昌宇","u_yiparts":"N","u_b2c_worker":"N","u_b2c_shopid":"149894","u_type":"2","u_ul_id":"4","u_email":"472211059@qq.com","u_emil_check":"1","u_mobile":"13434580358","u_mobile_check":"Y","u_weixin_unionid":"ok4Ppv4IBlRwm5pzM45YU6TamVNA","u_weixin_info":{"openid":"obxtFwBqEAQFD8xyJ1QroR7mqk0I","nickname":"蓝宇战车","sex":0,"language":"zh_CN","city":"","province":"","country":"","headimgurl":"http:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/I3mx3eDkoPhsaib0dM62bLRhcHOibGS2LQEbxOJ7E6FN3HgySf3pu8gbIIoicIexn8LaNOmb2bOxslkssYsia5ltqA\/132","privilege":[],"unionid":"ok4Ppv4IBlRwm5pzM45YU6TamVNA"},"u_weixin_bd":"Y","u_gzh_bd":"Y","u_integral":"37781","u_register_time":"1392825600","u_login_count":"3155","u_logo":"Logo\/1009\/100\/ccad6358aba98691.jpg","u_growth":"1160","u_from":null,"ui_period":"2022-04-22 23:59:59","utag":"c291bDEyQDFjNzU3ZjIyODMxYjk4ZmM1M2QzY2E1N2FmNWNjYzZj"}, "code":""}

			{"status":false,"data":"错误代码","code":"code_error"}
			错误代码 
			error:账户名与密码不匹配
			no_email_check:邮箱未验证，请先验证
			token_error: token失效或者不存在
			weixin_no:微信未绑定
	  */
	public function login()
	{
		$dataArr = [];
		switch($_POST['type'])
		{
			case 'mobile': $dataArr = ['mobile'=>$_POST['mobile'], 'code'=>$_POST['mobile_code']]; break;
			case 'password': $dataArr = ['name'=>$_POST['username'], 'password'=>$_POST['password']]; break;
			case 'weixin': $dataArr = ['unionid'=>$_POST['unionid']]; break;
			case 'token': $dataArr = ['token'=>$_POST['utoken']]; break;
		}
		//调取宜配接口
		if(!empty($dataArr))
		{
			$LibYpApi = new LibYpApi();
			$dataArr['from'] = empty($_POST['from'])? 'PJDAPP': $_POST['from'];
			$postArr = [];
			switch($_POST['type'])
			{
				case 'token':
					$utagArr = explode('@', base64_decode($dataArr['token']));
					$res = $LibYpApi->Get('user/getToken', ['uid'=>$utagArr[1], 'uname'=>$utagArr[0]], [], true);
					if($res['status'] && !empty($res['data']['token']))
					{
						$postArr = [
							'type'=>'token',
							'data'=>['token'=>$res['data']['token']],
							'lang'=>'cn'
						];
					}
				break;
				case 'weixin':
					$postArr = [
						'type'=>'weixin',
						'data'=>['unionid'=>$dataArr['unionid']],
						'lang'=>'cn'
					];
				break;
				case 'password':
					$postArr = [
						'type'=>'password',
						'data'=>['name'=>$dataArr['name'],'password'=>$dataArr['password']],
						'lang'=>'cn'
					];
				break;
				case 'mobile':
					$postArr=[
						'type'=>'mobile',
						'data'=>['mobile'=>$dataArr['mobile'],'code'=>$dataArr['code']]
					];
				break;
			}
			$postArr['data']['ip'] = LibFc::GetClientIp();
			$postArr['data']['from'] = empty($dataArr['from'])? 'PJDAPP': $dataArr['from'];
			
			$res=$LibYpApi->Get('user/login', [], $postArr, true);
			if($res['status'] && !empty($res['data']['u_id']))
			{
				$re=$this->loginSession($res);
				if(empty($re['status']))
				{
					LibFc::ajaxJsonEncode($re);
				}
				if($this->dataConfig['_apiType'] == 'token'){
					//返回token...
					$LibEncry = new LibEncry();
					$appToken = $LibEncry->encode($_SESSION['_userid'].'@'.$res['data']['u_name'].'@'.md5('YP'.$res['data']['u_name']).'@'.$_SESSION['_shopid'], mvc::$cfg['ENCRYKEY']);
					// $appToken = $_SESSION['_userid'].'@'.$res['data']['u_name'].'@'.md5('YP'.$res['data']['u_name']).'@'.$_SESSION['_shopid'];
					$res['data'] = [
						'u_id'=>$_SESSION['_userid'],
						'u_name'=>$_SESSION['_username'],
						'u_mobliechk'=>$_SESSION['_mobliechk'],
						'token'=>$appToken
					];
				}else{
					$res['data'] = [
						'u_id'=>$_SESSION['_userid'],
						'u_name'=>$_SESSION['_username'],
						'u_mobliechk'=>$_SESSION['_mobliechk'],
						'utag'=>$_POST['type'] != 'weixin' ? $res['data']['utag']: '',
						'wxid'=>$_POST['type'] == 'weixin'? $res['data']['u_weixin_unionid']: ''
					];
				}
			}
			LibFc::ajaxJsonEncode($res);
		}
		LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'获取参数失败，请稍后重试！']);


	}
	/**
	  * @method 登录标识
	  * @author soul 2017/5/10
	  */
	private function loginSession($ResArr)
	{
		$uid = $ResArr['data']['u_id'];
		$this->logoutSession();
		$B2cBase = new B2cBase();
		$Res = $B2cBase->get('sh_shop', ['shop_id'], sprintf(" and shop_uid=%d", $uid), true);
		if(!empty($Res['data']))
		{
			$_SESSION['_shopid'] = $Res['data']['shop_id'];
			$_SESSION['_shopowner'] = true;
		}
		else
		{
			//是否为店铺职员
			$Res = $B2cBase->get('sh_worker', ['wor_shop_id', 'wor_rule_ids'], sprintf(" and wor_uid=%d and wor_status=1 limit 1", $_SESSION['_userid']), true);
			if(!empty($Res['data']))
			{
				//无需判断是否绑定手机
				$_SESSION['_mobliechk'] = 'Y';
				$_SESSION['_shopid'] = $Res['data']['wor_shop_id'];
				$_SESSION['_shopowner'] = false;
				$_SESSION['_rules'] = explode(',', $Res['data']['wor_rule_ids']);
			}
		}

		if(!empty($_SESSION['_shopid']))
		{
			$_SESSION['_mobliechk'] = $ResArr['data']['u_mobile_check'];
			$_SESSION['_userid'] = $ResArr['data']['u_id'];
			$_SESSION['_username'] = $ResArr['data']['u_name'];
			$_SESSION['_uname'] = empty($ResArr['data']['u_real_name'])? $_SESSION['_username']: $ResArr['data']['u_real_name'];
			$Expires = time()+3600*24*7;
			setcookie('utag', $ResArr['data']['utag'], $Expires, "/", mvc::$cfg['COOKIE_DOMAIN']);
			$ResArr['data'] = [
				'u_id'=>$_SESSION['_userid'],
				'u_name'=>$_SESSION['_username'],
			];
		}
		else
		{
			$ResArr = ['status'=>false, 'data'=>'此账号尚未开通店铺', 'code'=>'noShop'];
		}		
		return $ResArr;
	}
	/**
	  * @method 清楚登录标识
	  * http get
	  * @author soul 2017/5/10
	  */
	public function logoutSession()
	{
		unset($_SESSION['_userid']);
		unset($_SESSION['_username']);
		unset($_SESSION['_shopid']);
		unset($_SESSION['_mobliechk']);
		unset($_SESSION['_shopowner']);
		unset($_SESSION['_rules']);
		unset($_SESSION['_uname']);
	}
	/**
	 * @method    校验本次密码登录是否需要图片验证码
	 * @http  get
	 * @param  string username [必填]  登录用户名
	 * @return   json {"status":true,"data":1} {"status":true,"data":0}  data > 0 时需要验证码
	 * @author 卢
	 * @copyright 2018-09-28
	 */
	function nameCheckcode()
	{
		$Params = mvc::$URL_PARAMS;
		$must = 0;
		if(!empty($Params['username']))
		{
			$LibYpApi = new LibYpApi();
			$ResArr = $LibYpApi->Get('user/nameCheckcode', ['name'=>$Params['username']]);
			$must = $ResArr['data'];
		}
		$Return = ['status'=>true, 'data'=>$must];
		LibFc::ajaxJsonEncode($Return);
	}
	/**
	  * @method 图片验证码
	  * http get
	  * @param  string  type [必填]    [reg|login] 登录|注册
	  * @author soul
	  * @copyright 2017/5/9
	  */
	function imgcode()
	{
		$Params = mvc::$URL_PARAMS;
		$OthCheckcode = new OthCheckcode();
		$CofArr = [];
		if(!empty($Params['type']))
		{
			switch($Params['type'])
			{
				case 'reg':
				case 'login': $CofArr = ['height'=>30, 'width'=>70]; break;
				case 'business': $CofArr = ['session_key'=>'BusinessImageCode','level'=>4,'height'=>30, 'width'=>80]; break;
			}
		}
		$OthCheckcode->getImgcode($CofArr);
	}
	/**
	 * @method    获取店铺信息
	 * @http get
	 * @return    json {"status":true,"data":{"uname":"BMTSR","shop_name":xxxx,"shop_status":xxx,"shop_logo":'xxxxx'},"code":0}
	 * @author 卢
	 * @copyright 2018-09-28
	 */
	function getShopInfo()
	{
		$this->checkRule(2);
		$B2cBase=new B2cBase();
		$res=$B2cBase->get('sh_shop',['shop_name','shop_status','shop_logo'],sprintf(' and shop_id=%d',$this->dataConfig['_shopid']),true);
		$res['data']['shop_logo']=mvc::$cfg['FILE_CENTER']['b2c']['url_get'].'&c=shopLogo&f='.$res['data']['shop_logo'].mvc::$cfg['FILE_CENTER']['b2c']['get_uri'];
		$res['data']['uname']=$_SESSION['_uname'];
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 * @method    推送消息给安卓客户端
	 * @http    post
	 * @param   string    title  [标题]
	 * @param   [string]   content            [内容]
	 * @author 卢
	 * @copyright 2018-10-10
	 */
	function pushMessageToAndroid()
	{
		$OthAppPush=new OthAppPush();
		$data=$_POST;
		if(empty($data)||empty($data['title'])||empty($data['content']))
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误']);
		}
		$res=$OthAppPush->pushMessageToAndroid($data['title'],$data['content']);
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 * @method    推送通知给安卓客户端
	 * @param   string    title  [标题]
	 * @param   [string] content              [内容]
	 * @param   arr   extArr [可选] [自定义的KV结构，供开发者扩展使用，针对Android设备。]
	 * @author 卢
	 * @copyright 2018-10-10
	 */
	function pushNoticeToAndroid()
	{
		$OthAppPush=new OthAppPush();
		$data=$_POST;
		if(empty($data)||empty($data['title'])||empty($data['content']))
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误']);
		}
		$extArr=!empty($data['extArr'])?$data['extArr']:[];
		$res=$OthAppPush->pushNoticeToAndroid($data['title'],$data['content'],$extArr);
		LibFc::ajaxJsonEncode($res);
	}
}