daneas

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\'));
        }
    }
}
?>

  

分类:

技术点:

相关文章:

  • 2021-04-08
  • 2021-08-29
  • 2021-07-10
  • 2021-06-02
  • 2021-11-21
  • 2021-07-11
  • 2021-11-21
猜你喜欢
  • 2022-01-21
  • 2021-11-24
  • 2021-09-03
  • 2021-05-07
  • 2021-12-17
相关资源
相似解决方案