IndexController.php 5.7 KB
<?php
// +----------------------------------------------------------------------
// | bronet [ 以客户为中心 以奋斗者为本 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2017 http://www.bronet.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Powerless < wzxaini9@gmail.com>
// +----------------------------------------------------------------------
namespace app\user\controller;

use app\user\model\UserModel;
use cmf\controller\HomeBaseController;
use think\Db;
use EasyWeChat\Foundation\Application;
use think\Log;

class IndexController extends HomeBaseController
{
    public function callback(){
        $appId=config('wechat_config.app_id');
        $secret=config('wechat_config.secret');
        $config = [
            'app_id'  => $appId,
            'secret'  => $secret,
        ];

        $app = new Application($config);
        $oauth = $app->oauth;
        $user = $oauth->user();
        $wechat_user = $user->toArray();
        //todo $wechat_user与数据库对比
        if(isset($wechat_user['id'])){
            $openid=$wechat_user['id'];
            $findThirdPartyUser = Db::name("third_party_user")
                ->where('openid', $openid)
                ->where('app_id', $appId)
                ->find();
            $currentTime = time();
            $ip          = $this->request->ip(0, true);
            if ($findThirdPartyUser) {
                $token = cmf_generate_user_token($findThirdPartyUser['user_id'], 'public');
                $userData = [
                    'last_login_ip'   => $ip,
                    'last_login_time' => $currentTime,
                    'login_times'     => ['exp', 'login_times+1']
                ];
                $row1=Db::name("third_party_user")
                    ->where('openid', $openid)
                    ->where('app_id', $appId)
                    ->update($userData);
                $userInfo=Db::name("third_party_user")
                    ->where('openid', $openid)
                    ->where('app_id', $appId)->find();
                unset($userData['login_times']);
                $row2=Db::name("user")
                    ->where('id', $userInfo['user_id'])
                    ->update($userData);
                if($row1!==false&&$row2!==false){
                    $userModel=new UserModel();
                    $user=$userModel->getUserInfo(['user_id'=>$userInfo['user_id'],'app_id'=>$appId]);
                    cmf_update_current_user($user);
                    session('token',$token);
                    Db::commit();
                }else{
                    Db::rollback();
                }
            }else{
                Db::startTrans();
                $userId = Db::name("user")->insertGetId([
                    'create_time'     => $currentTime,
                    'user_status'     => 1,
                    'user_type'       => 2,
                    'sex'             => $wechat_user['original']['sex'],
                    'user_nickname'   => $wechat_user['nickname'],
                    'avatar'          => $wechat_user['avatar'],
                    'last_login_ip'   => $ip,
                    'last_login_time' => $currentTime,
                ]);

                $row=Db::name("third_party_user")->insert([
                    'openid'          => $openid,
                    'user_id'         => $userId,
                    'third_party'     => 'public',
                    'nickname'        => $wechat_user['nickname'],
                    'app_id'          => $appId,
                    'last_login_ip'   => $ip,
                    'union_id'        => '',
                    'last_login_time' => $currentTime,
                    'create_time'     => $currentTime,
                    'login_times'     => 1,
                    'status'          => 1,
                    'more'            => json_encode($wechat_user)
                ]);
                if($userId && $row){
                    $token = cmf_generate_user_token($userId, 'public');
                    $userModel=new UserModel();
                    $user=$userModel->getUserInfo(['user_id'=>$userId,'app_id'=>$appId]);
                    cmf_update_current_user($user);
                    session('token',$token);
                    Db::commit();
                }else{
                    Db::rollback();
                }
            }
            $target_url=session('target_url');
            $targetUrl = empty($target_url) ? '/' : $target_url;
            header('location:'. $targetUrl);
        }else{
            Log::write('获取微信用户数据失败');
            $this->error('获取微信用户数据失败');
        }

    }

    /**
     * 前台用户首页(公开)
     */
    public function index()
    {
        $id   = $this->request->param("id", 0, "intval");
        $userQuery = Db::name("User");
        $user = $userQuery->where('id',$id)->find();
        if (empty($user)) {
            session('user',null);
            $this->error("查无此人!");
        }
        $this->assign($user);
        return $this->fetch(":index");

    }

    /**
     * 前台ajax 判断用户登录状态接口
     */
    function isLogin()
    {
        if (cmf_is_user_login()) {
            $this->success("用户已登录",null,['user'=>cmf_get_current_user()]);
        } else {
            $this->error("此用户未登录!");
        }
    }

    /**
     * 退出登录
    */
    public function logout()
    {
        session("user", null);//只有前台用户退出
        return redirect($this->request->root() . "/");
    }

}