###咱們要獲取企業微信裏用戶信息,首先咱們來看開發者文檔。 ###正如咱們所看到的,咱們須要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);