php实现微信网站获取用户信息的功能

php实现微信网站获取用户信息的功能,服务号获取信息经测试没得问题,订阅号这个未测试,希望测试过了的朋友能够回复指导一下。

<?php
use think\Controller;
use think\Db;

/**
* 作者 http://www.5atl.com
*
*/
class Weilogin extends Controller
{

    /**
     * 参考资料详见 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
     */
    
    /**
     * 订阅号
     */
    // private $appid = 'wx149978cf463*****e';
    
    // private $secret = '33f0d0314477c77fdd8d85***f';
    
    /**
     * 服务号
     */
    private $appid = 'wx9916a5a3d3e*****c';

    private $secret = 'e6d756b57d54d27cc03****17e63';

    private $token = '';

    private $openid = '';

    private $reflash = '';

    /**
     * 授权接口
     *
     * @param unknown $appid            
     * @param unknown $jumpto            
     */
    public function index()
    {
        $weichatflat = true;'http://***********'; // 放获取微信信息的跳转链接
        $bind = input('bind'); // 用作绑定还是登录
        $url = '';
        
        if ($weichatflat == true) { // 服务号使用
            $jumpto = 'http://**********/weilogin/getinfo?bind=' . $bind;
            $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appid . '&redirect_uri=' . $jumpto . '&response_type=code&scope=snsapi_userinfo&state=' . $bind . '#wechat_redirect';
        } else { // 订阅号服务号都可以使用
            $jumpto = 'http://**********/weilogin/getopenid?bind=' . $bind;
            $url = $weichatflat . '/get-weixin-code.html?appid=' . $this->appid . '&redirect_uri=' . $jumpto . '&response_type=code&scope=snsapi_base&state=' . $bind . '#wechat_redirect';
        }
        
        return redirect($url);
    }

    /**
     * 获取微信id
     */
    public function getOpenid()
    {
        $bind = input('bind'); // 用作绑定还是登录
        
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appid . '&secret=' . $this->secret . '&code=' . input('code') . '&grant_type=authorization_code';
        
        $json = file_get_contents($url);
        
        $json = json_decode($json, true);
        
        return $this->bindUserBase($json, $bind);
    }

    /**
     * 订阅号登录或绑定
     * @param unknown json带的值openid
     * @param unknown 绑定还是登录
     * @return \think\response\Redirect
     */
    public function bindUserBase($json, $bind)
    {
        if ($bind == 0) {
            $hasUser = Db::name('**************')->where('wxid', $json['openid'])->find();
            session('oa_cid', $hasUser['cid']); // 公司id
            session('oa_uid', $hasUser['mid']); // 用户ID
            session('oa_username', $hasUser['username']); // 用户名
            session('oa_portrait', $hasUser['face']); // 用户头像
            session('oa_pmid', $hasUser['pmid']); // 上级id
            return redirect(url('index/index'));
        } else {
            $mid = session('oa_uid');
            $param['wxid'] = $json['openid'];
            Db::name('************')->save($param, [
                'mid' => $mid
            ]);
            $this->success('绑定微信成功', url('index/index'));
        }
    }

    /**
     * 根据公众号appid获取用户的基本信息
     *
     * @param unknown $appid            
     * @return mixed
     */
    public function getInfo()
    {
        $bind = input('bind'); // 用作绑定还是登录
                               
        // 1. 拿到token
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appid . '&secret=' . $this->secret . '&code=' . input('code') . '&grant_type=authorization_code';
        $reback = file_get_contents($url);
        $json = json_decode($reback, true);
        
        $this->token = $json['access_token'];
        $this->openid = $json['openid'];
        $this->reflash = $json['refresh_token'];
        
        // 2. token是否过期
        // $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' . $this->token . '&openid=' . $this->openid;
        // $reback = file_get_contents($url);
        // $json = json_decode($reback, true);
        
        // 3. token过期后重新拿刷新,跟步骤1一样的结果
        // if (array_key_exists('errcode', $json) && $json['errcode'] == 40001) {
        // $url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $this->appid . '&grant_type=refresh_token&refresh_token=' . $this->reflash;
        // $reback = file_get_contents($url);
        // $json = json_decode($reback, true);
        
        // // 新的token和openid
        // $this->token = $json['access_token'];
        // $this->openid = $json['openid'];
        // $this->reflash = $json['refresh_token'];
        // }
        
        // 4. 拿详细信息了
        $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $this->token . '&openid=' . $this->openid . '&lang=zh_CN';
        $reback = file_get_contents($url);
        $json = json_decode($reback, true);
        if (array_key_exists('errcode', $json)) {
            $this->error($reback . '<br/>token=' . $this->token . '<br/>openid=' . $this->openid, null, null, 10);
        }
        
        // 5.绑定信息获登录
        return $this->bindUserInfo($json, $reback, $bind);
    }

    /**
     * 服务号登录还是绑定
     * @param unknown $json openid,
     * @param unknown $reback
     * @param unknown $bind
     * @return \think\response\Redirect
     */
    public function bindUserInfo($json, $reback, $bind)
    {
        if ($bind == 0) {
            $hasUser = Db::name('********')->where('wxid', $json['openid'])->find();
            
            if ($hasUser == null) {
                $this->error('对不起,您的账号还未绑定微信,请使用OA账号的鞥路', url('login/index'));
            }
            
            session('oa_cid', $hasUser['cid']); // 公司id
            session('oa_uid', $hasUser['mid']); // 用户ID
            session('oa_username', $hasUser['username']); // 用户名
            session('oa_portrait', $hasUser['face']); // 用户头像
            session('oa_pmid', $hasUser['pmid']); // 上级id
            return redirect(url('index/index'));
        } else {
            $mid = session('oa_uid');
            $param['face'] = $json['headimgurl'];
            $param['wxid'] = $json['openid'];
            $param['wxinfo'] = $reback;
            Db::name('********')->where('mid', $mid)->update($param);
            $this->success('绑定微信成功', url('index/index'));
        }
    }
}
?>

  

posted @ 2017-03-24 09:14  板砖博客  阅读(255)  评论(0编辑  收藏  举报