thinkphp开发根据企业号开发者文档获取企业微信用户信息

###咱们要获取企业微信里用户信息,首先咱们来看开发者文档。 输入图片说明 ###正如咱们所看到的,咱们须要access_token和userid两个参数,接下来咱们就要找到如何去获取这两个参数。 输入图片说明 ###下面咱们能够根据微信企业号已知的两个参数corpid(一个企业微信号只有一个,不可变)和corpsecret(每一个应用有一个本身的,可变)获取到access_token。 #获取AccessTokenjson

private $appId="wxcf....."; //微信企业号的appid

    public function getAccessToken() { //获取AccessToken的方法

    $data = json_decode(file_get_contents("AccessToken.json"));//获取存在AccessToken.json
    //$access_token=$data->access_token;

    if ($data->expire_time < time()) { //若是AccessToken过时则从新获取AccessToken
        // $config = C('WX_CONFIG');
        $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wxcf.....&corpsecret=2ASy1p9hBT_AGhaSeJEHMbXiXY........";//获取AccessToken的url及参数。

         $res =$this->https_request($url);//调用https请求方法
         $res = json_decode($res); //把$res设置为对象
         $access_token = $res->access_token; //获取结果集中的access_token
      if ($access_token) {
        $data->expire_time = time() + 7000; //上一次获取access_token的时间加上两小时,access_token的有效时间为两小时,超过两小时则从新获取。也能够每次使用时都从新获取,可是有获取次数限制。
        $data->access_token = $access_token;
        $fp = fopen("AccessToken.json", "w"); //打开AccessToken.json文件,“W”表示写入(Write)
        fwrite($fp, json_encode($data));//获取到的结果写入
        fclose($fp);//关闭文件
      }
    } else {
      $access_token = $data->access_token; //未过时状况下直接读取文件里的access_token
    }
    return $access_token;
  }

###access_token的有效时间是7200s,这里咱们作一个存储,避免每次使用都去获取。 ###咱们已经获得了access_token,如今就要获得userid。 输入图片说明 输入图片说明 ###在获取userid以前咱们还要获取到code,才能把获得userid。在获取code时候咱们要注意的两个参数就是CORPID(这个是咱们在上面提到的一个微信号只有惟一的一个标识)和REDIRECT_URI(回调地址,就是当咱们获取到code时所跳转的地址)。 #获取useridapi

//网页受权获取用户userid
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($_GET['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); 调用https_request方法请求获得userid。

$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);

}

}

}

###上面getAccessToken()和 authUser()方法都调用了一个方法那就是https_request();数组

/https请求(支持GET和POST)
    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;
    }

###如今我已经获得access_token和userid,这时咱们就能够根据第一个图中的url获取用户信息啦。缓存

public function getinfo(){
	

 //获取用户信息
	$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);
相关文章
相关标签/搜索