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);
相關文章
相關標籤/搜索