1、微信受權使用的是OAuth2.0受權的方式。主要有如下簡略步驟:php
第一步:用戶贊成受權,獲取codehtml
第二步:經過code換取網頁受權access_tokenjson
第三步:拉取用戶信息(需scope爲 snsapi_userinfo)api
2、我這裏直接出代碼了,一共2個文件。數組
//其它文件調用UserInfo.php的時候注意namespace。
use wx\userInfo\UserInfo; include 'UserInfo.php'; $wx = new UserInfo(); $data = $wx->get_user_all();
1配置文件config.php服務器
1 <?php 2 namespace wx\wxConfig; 3 /** 4 * 微信請求相關配置類 5 */ 6 class ConfigTool{ 7 /** 8 * 微信配置參數 9 * @return array 配置參數 10 */ 11 public function Config(){ 12 // appID 13 $config['appid'] = ''; 14 // appSecret 15 $config['appsecret'] = ''; 16 // 微信回調連接地址(本頁) 17 $config['redirect_uri'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 18 // 用戶受權並獲取code的url地址 19 $config['authorize_url'] = 'https://open.weixin.qq.com/connect/oauth2/authorize'; 20 // 獲取openid和access_toke的url地址 21 $config['access_token_url'] = 'https://api.weixin.qq.com/sns/oauth2/access_token'; 22 // 獲取拉取用戶信息(需scope爲 snsapi_userinfo)的url地址 23 $config['userinfo_url'] = 'https://api.weixin.qq.com/sns/userinfo'; 24 // 本文件夾所在的url路徑 25 $config['self_path'] = 'http://'.dirname($_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); 26 27 return $config; 28 } 29 } 30 ?>
2.獲取用戶信息文件UserInfo.php微信
1 <?php 2 namespace wx\userInfo; 3 use wx\wxConfig\ConfigTool; 4 include 'config.php'; 5 /** 6 * 獲取微信用戶信息 7 * $wx = new UserInfo(); 8 * $data = $wx->get_user_all(); 9 */ 10 class UserInfo{ 11 12 private $weixin_config = array(); 13 public function __construct() { 14 $re = new ConfigTool; 15 $this->weixin_config = $re->Config(); //載入配置文件 16 } 17 /** 18 * 獲取微信用戶信息 19 * @return array 微信用戶信息數組 20 */ 21 public function get_user_all(){ 22 if (!isset($_GET['code'])){//沒有code,去微信接口獲取code碼 23 $callback = $this->weixin_config['redirect_uri'];//服務器返回url,這裏是本頁url 24 $this->get_code($callback); 25 } else {//獲取code後跳轉回來到這裏了 26 $code = $_GET['code']; 27 $data = $this->get_access_token($code);//獲取網頁受權access_token和用戶openid 28 $data_all = $this->get_user_info($data['access_token'],$data['openid']);//獲取微信用戶信息 29 return $data_all; 30 } 31 } 32 33 /** 34 * 一、用戶受權並獲取code 35 * @param string $callback 微信服務器回調連接url 36 */ 37 private function get_code($callback){ 38 $appid = $this->weixin_config['appid']; 39 $scope = 'snsapi_userinfo';//snsapi_base只能獲取access_token和openID,snsapi_userinfo能夠獲取更詳細的用戶資料,好比頭像、暱稱、性別等 40 $state = md5(uniqid(rand(), TRUE));//惟一ID標識符絕對不會重複 41 $url = $this->weixin_config['authorize_url'].'?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect'; 42 header("Location:$url"); 43 } 44 45 /** 46 * 二、使用code換取access_token 47 * @param string 用於換取access_token的code,微信提供 48 * @return array access_token和用戶openid數組 49 */ 50 private function get_access_token($code){ 51 $appid = $this->weixin_config['appid']; 52 $appsecret = $this->weixin_config['appsecret']; 53 $url = $this->weixin_config['access_token_url'].'?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code'; 54 $user = json_decode(file_get_contents($url)); 55 if (isset($user->errcode)) { 56 echo 'error:' . $user->errcode.'<hr>msg :' . $user->errmsg; 57 exit; 58 } 59 $data = json_decode(json_encode($user),true);//返回的json數組轉換成array數組 60 return $data; 61 } 62 63 /** 64 * 三、使用access_token獲取用戶信息 65 * @param string access_token 66 * @param string 用戶的open id 67 * @return array 用戶信息數組 68 */ 69 private function get_user_info($access_token,$openid){ 70 $url = $this->weixin_config['userinfo_url'].'?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; 71 $user = json_decode(file_get_contents($url)); 72 if (isset($user->errcode)) { 73 echo 'error:' . $user->errcode.'<hr>msg :' . $user->errmsg; 74 exit; 75 } 76 $data = json_decode(json_encode($user),true);//返回的json數組轉換成array數組 77 return $data; 78 } 79 80 81 } 82 83 ?>
3、以爲兩個文件多,也能夠用一個文件類封裝。場景不一樣,喜歡哪一個用哪一個。app