微信公眾號--獲取使用者列表
之前其實寫過一次微訊號的簡單開發,包括選單自動回覆拉取使用者資訊等簡單的微信公眾號的開發,今天又用到了,然後發現自己還是忘記了,看來記錄下來是真的有必要的。我今天主要是寫了拉取使用者資訊,所以我這比寫的也就是拉取使用者資訊。
這裡使用的還是TP的框架寫的php程式碼進行開發的。
1.對使用的公眾號進行基本配置
程式碼:
//微信驗證
public function checkWechat(){
// $weixin=M("maiclub_weixin");
// $res=$weixin->select();
// foreach($res as $value){
// $token=$value["token"];
// }
define("TOKEN",'erdangjia');
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
$echoStr = $_GET["echostr"];
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
echo $echoStr;
responseMsgs();
return true;
}else{
return false;
}
}
這裡主要注意token一樣還有就是地址就可以
2.獲取token
程式碼:
/****
獲取Token
*****/
function getWeChatToken() {
// $token = S('access_token');
// $weixin=M("maiclub_weixin");
// $data=$weixin->select();
// foreach($data as $value){
// $appid=$value["appid"];
// $appsecret=$value['appsecret'];
//}
$appid="";
$appsecret=" ";
if (empty($token)) {
$res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret);
$res = json_decode($res, true);
$token = $res['access_token'];
// 注意:這裡需要將獲取到的token快取起來(或寫到資料庫中)
// 不能頻繁的訪問https://api.weixin.qq.com/cgi-bin/token,每日有次數限制
// 通過此介面返回的token的有效期目前為2小時。令牌失效後,JS-SDK也就不能用了。
// 因此,這裡將token值快取1小時,比2小時小。快取失效後,再從介面獲取新的token,這樣
// 就可以避免token失效。
// S()是ThinkPhp的快取函式,如果使用的是不ThinkPhp框架,可以使用你的快取函式,或使用資料庫來儲存。
S('access_token', $token, 3000);
}
return $token;
}
這裡要填寫的appid和AppSecret 直接從公眾平臺的基本配置中複製出來就可以,關鍵我這邊是已經寫死了,事實上可以從資料庫中調取,我只是為了自己嘗試的時候方便所以才這麼寫的。
還有一點,我將這一段程式碼寫到了 這邊。我最開始第一次的時候是寫到了config當中,然而寫在這個裡面比較的不合適,後來就改到了function當中。
這邊設定好之後可以再控制器中
public function getWeixinToken(){
echo getWeChatToken();die();
}
利用這兩行程式碼列印測試一下是不是可以大英出token 要是可以的話就是成功獲取token。
3.拉取使用者列表
1)拉取使用者資訊首先要獲取使用者的openid
程式碼:
//獲取使用者openid
function getOpenid(){
define("ACCESS_TOKEN",getWeChatToken());
$url="https://api.weixin.qq.com/cgi-bin/user/get?access_token=".ACCESS_TOKEN;
$res = https_request($url);
$data = json_decode($res,true);
$openid = $data['data']['openid'];
return $openid;
}
這段程式碼我依舊是作為方法寫在了function當中的。
2)獲取使用者列表
程式碼:
//獲取使用者列表
public function getuserLists(){
if(checkLogin()){
$assignArr = array(
"leftWxManager" => 1,//是否選中
"leftgetuserLists" => 1,//基本資訊是否選中
);
$role=I('session.role');
if($role != 0){
echo"<script>alert('您沒有許可權')</script>";
echo "<script>location.href= '../Index/index'</script>";
}else{
// dump(getOpenid());die();
$userModel=M('maiclub_user');
define("ACCESS_TOKEN",getWeChatToken());
foreach (getOpenid() as $val){
if($userModel->where("openid = '{$val}'")->find()){
//echo 1111;
}else{
$urlInfo="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".ACCESS_TOKEN."&openid=".$val."&lang=zh_CN";
$resInfo = https_request($urlInfo,true);
$userLists=json_decode($resInfo,true);
$userModel->add($userLists);
//dump($userLists);
}
}
//die();
$records=I('cookie.records');
$search=I('post.search');
if($records == ''){
$records =10;
}
if($search==''){
$count = $userModel->count();// 查詢滿足要求的總記錄數
$Page = new \Think\Page($count,$records);// 例項化分頁類 傳入總記錄數和每頁顯示的記錄數(10)
$show = $Page->show();// 分頁顯示輸出
$userModel->create();
$data3=$userModel->limit($Page->firstRow.','.$Page->listRows)->select();
}else{
$data3=$userModel->where("nickname like '%{$search}%' || city like '%{$search}%' || province like '%{$search}%' || openid like '%{$search}%'")->select();
}
$this->assign('userWx',$data3);
$this->assign('num',$Page->listRows);
$this->assign('count',$count);
$this->assign('page',$show);// 賦值分頁輸出
$this->assign($assignArr);
$this->display();
}
}
}
這裡就是獲取使用者列表同時還有個入庫的過程,資料庫中欄位只要寫了就可以成功入庫,如果想要知道他具體能獲取到哪些欄位,欄位分別是什麼意思,一個可以列印程式碼中的$userLists(必須沒有入庫之前列印,也就是說,如果你入庫一次了,第二次重新整理列印只會有新關注的人,如果這段時間沒有新的關注這裡就會顯示NULL),或者直接在微信公眾平臺的開發者手冊中
這個裡面也詳細的寫了每個欄位的意思和有哪些欄位。
以上應該就是拉取公眾號關注的使用者的全部內容。