<?php

namespace App\Http\Controllers\Wechat\Oauth;

use App\Http\Controllers\WechatController;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use EasyWeChat\Foundation\Application;
use WechatOP;
use App\Http\Controllers\Wechat\Api\WechatInnerApisController;

/**
 * 授权完,回传openid到redirect_url去
 * @author zhoulingjie
 *
 */
class UserOauthsController extends WechatController
{
    public function __construct()
    {    	
    	// TODO 加密
    	$this->gzh_app_id = $_REQUEST['gzh_app_id'];
		parent::__construct($this->gzh_app_id);
    }
    
    /**
     * 本平台作为第三方授权
     * 授权完后传openid到目标站点设置(cookie不能跨域)
     * 
     */
    public function oauth_callback(Request $request)
    {
    	v('oauth_callback_start');
    	$user = array();
    	try{
	    	if(env('DEVELOP_MODE') == 'local'){
		    	$user['openid'] = 'oKXfNs_4SvNpMZWOzNdJklWFEn8Y';
	    	}else{
		        // 获取 OAuth 授权结果用户信息
	    		v('oauth_callback_get_user');
				$user = $this->app->oauth->setRequest($request)->user();
				v('simple_user_data:');v($user);
				$user = $user->original;  
				
				$data = array();
				$data['appid'] =$this->gzh_app_id;
				$data['distribution_channel_id'] = isset($this->official_account['distribution_channel_id'])?$this->official_account['distribution_channel_id']:null;
				$data['openid'] = $user['openid'];
				// 如果unionid没有取到,则自定义1个
				$my_unionid = $data['openid'];
				v('my_unionid:'.$my_unionid);
				$user['unionid'] = $data['unionid'] = isset($user['unionid'])?$user['unionid']:$my_unionid;
				// 去重在后台判断,支付号不需要保存用户
				if(isset($this->official_account['official_account_type']) && $this->official_account['official_account_type'] =='third_platform_pay'){
					v('oauth_third_platform_pay:'.$data['openid']);
				}else{
					// 性能考虑,在h5那边保存用户
					v('to_save_data');v($data);
// 					$this->WechatApi->save_login_wx_user($data);
				}
				
	    	}
    	}
    	catch(\Exception $e){
    		v('oauth_callback_ept:'.$e->getMessage());
    	}
    	
    	$redirect_url = $request->get('redirect_url');
    	v('oauth_callback_direct_url0:'.$redirect_url);
    	$openid = isset($user['openid'])?$user['openid']:'';
    	$unionid = isset($user['unionid'])?$user['unionid']:'';
    	if(strpos($redirect_url,'zsypay') > -1){
//     		v('has zsypay');
    	}else{
    		$redirect_url = urldecode($redirect_url);
    	}
    	if(strpos($redirect_url,'?') > -1){
    		$redirect_url = $redirect_url.'&openid='.$openid.'&unionid='.$unionid;
    	}else{
    		$redirect_url = $redirect_url.'?openid='.$openid.'&unionid='.$unionid;
    	}
    	
    	v('oauth_callback_direct_url:'.$redirect_url);

        return redirect($redirect_url);
    }
   
    /**
     * ydy.wangluogudu.com/user_oauth?gzh_app_id=wx6916de1267c67d50&redirect_url=http%3a%2f%2fydy.wangluogudu.com%2foauth%2fshow_openid%3fgzh_app_id%3dwx6916de1267c67d50
     * 获取用户信息
     */
    public function user_oauth(Request $request)
    {
    	v('third_check_user_auth_start');
    	$params = array();
    	$params['gzh_app_id'] = $request->get("gzh_app_id");
    	$params['redirect_url'] = $request->get("redirect_url");
    	$this->options['oauth']['callback'] .= '?'.http_build_query($params);
    	// options改变了,这个app对象必须重新赋值
    	$this->app = WechatOP::app($this->options);
    	v($this->options['oauth']['callback']);
    	return $this->app->oauth->setRequest($request)->redirect();
    }
    
    public function show_openid(Request $request)
    {
    	echo '您的openid:'.$request->get('openid');
    	die();
    }

}