<?php
/**
* Description of WxUser
*
* @author xinjun
*/
namespace ControllerWx;
use ControllerHomeHomeBase;
use ModelWxUserModel;
use FrameworkNetRequest as R;
use ModelConstant;
class WxUser extends HomeBase
{
public function __construct()
{
parent::__construct();
}
/**
* 获取当前用户的信息
* @return boolean
*/
public function getUser()
{
$ud = array();
//是否是从微信公众号条跳过来的
if (isset($_POST['openid']) && !empty($_POST['openid'])) {
//查找用户数据库条件为openid,如果找到了,说明已经是当前的会员了直接找到取出给self::$userInfo
$openid = $_POST['openid'];
$userModel = new UserModel();
$ud = $userModel->getOneByOpenid($openid);
if (!empty($ud)) {
return $this->getData($ud);
} else {
//没有找到为新的用户直接保存用户的信息进数据库,然后取出返回
$userData = $this->getUserByOpenid(self::$access_token, $openid);
$data = array();
$data['openid'] = $userData['openid'];
$data['nf_nickname'] = $userData['nickname'];
$data['nf_sex'] = $userData['sex'];
$data['nf_province'] = $userData['province'];
$data['nf_country'] = $userData['country'];
$data['nf_headimgurl'] = $userData['headimgurl'];
$result = $userModel->create($data);
if ($result) {
$ud = $userModel->getOneById($result);
if (!empty($ud)) {
return $this->getData($ud);
} else {
return $this->getError(Constant::GET_USER_ERROR);
}
} else {
return $this->getError(Constant::GET_USER_ERROR);
}
}
} else {
//用户是通过分享过来的
$code = $_POST['code'];
$userData = $this->getUserByCode(self::$appid, self::$secret, $code);
//通过$userData获取当前用户的openid,查找用户表如果找到了用户直接给信息给self::$userInfo
$userModel = new UserModel();
$ud = $userModel->getOneByOpenid($userData['openid']);
if (!empty($ud)) {
return $this->getData($ud);
} else {
$data = array();
$data['openid'] = $userData['openid'];
$data['nf_nickname'] = $userData['nickname'];
$data['nf_sex'] = $userData['sex'];
$data['nf_province'] = $userData['province'];
$data['nf_country'] = $userData['country'];
$data['nf_headimgurl'] = $userData['headimgurl'];
if(!empty($data['openid'])){
$result = $userModel->create($data);
if ($result) {
$userModel = new UserModel();
$ud = $userModel->getOneByOpenid($data['openid']);
return $this->getData($ud);
} else {
return $this->getError(Constant::GET_USER_ERROR);
}
}else{
return $this->getError(Constant::GET_USER_ERROR);
}
}
}
}
/**
* 获取当前用户的信息(分享的)
* @return type
*/
public function getUserByCode($appid, $secret, $code)
{
//通过分享过来的接收前端传的code
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$https = true;
$method = 'get';
$data = null;
$result = $this->request($url, $https, $method, $data);
//获取当前用户的access_token(非基础)和用户的openid
$data = json_decode($result, 1);
//检查数据库是否存在openid为当前用户的数据存在
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $data['access_token'] . "&openid=" . $data['openid'] . "&lang=zh_CN ";
$https = true;
$method = 'get';
$data = null;
$userInfo = $this->request($url, $https, $method, $data);
$userInfo = json_decode($userInfo, 1);
return $userInfo;
}
/**
* 获取当前用户的信息(从公众号里跳转过来的)
* @param type $accessToken
* @param type $openid
* @return type
*/
public function getUserByOpenid($accessToken, $openid)
{
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $accessToken . "&openid=" . $openid . "&lang=zh_CN ";
$https = true;
$method = 'get';
$data = null;
$userInfo = $this->request($url, $https, $method, $data);
$userInfo = json_decode($userInfo, 1);
return $userInfo;
}
}