zoukankan      html  css  js  c++  java
  • 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
    wxuserInfoUserInfo; include 'UserInfo.php'; $wx = new UserInfo(); $data = $wx->get_user_all();

    1配置文件config.php

     1 <?php
     2 namespace wxwxConfig;
     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 wxuserInfo;
     3 use wxwxConfigConfigTool;
     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

  • 相关阅读:
    HDU 3501 Calculation 2 ——Dirichlet积
    BZOJ 1101 [POI2007]Zap ——Dirichlet积
    BZOJ 1257 [CQOI2007]余数之和sum ——Dirichlet积
    SGU 194 Reactor Cooling ——网络流
    BZOJ 1497 [NOI2006]最大获利 ——网络流
    BZOJ 2705 [SDOI2012]Longge的问题 ——Dirichlet积
    BZOJ 1653 [Usaco2006 Feb]Backward Digit Sums ——搜索
    BZOJ 1861 [Zjoi2006]Book 书架 ——Splay
    BZOJ 3130 [Sdoi2013]费用流 ——网络流
    BZOJ 3990 [SDOI2015]排序 ——搜索
  • 原文地址:https://www.cnblogs.com/hiit/p/8668808.html
Copyright © 2011-2022 走看看