微信获取用户

<?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;
    }
}

  

原文地址:https://www.cnblogs.com/xin-jun/p/7274880.html