thinkphp在企业微信里面获取用户ID和用户信息
展开阅读全文

今天帮朋友弄企业微信插件功能,但是有个问题就是,需要获取用户信息,看了一会资料,代码如下:

<?php

namespace addons\loginbg1\controller;

use think\addons\Controller;
use addons\thirdwork\library\Application;

class Index extends Controller {

    protected $app = null;
    private $appId = "wwfc7201d6c5*****";

    public function _initialize() {
        parent::_initialize();
        $config = get_addon_config('thirdwork');
        $this->app = new Application($config);
    }

    public function getAccessToken() {
        $data1 = json_decode(session('AccessToken'));
        if ($data1) {
            if ($data1->expire_time < time()) {
                $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwfc7201d6c583****&corpsecret=yTaX2mF2i3sKpi90P5NJ7QW6P9-*****"; 
                $res = $this->https_request($url); 
                $res = json_decode($res); 
                $access_token = $res->access_token;
                if ($access_token) {
                    $data['expire_time'] = time() + 7000; 
                    $data['access_token'] = $access_token;
                    session('AccessToken', json_encode($data));
                }
            } else {
                $access_token = $data1->access_token;
            }
        } else {
            $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwfc7201d6c5834671&corpsecret=yTaX2mF2i3sKpi90P5NJ7QW6P9-W0giskUW_KEaS7N8";
            $res = $this->https_request($url);
            $res = json_decode($res); 
            $access_token = $res->access_token;
            if ($access_token) {
                $data['expire_time'] = time() + 7000;
                $data['access_token'] = $access_token;
                session('AccessToken', json_encode($data));
            }
        }
        return $access_token;
    }

    public function authUser() {


        if (session('UserId')) {


            return session('UserId'); //判断缓存里是否有UserId,如果有直接返回,没有则获取
        } else {


            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            $redirecturl = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //回调地址

            $redirecturl = urlencode($redirecturl);
            if (input('code', '')) {  //判断code是否获取到,如果以获取则获取userid,否则获取code。
                $accesstoken = $this->getAccessToken(); //调用上面获取access-token的方法
                $code = $_GET['code'];

                $getuser = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" . $accesstoken . "&code=" . $code; //获取userid的url。

                $data = $this->https_request($getuser);
                $data = json_decode($data, true); //将获取到的json格式的数据进行转化。(json_decode()方法不写后面参数true得到的是对象,写了参数true值得到的是数组)

                if ($data['UserId']) {
                    session('UserId', $data['UserId']);
                    return $data['UserId'];
                } else {
                    trigger_error("网页授权失败");
                }
            } else {  //获取code值
                $appid = $this->appId;

                $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appid . "&redirect_uri=" . $redirecturl . "&response_type=code&scope=snsapi_base&state=12#wechat_redirect";


                header('Location:' . $url);
            }
        }
    }

    public function https_request($url, $data = null) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    public function index() {
        $userid = $this->authUser();
        $access_token = $this->getAccessToken();
        $url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=$access_token&userid=$userid";
        $info = $this->https_request($url);
        var_dump($info);
        exit;

        $userinfo = $this->app->wechatwork->getUserInfo();
        var_dump($userinfo);
        exit;
//        exit;
        return $this->view->fetch();
    }

}