PHP微信公衆平臺oauth2.0網頁受權登陸類的封裝demo

1、微信受權使用的是OAuth2.0受權的方式。主要有如下簡略步驟:php

  第一步:用戶贊成受權,獲取codehtml

  第二步:經過code換取網頁受權access_tokenjson

  第三步:拉取用戶信息(需scope爲 snsapi_userinfo)api

  微信網頁受權開發文檔請看官網:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

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

http://www.cnblogs.com/hiit/p/8669361.htmlui

相關文章
相關標籤/搜索