zoukankan      html  css  js  c++  java
  • php 微信授权登录

      1 <?php
      2 /**
      3  *微信授权实例
      4  */
      5 class ClassName extends AnotherClass
      6 {
      7     /**
      8     * wechat oauth 之后的回调页面
      9     */
     10     public function callback()
     11     {
     12         $this->_globals();
     13         if (!isset($_GET['code']) || !$_GET['code']) {
     14              echo "无效的地址";
     15              exit;
     16         }
     17         if ($_SERVER['HTTP_HOST'] == _WECHAT_OAUTH_DOMAIN) {
     18             //redirect to customer domain
     19             $customDomain = $_GET['state'];
     20             $url = "http://" . $customDomain . $_SERVER["REQUEST_URI"];
     21             header("Location: {$url}");
     22             exit;
     23         }
     24         $wechat = new Wechat($this->client['appid'], $this->client['appsecret']);
     25         $accessToken = $wechat->getAccessToken($_GET['code']);  //获取accessToken
     26         $userInfo = $wechat->getUserInfo($accessToken['access_token'], $accessToken['openid']); //获取用户信息
     27 
     28         $thirdUserMdl = model('CoreUserOpenids');
     29         $filter = array("client_id='{$this->client['id']}'", "utype='wechat'", "openid='{$userInfo['openid']}'");
     30         $res = $thirdUserMdl->getRow($filter);
     31        
     32         $userMdl = model('CoreUsers');
     33         $user = $userMdl->getRow(array("id='{$res['uid']}'"));
     34 
     35         $_SESSION['login_user'] = $user;
     36         $_SESSION['wechat_user'] = $res;
     37 
     38         $targetUrl = empty($_SESSION['target_url']) ? '/' : $_SESSION['target_url'];
     39         header('location:' . $targetUrl);
     40         exit;
     41     }
     42 
     43 
     44     public function getAuthorizeUrl($redirectUri, $scope = 'snsapi_userinfo', $state = '') {
     45         $baseurl = 'https://open.weixin.qq.com/connect/oauth2/authorize';
     46         $params = [
     47            'appid' => $this->appid,
     48            'redirect_uri' => $redirectUri,
     49            'response_type' => 'code',
     50            'scope' => $scope,
     51            'state' => $state,
     52         ];
     53         $url = $baseurl . '?' . http_build_query($params);
     54         return $url;
     55     }
     56 
     57 
     58     /**
     59      * Notes:code 换access_token
     60      * Created by xxg@seabig.cn
     61      * Date: 2020/5/8
     62      * Time: 0:38
     63      */
     64    public function getAccessToken($code) {
     65        $baseurl = 'https://api.weixin.qq.com/sns/oauth2/access_token';
     66        $params = [
     67            'appid' => $this->appid,
     68            'secret' => $this->appsecret,
     69            'code' => $code,
     70            'grant_type' => 'authorization_code',
     71        ];
     72        $url = $baseurl . '?' . http_build_query($params);
     73        $ch = curl_init();
     74        curl_setopt($ch, CURLOPT_URL, $url);
     75        curl_setopt($ch, CURLOPT_HEADER, 0);
     76        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     77        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
     78        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
     79        $res = curl_exec($ch);
     80        curl_close($ch);
     81        $json_obj = json_decode($res, true);
     82        $access_token = $json_obj['access_token'];
     83        $openid = $json_obj['openid'];
     84        $data = array("access_token" =>$access_token , "openid" => $openid);
     85        return $data;
     86    }
     87 
     88     /**
     89      * Notes:获取用户信息
     90      * Created by xxg@seabig.cn
     91      * Date: 2020/5/8
     92      * Time: 0:39
     93      */
     94     public function getUserInfo($access_token,$openid) {
     95        $baseurl = 'https://api.weixin.qq.com/sns/userinfo';
     96        $params = [
     97            'access_token' => $access_token,
     98            'openid' => $openid,
     99            'lang' => 'zh_CN',
    100        ];
    101        $url = $baseurl . '?' . http_build_query($params);
    102        $ch = curl_init();
    103        curl_setopt($ch, CURLOPT_URL, $url);
    104        curl_setopt($ch, CURLOPT_HEADER, 0);
    105        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    106        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    107        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    108        $res = curl_exec($ch);
    109        curl_close($ch);
    110        //解析json
    111        $userinfo = json_decode($res, true);
    112        return $userinfo;
    113     }
    117 }
  • 相关阅读:
    vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单
    设置git同时推送github和gitee远程仓库
    Spring Cloud实战 | 第一篇:Windows搭建Nacos服务
    winfrom 打开文件夹并定位到指定的文件
    winfrom 关于textbox回车事件有换行的问题
    winfrom切换账号功能
    解决winfrom最大化 窗体被任务栏挡住的问题
    winfrom解决控件闪烁
    winfrom防止程序多开
    c# 对象,IntPtr互转
  • 原文地址:https://www.cnblogs.com/xiangangXu1997/p/12469186.html
Copyright © 2011-2022 走看看