HEX
Server: Apache/2.4.6 (CentOS) PHP/5.6.39
System: Linux izj6c6ukj0hyugxsgmuxz3z 3.10.0-514.6.2.el7.x86_64 #1 SMP Thu Feb 23 03:04:39 UTC 2017 x86_64
User: root (0)
PHP: 5.6.39
Disabled: NONE
Upload Files
File: /web/data/weixin.tbbbearing.com/App/Home/Controller/BaseController.class.php
<?php
/**
 * Created by PhpStorm.
 * User: 18613127572
 * Date: 2018/5/29
 * Time: 14:20
 */

namespace Home\Controller;


use Think\Cache\Driver\File;
use Think\Com\WechatAuth;
use Think\Controller;

class BaseController extends Controller
{
    public function _initialize()
    {
        $this->init_config();


        // 系统常量网站网址
        defined('SITE_URL')   or define('SITE_URL',     C('GLOBAL_CONFIG.site_url'));
    }
    protected function init_config(){
        //加载后台配置信息,并且加载到全局配置文件里面
        $file = new File();
        $content = $file->get('global.config.php');
        if(!$content){
            $configs = M('config')->select();
            $tmp = array();
            foreach((array)$configs as $k=>$v) {
                if(in_array($v['field_key'],array('WX_applySupplier_cate','WX_applySupplier_model','WX_applySupplier_size'))){
                    $tmp[$v['field_key']] = array_filter(explode("\r\n",$v['field_value']));
                }else{
                    $tmp[$v['field_key']] = $v['field_value'];
                }
            }
            //货币
            //$default_currency = M('currency')->where('is_default=1')->find();
//            $tmp['SYMBOL'] = $default_currency['symbol'];
            $tmp['SYMBOL'] = '¥';
            $file->set('global.config.php',$tmp);
            $content = $file->get('global.config.php');
        }

        //添加到全局配置里面
        C('GLOBAL_CONFIG',$content);
    }


    /**
     * 表单提交Token验证
     */
    protected function check_token(){
        $checkModel = M('');
        // 手动进行令牌验证
        if (!$checkModel->autoCheckToken($_POST)) {
            // 令牌验证错误
            $this->error('令牌验证失败,请刷新页面');
        }
    }



    /**
     * 检测用户是否授权。并且获取用户的基本信息
     */
    public function check_auth()
    {
        $this->init_config();
        if(session('weixin_auth') && session('member_info')){
            $this->assign('weixin_userinfo',session('weixin_userinfo'));
            $this->assign('member_info',session('member_info'));
            return true;
        }
        //检测用户端。 如果 是非微信端。则跳转至授权页面
        $domain = get_domain();
        $user_agent = $_SERVER['HTTP_USER_AGENT'];

        if (strpos($user_agent, 'MicroMessenger') === false) {
            redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid='.C('GLOBAL_CONFIG.WX_AppID').'&redirect_uri='.urlencode($domain).$_SERVER['REQUEST_URI'].'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirec');
            exit;
        }
        //获取 access_token
        $code = I('get.code');
        $info = curl_post('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.C('GLOBAL_CONFIG.WX_AppID').'&secret='.C('GLOBAL_CONFIG.WX_AppSecret').'&code='.$code.'&grant_type=authorization_code');
        $info = json_decode($info,true);
        if($info['errcode']!=0){
            redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid='.C('GLOBAL_CONFIG.WX_AppID').'&redirect_uri='.urlencode($domain).$_SERVER['REQUEST_URI'].'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirec');
            exit;
        }

        session('weixin_token_info',$info);

        //获取用户信息
        $user = curl_post('https://api.weixin.qq.com/sns/userinfo?access_token='.$info['access_token'].'&openid='.C('GLOBAL_CONFIG.WX_AppID').'&lang=zh_CN');

        $user = json_decode($user,true);
        //如果code错误。则重定向到授权页面重新授权。
        session('weixin_auth',1);
        session('weixin_userinfo',$user);
        $this->assign('weixin_userinfo',$user);

        //记录用户信息,
        $member = M('member')->where('openid="'.$user['openid'].'"')->find();
        if($member){
            M('member')->where('openid="'.$user['openid'].'"')->save(array(
                'sex'               =>  $user['sex'],
                'nickname'               =>  $user['nickname'],
                'openid'               =>  $user['openid'],
                'country'               =>  $user['country'],
                'province'               =>  $user['province'],
                'city'               =>  $user['city'],
                'headimgurl'               =>  $user['headimgurl'],

                'last_login_time'   =>  C('TIME'),
                'last_login_ip'     =>  get_client_ip(),
                'login_times'       =>  (int)$member['login_times'] +1
            ));
        }else{
            $member_data = array(
                'sex'               =>  $user['sex'],
                'nickname'               =>  $user['nickname'],
                'openid'               =>  $user['openid'],
                'country'               =>  $user['country'],
                'province'               =>  $user['province'],
                'city'               =>  $user['city'],
                'headimgurl'               =>  $user['headimgurl'],
                'reg_time'               =>  C('TIME'),
                'reg_ip'               =>  get_client_ip(),

                'last_login_time'   =>  C('TIME'),
                'last_login_ip'     =>  get_client_ip(),
                'login_times'       =>  1
            );
            M('member')->add($member_data);
            $member_id = M('member')->getLastInsID();
            $member_data['member_id'] = $member_id;
            $member = $member_data;
        }
        session('member_info',$member);
        return true;
    }

    //获取 jsapi_sdk
    public function get_jsapi_ticket()
    {
        if(session('jsapi_sdk')){
            $this->assign('jsapi_sdk',session('jsapi_sdk'));
            return ;
        }
        $auth = new WechatAuth(C('GLOBAL_CONFIG.WX_AppID'),C('GLOBAL_CONFIG.WX_AppSecret'),session('weixin_token_info.access_token'));
        $token = $auth->getAccessToken();

        //获取jsapi_ticket
        $js_ticket = curl_post('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$token['access_token'].'&type=jsapi');
        $js_ticket = json_decode($js_ticket,true);
        $data = array(
            'noncestr'  =>  'tbbbearing2016',
            'jsapi_ticket'  =>  $js_ticket['ticket'],
            'timestamp' =>  C('TIME'),
            'url'   =>  get_domain().$_SERVER['REQUEST_URI']
        );

        $signature=sha1('jsapi_ticket=' . $js_ticket['ticket'] . '&noncestr=tbbbearing2016' . '&timestamp='.C('TIME') . '&url=' . get_domain().$_SERVER['REQUEST_URI']);
        $jsapi_sdk = array(
            'nonceStr'  =>  'tbbbearing2016',
            'signature' =>  $signature,
            'timestamp' =>  C('TIME')
        );
        session('jsapi_sdk',$jsapi_sdk);
        $this->assign('jsapi_sdk',$jsapi_sdk);
    }
}