<?php
/**
  * @class action 基类 判断用户权限使用、监控.....
  * @author soul
  * @copyright 2017/4/13
  * @demo 
	$url = 'http://192.168.1.115/API/hopen/index.php/user/login';
	$getArr = ['token'=>''];
	$postArr = ['type'=>'password', 'username'=>'soul12', 'password'=>'123456'];

	$url = $url.'?'.http_build_query($getArr);
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
	if(!empty($postArr))
	{
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postArr));
	}
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$html = curl_exec($ch);
	curl_close($ch);
	echo $html;

	{"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":"3210","u_login_time":"1538045166","u_logo":"S100\/S.jpg","u_growth":"1160","u_from":null,"ui_period":"2022-04-22 23:59:59","utag":"c291bDEyQDFjNzU3ZjIyODMxYjk4ZmM1M2QzY2E1N2FmNWNjYzZj"},"code":"jfR+NRZFazBw9WxtvvxVMRt6RW7FUmsyPP1uNCjmGGmyeWx4ekRZNYl7UTCurkBpp7RIebNQRTEnd2d3jzrvM79IWkGR9m1KDDFWRHTaVlU="}

	接口请求token
	"code":"jfR+NRZFazBw9WxtvvxVMRt6RW7FUmsyPP1uNCjmGGmyeWx4ekRZNYl7UTCurkBpp7RIebNQRTEnd2d3jzrvM79IWkGR9m1KDDFWRHTaVlU="
  */
class baseAction
{
	const APISECRET = '3F96A9a0c739';
	protected $UID = 0;

	//token 解码
	public function checkToken()
	{
		if(!empty($_REQUEST['token']))
		{
			$LibEncry = new LibEncry();
			$tag = explode('@', $LibEncry->decode($_REQUEST['token'], mvc::$cfg['ENCRYKEY']));
			if(count($tag) == 4 && $tag[3] == APISECRET && preg_match('/^\d+$/', $tag[0]))
			{
				if($tag[2] > time())
				{
					$this->UID = $tag[0];
					return true;
				}
				else
				{
					//过期，判断密码是否修改
					$YpwBase = new YpwBase();
					$res = $YpwBase->Get('yp_user', ['u_id', 'u_password'], sprintf(" and u_id=%d", $uid), true);
					if(!empty($res['data']) && $res['data']['u_password'] == $tag[2])
					{
						//密码无修改
						return buildToken($res['data']['u_id']);
					}
				}
			}
		}
		LibFc::ReturnJson(false, 'token无效，请重新登录！', 'token');
	}
	
	//根据用户信息生成token
	public function buildToken($uid)
	{
		$uid = (int) $uid;
		if($uid > 0)
		{
			$YpwBase = new YpwBase();
			$res = $YpwBase->Get('yp_user', ['u_id', 'u_password'], sprintf(" and u_id=%d", $uid), true);
			if(!empty($res['data']))
			{
				$res = $res['data'];
				$this->UID = $res['u_id'];
				$str = $res['u_id'].'@'.$res['u_password'].'@'.(time()+3600).'@'.APISECRET;
				$LibEncry = new LibEncry();
				$newToken = $LibEncry->encode($str, mvc::$cfg['ENCRYKEY']);
				mvc::$cfg['NEW_TOKEN'] = $newToken;
				return true;
			}
		}
		LibFc::ReturnJson(false, '生成token失败！', 'token');
	}

	//是否需要获取用户ID
	public function needUser()
	{
		$this->checkToken();
		if($this->UID < 1)
			LibFc::ReturnJson(false, 'token无效，请重新登录！', 'token');
	}
}