阿里云9.9元云服务器限时购买

PHP微信公众平台oauth2.0网页授权登录类的封装demo

一、微信授权使用的是OAuth2.0授权的方式。主要有以下简略步骤:

  第一步:用户同意授权,获取code

  第二步:通过code换取网页授权access_token

  第三步:拉取用户信息(需scope为 snsapi_userinfo)

  微信网页授权开发文档请看官网:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

二、我这里直接出代码了,一共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     * 1、用户授权并获取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     * 2、使用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     * 3、使用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 ?>

 三、觉得两个文件多,也可以用一个文件类封装。场景不同,喜欢哪个用哪个。

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

posted @ 2018-03-29 11:34  HIIT  阅读(1187)  评论(0编辑  收藏  举报
阿里云限时红包 最高 ¥ 2000 云产品通用红包,可叠加官网常规优惠使用