wechat = new Wechat();
	}
	/**
     * 小程序登录login
     * 
     * @return mixed
     */
	public function applet_login_api()
	{
		$project = $this->wechat->project();
		$param['js_code'] = Dever::input('code');
		$param['appid'] = Dever::input('appid');
		$param['component_access_token'] = $this->wechat->token();
		$param['component_appid'] = $project['appid'];
		$data = $this->wechat->curl('applet_login', $param);
		echo $data;die;
	}
	/**
     * 获取component token 一般为系统token
     * 
     * @return mixed
     */
	public function token_api()
	{
		return $this->wechat->token(false, false, 2000, true);
	}
	/**
     * 获取预授权码 开始用户授权
     * 
     * @return mixed
     */
	public function test_api()
	{
		$link = $this->wechat->login('component/auth.oauth', false, false);
		echo '第三方平台授权';die;
	}
	/**
     * 获取预授权码 开始用户授权
     * 
     * @return mixed
     */
	public function get_api()
	{
		$this->wechat->login('component/auth.oauth');
	}
	/**
     * 定期获取oauth的token 用户token
     * 
     * @return mixed
     */
    public function cron()
    {
        $user = Dever::db('component/user')->state();
        if ($user) {
        	foreach ($user as $k => $v) {
        		$this->wechat->oauth($v['oauth_id'], 2000, true);
        	}
        }
    }
	/**
     * 获取oauth的token 用户token
     * 
     * @return mixed
     */
	public function oauth_api()
	{
		$param['auth_code'] = Dever::input('auth_code');
		$param['expires_in'] = Dever::input('expires_in');
		if ($param['auth_code']) {
			$data = $this->wechat->oauth($param);
		} else {
			$param = Dever::input('id', 1);
			$data = $this->wechat->oauth($param, 2000, true);
		}
		if ($data && isset($data['openid'])) {
			$result = $this->wechat->curl('user', $data);
			if ($result) {
				# 初始化操作
				$param = array();
				$qrcode = Dever::load('upload/save.copy', $result['authorizer_info']['qrcode_url']);
				$param['project_id'] = $data['project_id'];
				$param['oauth_id'] = $data['id'];
				$param['name'] = $result['authorizer_info']['nick_name'];
				$param['principal_name'] = $result['authorizer_info']['principal_name'];
				$param['pic'] = $result['authorizer_info']['head_img'];
				$param['qrcode'] = $qrcode['url'];
				$param['username'] = $result['authorizer_info']['user_name'];
				//$param['desc'] = '1';
				$param['mdate'] = time();
				
				if (isset($result['authorizer_info']['MiniProgramInfo'])) {
					$param['type'] = 1;
				} else {
					if ($result['authorizer_info']['service_type_info'] == 2) {
						$param['type'] = 3;
					} else {
						$param['type'] = 2;
					}
				}
				$id = Dever::upinto('component/user', array('option_oauth_id' => $data['id']), $param);
				
				$domain = Dever::db('component/domain')->one(array('option_project_id' => $param['project_id']));
				//自动设置域名
				if ($domain) {
					$param['id'] = $id;
					Dever::load('component/domain.set', $param, $domain['id']);
				}
				
				$tester = Dever::db('component/tester')->state(array('option_project_id' => $param['project_id']));
				if ($tester) {
					$param['id'] = $id;
					foreach ($tester as $k => $v) {
						//自动设置体验者
						Dever::load('component/tester.set', $param, $v['id']);
					}
				}
			}
		}
		return '绑定成功';
	}
	/**
     * wechat回调,直接将数据回写到该方法中
     * 
     * @return mixed
     */
	public function saveOauthInfo($oauth_id, $data, $project_id)
	{
		echo 1;
		# 这里用于记录权限集func_info,先不记录了
		return;
	}
	
	/**
     * 业务推送接口 微信服务器会将所有请求都推送到这里
     * 
     * @return mixed
     */
	public function main()
	{
		$this->output = '';
		
		# 获取微信消息
		$this->request();
		
		# 对消息进行验证,并根据类型得到本平台的配置数据
		//$this->response();
		
		# 输出
		$this->output();
	}
	
	/**
     * 输出
     * 
     * @return mixed
     */
	private function output()
	{
		if (!$this->output) {
			$this->output = 'success';
		}
		echo $this->output;die;
	}
    /**
     * 获取微信发送的内容
     * 
     * @return mixed
     */
    private function request()
    {
		$data = $_GET ? $_GET : $_POST;
		/*
		$data = array();
		$data['signature'] = '9474754223130bc1c820537b8113b590ef3cbf8e';
		$data['timestamp'] = '1525915492';
		$data['nonce']	= '1211005377';
		$data['encrypt_type'] = 'aes';
		$data['msg_signature'] = 'f17b5c2d2cf1592e07803f190048289ff468ef2b';
		*/
		$xml = file_get_contents('php://input');
		Dever::log(json_encode($data) . $xml);
		/*
		$xml = "
    
    
";
		*/
		if (!empty($xml)) {
			libxml_disable_entity_loader(true);
          	$result = (array) simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
			$result = $this->wechat->decode($data['msg_signature'], $data['timestamp'], $data['nonce'], $result['Encrypt']);
			if (isset($result['ComponentVerifyTicket'])) {
				$this->wechat->ticket($result['ComponentVerifyTicket'], 600, 100);
			}
			return true;
		} else {
			return false;
		}
    }
}