微信開放平台賬號一個,必須是商戶,不然你也開不了
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