<?php
    require '../vendor/wechat/vendor/autoload.php';
	class pptWXBase
	{
		protected $openid;
		public function __construct(){
			session_start();
			//$_SESSION['openid'] = null;
			if(!isset($_SESSION['openid'])){
				$openid = $this->getHeaderValue('openid');
				if(empty($openid)){
					//去登录			
					$code = isset($_GET['code']) ? $_GET['code'] : '';		
					$this->wxLogin($code);
					exit();					
				}else{
					//已经有openid了,不用登录
					$_SESSION['openid'] = $openid;
				}
			}
			$this->openid = $_SESSION['openid'];			
		}
		/**
		 * 获取请求头
		 * @param  [string] $keyName [头名]
		 * @return [string]          [头值]
		 */
		public function getHeaderValue($keyName){
			$headerValue = '';
			if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
                $headerValue = $result[$keyName];
            } else {
                foreach ($_SERVER as $key => $val) {
                    if (0 === strpos($key, 'HTTP_')) {
                        $key 	= str_replace('_', '-', strtolower(substr($key, 5)));
                        if($key == $keyName){
							$headerValue = $val;
							break;
						}
                    }
                }				
			}
			return $headerValue;
		}		
		/**
		 * 调用微信登录
		 * @return [type] [description]
		 */
		public function wxLogin($code){
			//登录过程			
			if(!$code){
				//调取授权
				$this->getAuth();
			}else{
				//获取openid,同时获取用户信息
				$authInfo = $this->getOpenid($code,true);
				if(isset($authInfo['openid'])){
					$_SESSION['openid'] = $authInfo['openid'];
					$this->openid = $_SESSION['openid'];
					echo "<script>document.location.reload()</script>";exit();
				}
			}
		}
		/**
		 *第一步:用户同意授权,获取code
		 *getAuth();
		 *第二步:通过code换取网页授权access_token
		 *getOpenid($code,$type=false){    
		 *第三步:拉取用户信息(需scope为 snsapi_userinfo)
		 *微信用户信息 
		 *第一种,直接在第二步获取openid时获取
		 *getOpenid($code,$type=true);
		 *第二种 通过用户授权accress_token获取
		 *getUserInfo($userAuthAccessToken, $openid);
		 *第三种 通过公众号accressToken获取
		 *getUserInfoByToken($accessToken, $openid)
		 *
		 *		 
		 */
		
		/**
		 * 获取用户授权CODE,回调为当前地址,需要判断Code
		 *
		 */
		public function getAuth(){
			\WeChat\Core\User::code();  # 重载微信授权
		}
		/**
		 * 通过code获取openid,access_token或用户信息
		 * @param  [string] $code [用户授权code]
		 * @param  [string] $type [true:同时获取用户信息 | false:只获取用户openid]
		 * @return [string]       [openid]
		 */
		public function getOpenid($code, $type=false){
			return \WeChat\Core\User::openid($code, $type);
		}
		/**
		 * 通过用户授权access_token获取用户信息
		 * @param  [string] $userAuthAaccessToken  [用户授权access_token]
		 * @param  [string] $openid                [用户openid]
		 * @return [array]                       []
		 */
		public function getUserInfo($userAuthAccessToken, $openid){
			return \WeChat\Core\User::userInfo($userAuthAccessToken, $openid);
		}
		/**
		 * 通过公众号accessToken获取用户信息
		 * @param  [string] $accessToken  [公众号access_token]
		 * @param  [string] $openid                [用户openid]
		 * @return [array]                       []
		 */
		public function getUserInfoByToken($openid){
			return \WeChat\Core\User::newUserInfo($openid);
		}
		/**
		 * 获取公众号下所有模板信息
		 * @return [array] [模板列表]
		 */
		public function getAllTemplateMsg(){			
			$accessToken = $this->getAccessToken();			
			return \WeChat\Core\Template::gain($accessToken);
		}
		/**
		 * 获取用户accessToken
		 * @return [string] accessToken
		 */
		public function getAccessToken(){
			$accessToken = \WeChat\Core\Token::gain();  # 获取微信access_token
			$accessToken = $accessToken['access_token'];
			return $accessToken;
		}
		/**
		 * 发送模板消息
		 * @param  [string] $templateId [模板ID]
		 * @param  [string] $openid     [用户openid]
		 * @param  [array] $data       	[消息数据]
		 * @param  [string] $url        [点击跳转地址]
		 * @param  string $color      	[标题颜色]
		 * @return [array]            	消息是否成功发送
		 *         						errcode: 0成功,其他失败
		 *         						errmsg: 错误信息,ok成功,其他失败
		 *         						msgid: 消息id
		 *         						
		 */
		public function sendTemplateMsg($templateId, $openid, $data, $url, $color = '#7B68EE'){
			//\WeChat\Core\User::code($appID);  # 重载微信授权
			$accessToken = $this->getAccessToken();
			return \WeChat\Core\Send::push($accessToken, $templateId, $openid, $data, $url, $color);
		}
	}
	// $templateId = 'ObkTv-txyqsv8Toie4HC8PnBFJmwygw9zPJbx8h0FcM';
	// $openid = 'objYQuHNqKTi2sjSTzLTc7C7PjDo';
	// $url = 'http://t.ect99.com';
	// //模板消息
	// $data = [
 //        'first'=>['value'=>'您的活动已通过','color'=>"#FF0000"],
 //        'keyword1'=>['value'=>'测试文章标题'],  //keyword需要与配置的模板消息对应
 //        'keyword2'=>['value'=>date("Y-m-d H:i:s")],
 //        'keyword3'=>['value'=>'测试发布人'],
 //        'keyword4'=>['value'=>'测试状态'],
 //        'remark' =>['value'=>'备注:这是测试']
 //    ];
 //    var_dump(pptWX->sendTemplateMsg($templateId, $openid, $data, $url));
 //    //登录过程
	// $code = isset($_GET['code']) ? $_GET['code'] : '';
	// if(!$code){
	// 	//调取授权
	// 	pptWXBase::getAuth();
	// }else{
	// 	//获取授权信息,只获取openid
	// 	//$authInfo = pptWXBase::getOpenid($code);
	// 	// 返回代码示例
	// 	// array(5) {
	// 	//   ["access_token"]=>
	// 	//   string(89) "22_HQ4kM7_gbUZ-fGP1TnFLeh-wxk-jWyjc_PzrbYpICXyuGCNKWEi_Yz5_qnStDGP56I8OD4xJvNRVS98U1TC6Zw"
	// 	//   ["expires_in"]=>
	// 	//   int(7200)
	// 	//   ["refresh_token"]=>
	// 	//   string(89) "22_bdxpWwS0wADfSNO1y6Sq7txoWBK3hG4x3vvx_WOe-sovDig-yWZ43MsBtzJlY2svcxmlvLxKwBughKbJL14b8A"
	// 	//   ["openid"]=>
	// 	//   string(28) "objYQuHNqKTi2sjSTzLTc7C7PjDo"
	// 	//   ["scope"]=>
	// 	//   string(15) "snsapi_userinfo"
	// 	// }	
	// 	//获取用户信息
	// 	//通过授权token,获取用户信息
	// 	//$userInfo = pptWXBase::getUserInfo($authInfo['access_token'], $authInfo['openid']);
	// 	//获取openid,同时获取用户信息
	// 	$authInfo = pptWXBase::getOpenid($code,true);
	// 	// 返回代码示例
	// 	// array(9) {
	// 	//   ["openid"]=>
	// 	//   string(28) "objYQuHNqKTi2sjSTzLTc7C7PjDo"
	// 	//   ["nickname"]=>
	// 	//   string(12) "网事悠悠"
	// 	//   ["sex"]=>
	// 	//   int(1)
	// 	//   ["language"]=>
	// 	//   string(5) "zh_CN"
	// 	//   ["city"]=>
	// 	//   string(6) "枣庄"
	// 	//   ["province"]=>
	// 	//   string(6) "山东"
	// 	//   ["country"]=>
	// 	//   string(6) "中国"
	// 	//   ["headimgurl"]=>
	// 	//   string(130) "http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJW7ghRsPm6dJReYJ97lUMicgjQLVdSaPr3SKBZ29riaZ3KOFaw1nmKyt4LtibvN2FkzFTTESgetm9QQ/132"
	// 	//   ["privilege"]=>
	// 	//   array(0) {
	// 	//   }
	// 	// }

	// 	var_dump($authInfo);
	// }