thinkphp后台获取微信小程序用户信息
thinkphp后台获取微信小程序用户信息
发布于:

thinkphp后台获取微信小程序用户信息

微信小程序登录:

public function wx_login() {
    $obtain_token = new \app\api\controller\Token();
	$code = input('code');
	$encryptedData = input('encryptedData');  
    $iv = input('iv');
    $rawData = input('rawData');
    $signature = input('signature');
    
	$appId = config_group('web_wx_gzh_config')['appId'];
	$appSecret = config_group('web_wx_gzh_config')['appSecret'];
	$url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appId&secret=$appSecret&js_code=$code&grant_type=authorization_code";
	$res = $this->sendRequest($url);
	$session_key = $res['session_key'];  
    // 数字签名校验  
    if($signature != sha1($rawData.$session_key)){
        return json(100,'数字签名校验失败!');
    } 
	$pc = new \app\api\controller\Wxbizdatacrypt($appId,$session_key);
    $errCode = $pc->decryptData($encryptedData,$iv,$wx_data);
    /**--------------测试开始---------*/
    // $user_info['openId'] = 'oj2LN4jkh0MbTkFKUAoEReWGs7fw';
    // $user_info['nickName'] = '时光乱了谁的心';
    // $user_info['avatarUrl'] = 'https://wx.qlogo.cn/mmopen/vi_32/Bibqia5n05eDHeibESH9Yg3MqjxvEch9BUOEgcEMaFFjlnODTknrhZntC1UQSE2HCmWxZZqaoj9BTbO47UJSA8BNg/132';
    // $errCode =0;
    /**--------------测试结束---------*/
    if ($errCode == 0) {
        //解密成功
        $user_info=json_decode($wx_data,true);
        $refer_id = input('refer_id');
        
		//验证用户是否存在
		$user = Db::name('user')->where('openid', $user_info['openId'])->find();
		if (!$user) {
			$data = [
				'openid' => $user_info['openId']
				, 'user_name' => $user_info['nickName']
				, 'headimgurl' => $user_info['avatarUrl']
				, 'token' => $obtain_token->settoken()
				, 'refer_id' => $refer_id
				// , 'unionid' => $res['unionid']
				, 'time_out' => time() + 604800
				, 'create_time' => time()
				, 'update_time' => time(),
			];
			try {
				Db::name('user')->insert($data);
				//获取用户信息
				$result = Db::name('user')->where('openid', $user_info['openId'])->field('password',true)->find();
				/**-------------- 用户登录记录 --------------*/
				$user_log = [
					'uid' => $result['id']
					,'create_time' => time()
				];
				Db::name('user_log')->insert($user_log);
				return json(200,'注册成功!',$result);
			} catch (Exception $e) {
				return json(100,'注册失败,请刷新重试!');
			}
		}else{
			$data = [
				'user_name' => $user_info['nickName']
				, 'headimgurl' => $user_info['avatarUrl']
				, 'token' => $obtain_token->settoken()
				, 'time_out' => time() + 604800
				, 'update_time' => time(),
			];
			try {
				Db::name('user')->where('id',$user['id'])->update($data);
				//获取用户信息
				$result = Db::name('user')->where('openid', $user_info['openId'])->field('password',true)->find();
				$result['grade_type'] = Db::name('grade')->where('id',$result['grade_id'])->value('name');
				$result['vip_end_time'] = date('Y-m-d H:i:s',$result['vip_end_time']);
				$result['off'] = Db::name('agent')->where('uid',$result['id'])->count();
				/**-------------- 用户登录记录 --------------*/
				$user_log = [
					'uid' => $result['id']
					,'create_time' => time()
				];
				Db::name('user_log')->insert($user_log);
				return json(200,'登录成功!',$result);
			} catch (Exception $e) {
				return json(100,'登录失败,请刷新重试!');
			}
		}

    } else {
            return json(100,'解密失败!');
    }
}

APP端登录:

/**
 * 用户app端登录
 */
public function app_login() {
    $obtain_token = new \app\api\controller\Token();
    $openId = input('openid');
    $username = input('username');
    $avatarUrl = input('avatarUrl');
    $unionid = input('unionid');
    $refer_id = input('refer_id');
    //验证用户是否存在
    $user = Db::name('user')->where('openid', $openId)->find();
    if (!$user) {
        $data = [
            'openid' => $openId
            , 'user_name' => $username
            , 'headimgurl' => $avatarUrl
            , 'token' => $obtain_token->settoken()
            , 'refer_id' => $refer_id
            , 'unionid' => $unionid
            , 'time_out' => time() + 604800
            , 'create_time' => time()
            , 'update_time' => time()
        ];
        try {
            Db::name('user')->insert($data);
            //获取用户信息
            $result = Db::name('user')->where('openid', $openId)->field('password',true)->find();
            /**-------------- 用户登录记录 --------------*/
            $user_log = [
                'uid' => $result['id']
                ,'create_time' => time()
            ];
            Db::name('user_log')->insert($user_log);
            return json(200,'注册成功!',$result);
        } catch (Exception $e) {
            return json(100,'注册失败,请刷新重试!');
        }
    }else{
        $data = [
            'user_name' => $username
            , 'headimgurl' => $avatarUrl
            , 'token' => $obtain_token->settoken()
            , 'time_out' => time() + 604800
            , 'update_time' => time(),
        ];
        try {
            Db::name('user')->where('id',$user['id'])->update($data);
            //获取用户信息
            $result = Db::name('user')->where('openid', $openId)->field('password',true)->find();
            $result['grade_type'] = Db::name('grade')->where('id',$result['grade_id'])->value('name');
            $result['vip_end_time'] = date('Y-m-d H:i:s',$result['vip_end_time']);
            $result['off'] = Db::name('agent')->where('uid',$result['id'])->count();
            /**-------------- 用户登录记录 --------------*/
            $user_log = [
                'uid' => $result['id']
                ,'create_time' => time()
            ];
            Db::name('user_log')->insert($user_log);
            return json(200,'登录成功!',$result);
        } catch (Exception $e) {
            return json(100,'登录失败,请刷新重试!');
        }
    }

}

发送请求

public function sendRequest($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);
}


阅读 0

分类

    热门排行