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' . '×tamp='.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);
}
}