1. 程式人生 > >php微信公眾號開發,獲取使用者微信個人資訊;

php微信公眾號開發,獲取使用者微信個人資訊;

        很多開發者在開發微信公眾號的時候,都需要獲取使用者的頭像,如果是個人的微信賬號,需要申請“公眾平臺測試賬號”來獲取微信公眾號所有介面許可權;

        首先要獲取微信傳送過來的access_token,然後根據openid和access_token,來獲取微信伺服器傳送過來json格式的使用者訊息,最後用josn_decode來轉化一下就能獲取到使用者的詳細訊息了;

        在寫程式碼之前可以先測試一下介面操作如下圖:

首先進入微信公眾平臺,如下圖所示:


點選開發者工具,然後再點選線上介面除錯,如下圖所示,進入介面選擇介面


點選後進入下圖頁面在介面型別中選擇:使用者管理,在介面列表中選擇:獲取使用者節本資訊介面/user/info;


然後檢視微信開發文件,獲取access_token 要用到appid和appsecret如下圖


appsecret點選啟用後獲取,然後在瀏覽器網址中輸入:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret" 網址,其中$appid就是上圖中的appid字串,$appsecret就是你的開發者密碼,用字串替換掉兩個變數後(注意去掉引號)點選enter鍵就能獲取微信伺服器傳送過來的access_token 和expires_in兩個資料,將獲取到的access_token字串複製到介面除錯頁面,openid是測試賬號關注平臺後唯一的id是加密過的,獲取方法見前面文章,或者百度也可以,將兩個引數輸入到介面頁面中對應的輸入框內(輸入完成後會顯示綠色的通過驗證字樣),然後點選檢測問題即可;

獲取到的資訊如下圖:


這說明你成功獲取到了,下面我們上程式碼來獲取access_token 和個人資訊;

public function getaccss_token(){
		$table = 'Access_token';
		$useraccess_token = Db::table('Access_token')->select();
		$appid = "你的appid";
		$appsecret = "你的appsecret";
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
		//判斷是不是第一次獲取access_token		
		if(!count($useraccess_token)){			
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			$output = curl_exec($ch);
			curl_close($ch);
			$jsoninfo = json_decode($output, true);
			$access_token = $jsoninfo["access_token"];			
			$data=['access_token'=>$access_token,'expires_time'=>($jsoninfo['expires_in']+time()-200)];
			Db::table($table)->insert($data);
			return $access_token;
	}else if($useraccess_token[0]['expires_time']<time()){//判斷是否過期
		
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			$output = curl_exec($ch);
			curl_close($ch);
			$jsoninfo = json_decode($output, true);//轉換格式
			$access_token = $jsoninfo["access_token"];			
			$data=['access_token'=>$access_token,'expires_time'=>($jsoninfo['expires_in']+time()-200)];
			Db::table($table)->where('expires_time',$useraccess_token[0]['expires_time'])->update($data);//更新資料庫;
			return $access_token;
	}else{	
		$access_token = $useraccess_token[0]['access_token'];
		return $access_token;
		
	}
	}

通過curl函式來截獲微信傳送過來的訊息,由於獲取到的access_token的有效時間只有7200s也就是兩個小時,所以要每次使用者對公眾號進項操作就要檢測一下是不是過期了,如果過期了就要重新獲取,如上圖的幾個if判斷就是來判斷的,我是將access_token和時間都存到資料庫了,這樣每次就可以拿出來檢測,當然你也可以從快取呼叫或者放到檔案裡從檔案裡呼叫;

獲取到access_token後,再通過access_token和openid來獲取使用者個人資訊如下圖函式:

public function userinfo($openid){
		$access_token = $this->getaccss_token();
		//獲取使用者資訊地址		
		$urlid = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
		$curl = curl_init(); // 啟動一個CURL會話
		curl_setopt($curl, CURLOPT_URL, $urlid);
		curl_setopt($curl, CURLOPT_HEADER, 0);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
		//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 從證書中檢查SSL加密演算法是否存在
		$tmpInfo = curl_exec($curl);     //返回api的json物件
		//關閉URL請求
		curl_close($curl);
                $userinfo = json_decode($tmpInfo,true);			
		return $userinfo;
	}

也是一樣的通過curl函式相關操作來截獲資訊,轉換格式就可以了,這個最後的userinfo就是使用者的個人資訊陣列了,你只需要呼叫就可以了;

以上就是通過access_token來獲取使用者個人資訊的操作~!