1、這個文件微信受權使用的是OAuth2.0受權的方式。主要有如下簡略步驟:php
第一步:判斷有沒有code,有code去第三步,沒有code去第二步git
第二步:用戶贊成受權,獲取codegithub
第三步:經過code換取網頁受權access_tokenjson
第四步:使用access_token獲取用戶信息api
https://github.com/jijinduoduo/GetWxUser數組
2、代碼GetWxUser.php服務器
1 <?php 2 /** 3 * 獲取微信用戶信息 4 * @author: Lucky hypo 5 */ 6 class GetWxUser{ 7 private $appid = ''; 8 private $appsecret = ''; 9 /** 10 * 一、獲取微信用戶信息,判斷有沒有code,有使用code換取access_token,沒有去獲取code。 11 * @return array 微信用戶信息數組 12 */ 13 public function get_user_all(){ 14 if (!isset($_GET['code'])){//沒有code,去微信接口獲取code碼 15 $callback = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];//微信服務器回調url,這裏是本頁url 16 $this->get_code($callback); 17 } else {//獲取code後跳轉回來到這裏了 18 $code = $_GET['code']; 19 $data = $this->get_access_token($code);//獲取網頁受權access_token和用戶openid 20 $data_all = $this->get_user_info($data['access_token'],$data['openid']);//獲取微信用戶信息 21 return $data_all; 22 } 23 } 24 /** 25 * 二、用戶受權並獲取code 26 * @param string $callback 微信服務器回調連接url 27 */ 28 private function get_code($callback){ 29 $appid = $this->appid; 30 $scope = 'snsapi_userinfo'; 31 $state = md5(uniqid(rand(), TRUE));//惟一ID標識符絕對不會重複 32 $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect'; 33 header("Location:$url"); 34 } 35 /** 36 * 三、使用code換取access_token 37 * @param string 用於換取access_token的code,微信提供 38 * @return array access_token和用戶openid數組 39 */ 40 private function get_access_token($code){ 41 $appid = $this->appid; 42 $appsecret = $this->appsecret; 43 $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code'; 44 $user = json_decode(file_get_contents($url)); 45 if (isset($user->errcode)) { 46 echo 'error:' . $user->errcode.'<hr>msg :' . $user->errmsg;exit; 47 } 48 $data = json_decode(json_encode($user),true);//返回的json數組轉換成array數組 49 return $data; 50 } 51 /** 52 * 四、使用access_token獲取用戶信息 53 * @param string access_token 54 * @param string 用戶的openid 55 * @return array 用戶信息數組 56 */ 57 private function get_user_info($access_token,$openid){ 58 $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; 59 $user = json_decode(file_get_contents($url)); 60 if (isset($user->errcode)) { 61 echo 'error:' . $user->errcode.'<hr>msg :' . $user->errmsg;exit; 62 } 63 $data = json_decode(json_encode($user),true);//返回的json數組轉換成array數組 64 return $data; 65 } 66 } 67 ?>
不足之處,請留言告知,謝謝!微信