zoukankan      html  css  js  c++  java
  • PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)

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

      第一步:判断有没有code,有code去第三步,没有code去第二步

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

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

      第四步:使用access_token获取用户信息

      https://github.com/jijinduoduo/GetWxUser

    二、代码GetWxUser.php

     1 <?php
     2 /**
     3  * 获取微信用户信息
     4  * @author: Lucky hypo
     5  */
     6 class GetWxUser{    
     7     private $appid = '';
     8     private $appsecret = '';
     9    /**
    10     * 1、获取微信用户信息,判断有没有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     * 2、用户授权并获取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     * 3、使用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     * 4、使用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 ?>

    不足之处,请留言告知,谢谢!

  • 相关阅读:
    LDAP
    开源实时日志分析ELK平台部署
    js上传并且预览图片
    python logging的应用
    使用QQ第三方登录 并在父页面跳转刷新
    ubuntu sudo不能用的解决办法
    ubuntu 16.10安装nginx
    crontab 切割日志
    nginx的日志切割
    python对excel文件的读写操作
  • 原文地址:https://www.cnblogs.com/hiit/p/8669361.html
Copyright © 2011-2022 走看看