1. 程式人生 > 實用技巧 >網站實現微信掃碼登入 php

網站實現微信掃碼登入 php

微信開放平臺賬號一個,必須是商戶,不然你也開不了

1.在開放平臺建立應用,並設定回撥地址(域名即可)

2.生成二維碼,前端程式碼,使用者掃碼後會給你的回撥地址傳送code

   <span id="login_container"></span>
    <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
    <script> var obj = new WxLogin({
        id: "login_container
", appid: "appid",你的appid scope: "snsapi_login", redirect_uri: encodeURIComponent("你的回撥地址(域名必須和你在開放平臺的一致)"), state: Math.ceil(Math.random()*1000), style: "black", href: ""}); </script>

3.根據code獲取access_token 和 openid ,再用他們獲取使用者資訊 程式碼如下

 public function
login(){ $code = input('code'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= 你的appid &secret= 你的AppSecret &code=".$code."&grant_type=authorization_code"; $access_token = $this->curl_get($url); if (!$access_token || isset($access_token
['errcode'])){ return json(['code'=>0,'message'=>'登入失敗']); } $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token['access_token']."&openid=".$access_token['openid']; $user = $this->curl_get($url); if (!$user){ return json(['code'=>0,'message'=>'登入失敗']); } var_dump($user); // ["openid"]=> string(28) "" // ["nickname"]=> string(1) "" 普通使用者暱稱 // ["sex"]=> int(1) 普通使用者性別,1為男性,2為女性 // ["language"]=> string(5) "zh_CN" // ["city"]=> string(0) "" 普通使用者個人資料填寫的城市 // ["province"]=> string(0) "" 普通使用者個人資料填寫的省份 // ["country"]=> string(2) "CN" 國家,如中國為CN // ["headimgurl"]=> string(128) "" 頭像 // ["privilege"]=> array(0) { } 使用者特權資訊,json陣列,如微信沃卡使用者為(chinaunicom) // ["unionid"]=> string(28) "" 使用者統一標識。針對一個微信開放平臺帳號下的應用,同一使用者的unionid是唯一的。 } protected function curl_get($url){ $header = array( 'Accept: application/json', ); $curl = curl_init(); //設定抓取的url curl_setopt($curl, CURLOPT_URL, $url); //設定標頭檔案的資訊作為資料流輸出 curl_setopt($curl, CURLOPT_HEADER, 0); // 超時設定,以秒為單位 curl_setopt($curl, CURLOPT_TIMEOUT, 1); // 超時設定,以毫秒為單位 // curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500); // 設定請求頭 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //設定獲取的資訊以檔案流的形式返回,而不是直接輸出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); //執行命令 $data = curl_exec($curl); // 顯示錯誤資訊 if (curl_error($curl)) { return false; } else { // 列印返回的內容 return json_decode($data,true); } }

參考文章 :https://www.jianshu.com/p/070586d73eba