微信公衆號實現掃碼獲取微信用戶信息(網頁受權)

剛開始接觸微信的時候一頭霧水,領導想要一個掃碼獲取微信用戶信息的功能,並且是掃的別人的二維碼,我是一陣忙活啊。php

通過努力和嘗試,終於功夫不負有心人啊,趕忙記錄一下,我用的是thinkphp編寫的。做者:悅~ 博客園地址:https://www.cnblogs.com/nuanai/thinkphp

第一步:就是二維碼的生成  做者:悅~   網址:https://www.cnblogs.com/nuanai/數據庫

1.首先要肯定第一個二維碼,由於既然是掃碼,確定是要第一個二維碼的,也就是第一人才能夠。我將第一個二維碼的惟一值(id)設置成零,而後開始個人編寫json

2.既然是二維碼,我用了phpqrcode二維碼生成插件,二維碼的生成能夠在本地編寫,查看效果後再上傳服務器。api

(1)從網上下載下phpqrcode插件包,將它放到thinkphp的文件裏,路徑以下:ThinkPHP\Library\Vendor ,截圖以下:服務器

(2)二維碼的生成,在調用顯示二維碼的控制器的方法中調用這個插件包,而後設置下掃描後跳轉的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);

這只是實現生成二維碼而且能夠進入二維碼指定的網址,真正要實現的目的是掃帶有參數的二維碼,獲取微信用戶的信息app

下面就是怎麼實現生成帶有參數的二維碼    做者:悅~   網址:https://www.cnblogs.com/nuanai/curl

3.(1)要用到微信的網頁受權,就要用到公衆號的幾個參數:1是AppID 2是AppSecret  這是公衆號申請成功後分配下來的this

(2)利用這兩個參數,而後再配合獲取access_token的值就能夠了

代碼以下(掃描後跳轉到getUserInfo方法,而且把惟一鍵值傳過去):

$tid = 0;  //傳值的參數
$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='******';  //公衆號惟一標識
$redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid );  //這個是設置參數和受權後重定向的回調連接地址
//snsapi_userinfo彈出受權頁面,可經過openid拿到暱稱、性別、所在地   snsapi_base ,不彈出受權頁面,直接跳轉,只能獲取用戶openid 
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";  

 

下面是寫跳轉後的操做    做者:悅~   網址:https://www.cnblogs.com/nuanai/

(1)接收傳過來的值

(2)取得openid

(3)根據全局access_token和openid查詢用戶信息  

(4)將信息寫入數據庫

獲取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);
}

 接下來就是將上面的步驟逐一實現,代碼以下:

public function getUserInfo()
{
    $appid = "*****";  //公衆號惟一標識
    $secret = "*****";  //應用祕鑰
		
    //$code是回調的時候地址上帶的 只須要get方式接收就能夠了
    $code = $_GET["code"];  

    //獲取傳過來的值
    $htjid = $_GET["id"];
		
    //第一步:取得openid
    $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    $oauth2 = $this->getJson($oauth2Url);
		  
    //第二步:根據全局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_token&openid=$openid&lang=zh_CN";
    $userinfo = $this->getJson($get_user_info_url);
		
    //寫入數據庫微信用戶
    M()->startTrans();//開啓事務
    $n = M("zp_user"); //寫入的表
		
    $openid = $data['openid'] = $userinfo['openid'];  //微信用戶openid
    $data['sex'] = $userinfo['sex'];  //性別 
    $data['headimgurl'] = $userinfo['headimgurl'];  //頭像
    $data['province'] = $userinfo['province'];  //地區sheng
    $data['city'] = $userinfo['city'];  //地區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();//事務提交
    }

}    

 到此,就能夠實現掃描二維碼獲取用戶信息了,而且將用戶信息寫入數據庫

這是第一個二維碼,生成後,就能夠將id的參數值換成前面傳過來的值,也就是掃碼的值 $tid = 0; //傳值的參數

若是想要本身的二維碼頁面好看的話,好比想要把本身的微信暱稱和二維碼合成一張圖片的話,也是能夠實現的,這就要用到圖片的合成了,下次再說吧。

 做者:悅~   網址:https://www.cnblogs.com/nuanai/

相關文章
相關標籤/搜索