剛開始接觸微信的時候一頭霧水,領(lǐng)導(dǎo)想要一個掃碼獲取微信用戶信息的功能,而且是掃的別人的二維碼,我是一陣忙活啊。
經(jīng)過努力和嘗試,終于功夫不負有心人啊,趕緊記錄一下,我用的是thinkphp編寫的。
第一步:就是二維碼的生成
1.首先要確定第一個二維碼,因為既然是掃碼,肯定是要第一個二維碼的,也就是第一人才可以。我將第一個二維碼的唯一值(id)設(shè)置成零,然后開始我的編寫
2.既然是二維碼,我用了phpqrcode二維碼生成插件,二維碼的生成可以在本地編寫,查看效果后再上傳服務(wù)器。
(1)從網(wǎng)上下載下phpqrcode插件包,將它放到thinkphp的文件里,路徑如下:ThinkPHP\Library\Vendor ,截圖如下:
(2)二維碼的生成,在調(diào)用顯示二維碼的控制器的方法中調(diào)用這個插件包,然后設(shè)置下掃描后跳轉(zhuǎn)的URL就好了,代碼如下:
$url ="http://www.baidu.com";
$level=3;
$size=4;
Vendor('phpqrcode.phpqrcode'); //引入插件
$errorCorrectionLevel = intval($level) ;//容錯級別
$matrixPointSize = intval($size);//生成圖片大小
//生成二維碼圖片
$object = new \QRcode();
$path = "Public/ER/1.png"; //本地文件存儲路徑
$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);
這只是實現(xiàn)生成二維碼并且可以進入二維碼指定的網(wǎng)址,真正要實現(xiàn)的目的是掃帶有參數(shù)的二維碼,獲取微信用戶的信息
下面就是怎么實現(xiàn)生成帶有參數(shù)的二維碼
3.(1)要用到微信的網(wǎng)頁授權(quán),就要用到公眾號的幾個參數(shù):1是AppID 2是AppSecret 這是公眾號申請成功后分配下來的
(2)利用這兩個參數(shù),然后再配合獲取access_token的值就可以了
代碼如下(掃描后跳轉(zhuǎn)到getUserInfo方法,并且把唯一鍵值傳過去):
$tid = 0; //傳值的參數(shù)
$level=3;
$size=4;
Vendor('phpqrcode.phpqrcode');
$errorCorrectionLevel = intval($level) ;//容錯級別
$matrixPointSize = intval($size);//生成圖片大小
//生成二維碼圖片
$object = new \QRcode();
$path = "Public/ER/" . $tid . ".png"; //本地文件存儲路徑
$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);
$appid='******'; //公眾號唯一標(biāo)識
$redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid ); //這個是設(shè)置參數(shù)和授權(quán)后重定向的回調(diào)鏈接地址
//snsapi_userinfo彈出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地 snsapi_base ,不彈出授權(quán)頁面,直接跳轉(zhuǎn),只能獲取用戶openid
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appidredirect_uri=$redirect_uriresponse_type=codescope=snsapi_userinfostate=1#wechat_redirect";
下面是寫跳轉(zhuǎn)后的操作
(1)接收傳過來的值
(2)取得openid
(3)根據(jù)全局access_token和openid查詢用戶信息
(4)將信息寫入數(shù)據(jù)庫
獲取openid或者其他的東西,用到下面的方法,可以快速截取到需要的東西
function getJson($url){
$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);
return json_decode($output, true);
}
接下來就是將上面的步驟逐一實現(xiàn),代碼如下:
public function getUserInfo()
{
$appid = "*****"; //公眾號唯一標(biāo)識
$secret = "*****"; //應(yīng)用秘鑰
//$code是回調(diào)的時候地址上帶的 只需要get方式接收就可以了
$code = $_GET["code"];
//獲取傳過來的值
$htjid = $_GET["id"];
//第一步:取得openid
$oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appidsecret=$secretcode=$codegrant_type=authorization_code";
$oauth2 = $this->getJson($oauth2Url);
//第二步:根據(jù)全局access_token和openid查詢用戶信息
$access_token = $oauth2["access_token"];
$openid = $oauth2['openid'];
$get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_tokenopenid=$openidlang=zh_CN";
$userinfo = $this->getJson($get_user_info_url);
//寫入數(shù)據(jù)庫微信用戶
M()->startTrans();//開啟事務(wù)
$n = M("zp_user"); //寫入的表
$openid = $data['openid'] = $userinfo['openid']; //微信用戶openid
$data['sex'] = $userinfo['sex']; //性別
$data['headimgurl'] = $userinfo['headimgurl']; //頭像
$data['province'] = $userinfo['province']; //地區(qū)sheng
$data['city'] = $userinfo['city']; //地區(qū)shi
$data['subscribe_time'] = time(); //時間
$data['qr_scene'] = $htjid; //傳過的值
$data['nickname'] = $userinfo['nickname']; //昵稱
$z = $n->lock(true)->add($data);
if(!$z)
{
M()->rollback();//回滾
$this->error('添加錯誤!');
}else{
M()->commit();//事務(wù)提交
}
}
到此,就可以實現(xiàn)掃描二維碼獲取用戶信息了,并且將用戶信息寫入數(shù)據(jù)庫
這是第一個二維碼,生成后,就可以將id的參數(shù)值換成前面?zhèn)鬟^來的值,也就是掃碼的值 $tid = 0; //傳值的參數(shù)
如果想要自己的二維碼頁面好看的話,比如想要把自己的微信昵稱和二維碼合成一張圖片的話,也是可以實現(xiàn)的,這就要用到圖片的合成了,下次再說吧。
總結(jié)
以上所述是小編給大家介紹的微信公眾號實現(xiàn)掃碼獲取微信用戶信息(網(wǎng)頁授權(quán)),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
您可能感興趣的文章:- 微信公眾號-獲取用戶信息(網(wǎng)頁授權(quán)獲取)實現(xiàn)步驟
- 微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解
- 微信公眾號OAuth2.0網(wǎng)頁授權(quán)問題淺析
- H5微信公眾號授權(quán)的簡單實現(xiàn)步驟