param = array(); $this->gzh_app_id = $gzh_app_id; $this->param['gzh_app_id'] = $this->gzh_app_id; $this->param['openid'] = ''; // check公众号,不等于微信测试号 if(!empty($this->gzh_app_id) && $this->gzh_app_id != 'wx570bc396a51b8ff8'){ $this->wechat_group_gzh = WechatGroupGzh::get_wechat_group_gzh($this->gzh_app_id); if(!empty($this->wechat_group_gzh)) { $this->param['group_api'] = $this->wechat_group_gzh['group_api']; $this->param['group'] = $this->wechat_group_gzh['group']; }else{ v('invalid gzh_app_id:'.$gzh_app_id); // json_echo('invalid gzh_app_id'); } } $this->wx_log_path = '/var/www/ydy_wechat/storage/logs/easywechat.log'; $this->domain = env('DOMAIN');//'aizhuishu.com'; $this->auth_host = $this->host = env('ONLINE_AUTH_HOST'); if(env('DEVELOP_MODE') == 'online'){ $this->Redis = Redis::connection();// 默认的正式库的redis }elseif(env('DEVELOP_MODE') == 'online_test'){ $this->Redis = Redis::connection();// 默认env的redis }elseif(env('DEVELOP_MODE') == 'test'){ $this->Redis = Redis::connection('test_redis');// 测试库的redis }elseif(env('DEVELOP_MODE') == 'local'){ $this->wx_log_path = '/Applications/MAMP/htdocs/ydy_wechat/storage/logs/easywechat.log'; $this->Redis = Redis::connection('test_redis');// 测试库的redis } // v('$this->Redis');v($this->Redis); // v('develop:'.env('DEVELOP_MODE').' domain:'.$this->domain); $this->WxSign = new WxSign(); $this->oauth_platform_callback_base_url = $this->auth_host.'oauth/';// 第三方授权微信回跳地址 $this->token = env('WECHAT_OP_TOKEN'); if(!empty($this->gzh_app_id)){ // token部分的redis都用正式库的 // 只在授权时刻提供,丢失后需要用户重新授权 $redis_key = '[wechat_op.common.component_refresh_token.'.$this->gzh_app_id.']'; $component_refresh_token = Redis::Get($redis_key); // v('redis_key:'.$redis_key.' component_refresh_token:'.$component_refresh_token); $this->options = [ 'app_id' => $this->gzh_app_id, 'secret' => env('WECHAT_OP_SECRET'), // 仅适用于 单独配置公众号 'token' => env('WECHAT_OP_TOKEN'), // 仅适用于 单独配置公众号 'aes_key' => env('WECHAT_OP_AES_KEY'), // 仅适用于 单独配置公众号 'auth_type' => 'COMPONENT', // COMPONENT 开放平台授权公众号,MANUAL 单独配置公众号 'component_refresh_token' => $component_refresh_token, // 授权回调时获取的 authorizer_refresh_token,仅适用于 开放品台授权公众号 'oauth' => [ 'scopes' => ['snsapi_base'], // 公众号授权用户方式 snsapi_base, snsapi_userinfo 'callback' => '/oauth_callback', ], 'cache' => [ 'driver' => 'redis', // redis, filesystem, laravel 'dir' => storage_path('tmp') // 只有为filesystem时候这个目录才有效 ], ]; // EasyWechat\Foundation\Application 对象 $this->app = WechatOP::app($this->options); $this->param['app'] = $this->app; $this->WechatApi = new WechatInnerApisController($this->param); $this->official_account = $this->WechatApi->get_official_account($this->gzh_app_id); $this->param['official_account'] = $this->official_account; $this->param['WechatApi'] = $this->WechatApi; } $this->set_init_param(); v('post:');v($_POST); } // 初始化post,get变量,兼容两种 public function set_init_param(){ if(empty($_POST)) { $_POST = $_REQUEST; } if(empty($_REQUEST)) { $_REQUEST = $_POST; } if(isset($_POST['_url'])) { unset($_POST['_url']); } if(isset($_REQUEST['_url'])) { unset($_REQUEST['_url']); } } public function redirect_url($response_url){ // v('redirect_url in:'.$response_url); header("Location:".$response_url); exit; } /** * 检查签名和时间戳 * @param unknown_type $request */ public function check_sign_params($request){ $result = array('code'=>1,'msg'=>'','data'=>''); $timestamp = !empty($request->get('timestamp'))?$request->get('timestamp'):''; $sign = !empty($request->get('sign'))?$request->get('sign'):''; v('check_sign_params:$timestamp:'.$timestamp.' $sign:'.$sign); if(empty($timestamp) || empty($sign)){ $result['code'] = 0; $result['msg'] = 'invalid param'; return $result; } $timestamp = $request->get('timestamp'); $sign = $request->get('sign'); $now = microtime(true); $diff = $now - $timestamp; v('timestamp:'.$timestamp.' now:'.$now.' diff:'.$diff); // 时间戳8小时内 if($diff > 28*3600){ $result['code'] = 0; $result['msg'] = 'invalid time'; return $result; } $my_sign = $this->WxSign->get_sign($request->all()); v('check_sign_params sign:'.$sign.' my_sign:'.$my_sign.' info:'.json_encode($request->all())); if($sign != $my_sign){ $result['code'] = 0; $result['msg'] = 'invalid sign'; return $result; } return $result; } }