<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
declare (strict_types = 1);

namespace app\mainapp;

use think\App;
use think\exception\ValidateException;
use think\Validate;

// use Firebase\JWT\JWT;
// define('ACCESS_TOKEN_KEY', '1gHuiop975cdashyex9Ud23ldsvm2Xq'); //密钥
// 

// define('WECHATPAY_APPID', 'wxeac94e69d4e4da41');


define('NOTIFY_WECHAT_URL', 'https://zp.vlinke.com/index.php/mainapp/notify/orderwechat');


/**
 * 控制器基础类
 */
abstract class BaseController
{
	
	protected $wechatConfig = array( 
	    'appid'				=> 'wxb97c1a98dd6f52c9',
	    'mch_id'			=> '1552581081',
	    'key'				=> 'xianchangaixiechunbingbrandy5211',
	    'sslcert_path'		=> '',
	    'sslkey_path'		=> ''
	);
	
	
	protected $provincelist = array(
		['value'=>"", 'title'=>"全部"],
		['value'=>"北京市", 'title'=>"北京市"],
		['value'=>"天津市", 'title'=>"天津市"],
		['value'=>"河北省", 'title'=>"河北省"],
		['value'=>"山西省", 'title'=>"山西省"],
		['value'=>"内蒙古自治区", 'title'=>"内蒙古自治区"],
		['value'=>"辽宁省", 'title'=>"辽宁省"],
		['value'=>"吉林省", 'title'=>"吉林省"],
		['value'=>"黑龙江省", 'title'=>"黑龙江省"],
		['value'=>"上海市", 'title'=>"上海市"],
		['value'=>"江苏省", 'title'=>"江苏省"],
		['value'=>"浙江省", 'title'=>"浙江省"],
		['value'=>"安徽省", 'title'=>"安徽省"],
		['value'=>"福建省", 'title'=>"福建省"],
		['value'=>"江西省", 'title'=>"江西省"],
		['value'=>"山东省", 'title'=>"山东省"],
		['value'=>"河南省", 'title'=>"河南省"],
		['value'=>"湖北省", 'title'=>"湖北省"],
		['value'=>"湖南省", 'title'=>"湖南省"],
		['value'=>"广东省", 'title'=>"广东省"],
		['value'=>"广西壮族自治区", 'title'=>"广西壮族自治区"],
		['value'=>"海南省", 'title'=>"海南省"],
		['value'=>"重庆市", 'title'=>"重庆市"],
		['value'=>"四川省", 'title'=>"四川省"],
		['value'=>"贵州省", 'title'=>"贵州省"],
		['value'=>"云南省", 'title'=>"云南省"],
		['value'=>"西藏自治区", 'title'=>"西藏自治区"],
		['value'=>"陕西省", 'title'=>"陕西省"],
		['value'=>"甘肃省", 'title'=>"甘肃省"],
		['value'=>"青海省", 'title'=>"青海省"],
		['value'=>"宁夏回族自治区", 'title'=>"宁夏回族自治区"],
		['value'=>"新疆维吾尔自治区", 'title'=>"新疆维吾尔自治区"],
		['value'=>"台湾省", 'title'=>"台湾省"],
		['value'=>"香港特别行政区", 'title'=>"香港特别行政区"],
		['value'=>"澳门特别行政区", 'title'=>"澳门特别行政区"]
	);
    /**
     * Request实例
     * @var \think\Request
     */
    protected $request;

    /**
     * 应用实例
     * @var \think\App
     */
    protected $app;

    /**
     * 是否批量验证
     * @var bool
     */
    protected $batchValidate = false;

    /**
     * 控制器中间件
     * @var array
     */
    protected $middleware = [];
	
	/**
	 * 控制器中间件
	 * @var array
	 */
	protected $access_administer = [];

    /**
     * 构造方法
     * @access public
     * @param  App  $app  应用对象
     */
    public function __construct(App $app)
    {
        $this->app     = $app;
        $this->request = $this->app->request;
		
		
        // 控制器初始化
        // $this->initialize();
    }

    // 初始化
    protected function initialize()
    {
		// 验证登陆信息
		$access_token = input('access_token');
		if (empty($access_token)) {
			page_result(1001, "You do not have permission to access.");
		}else{
			try {
				JWT::$leeway = 60;
				$decoded = JWT::decode($access_token, ACCESS_TOKEN_KEY, ['HS256']);
				$arr = (array)$decoded;
				if ($arr['exp'] < time()) {
					page_result(1001, "请重新登录。");
				} else {
					$this->access_administer = $arr['data'];
				}
			} catch(\Exception $e) {
				page_result(1001, "Token验证失败，请重新登录。");
			}
		}
	}

    /**
     * 验证数据
     * @access protected
     * @param  array        $data     数据
     * @param  string|array $validate 验证器名或者验证规则数组
     * @param  array        $message  提示信息
     * @param  bool         $batch    是否批量验证
     * @return array|string|true
     * @throws ValidateException
     */
    protected function validate(array $data, $validate, array $message = [], bool $batch = false)
    {
        if (is_array($validate)) {
            $v = new Validate();
            $v->rule($validate);
        } else {
            if (strpos($validate, '.')) {
                // 支持场景
                list($validate, $scene) = explode('.', $validate);
            }
            $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
            $v     = new $class();
            if (!empty($scene)) {
                $v->scene($scene);
            }
        }

        $v->message($message);

        // 是否批量验证
        if ($batch || $this->batchValidate) {
            $v->batch(true);
        }

        return $v->failException(true)->check($data);
    }

}
