欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

6.1描述微信网页授权登录的流程。并写出示例代码

程序员文章站 2022-03-13 15:48:24
...

微信网页授权登录分为四个步骤

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

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

  • 3、第三步:刷新access_token(如果需要)

  • 4、第四步:拉取用户信息(需scope为 snsapi_userinfo)

         首先个人号可以使用测试账号进行开发,并且获取到appid和appsecret这两个参数

         首先通过appid获取code

         

  • 实例

    <?php 
    
       //获取code
        public function auth()
        {
            //var_dump(1);
            //向微信服务器请求成功时 微信服务器回调的url地址,
            //并且会以get方式带上code参数,此url地址必须是外网可访问的
            $redirect = urlencode("http://99d52e5a.ngrok.io/index.php/index/weixin/userinfo");
            $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".Config::get("wx.appid")."&redirect_uri=".$redirect."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
    
            header("Location:" . $url); //跳转url地址
        }

    运行实例 »

    点击 "运行实例" 按钮查看在线实例


  • 获取code之后,通过code参数及其他已有参数换取access_token,此access_token不是普通的access_token,普通的access_token是通过appid和secret参数获取的,它适用于其他接口的调用,获取用户信息时的access_token是通过code和其他参数获取的,这点一定要区分开。

           

实例

<?php 

    //通过code 获取access_token 用于获取用户信息
    public function auth_access_token($code)
    {
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".Config::get("wx.appid")."&secret=".Config::get("wx.appsecret")."&code=".$code."&grant_type=authorization_code";
          //通过curl的get请求方式发起请求,请求成功返回的是json字符串
            $json = $this -> curlRequest($url);  
            //将json字符串转为数组处理
            $arr = json_decode($json,true);
            //判断如果access_token不存在 则返回false
            if (!isset($arr['access_token'])){
                return false;
            }
            //返回整个数组 , 此数组有access_token 和openid 
            //注意:此access_token 不要做缓存,因为获取用户信息时是通过openid唯一确定用户的,每次都要从新获取
            return $arr;
    }

运行实例 »

点击 "运行实例" 按钮查看在线实例


实例

<?php

     //获取用户信息
    public function userinfo()
    {
        $code = input("get.code");  //回调成功后,接收code
        $res = $this -> model -> auth_access_token($code); //通过code换取access_token
        //如果获取access_token不成功或者用户刷新导致code丢失,则重定向再次获取code
        if(!$res){
            header('Location:http://99d52e5a.ngrok.io/index.php/index/weixin/auth');
            exit();
        }
        $access_token = $res['access_token'];
        $openid = $res['openid'];
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $json = $this -> model -> curlRequest($url);
        $arr = json_decode($json,true);
        dump($arr);   //至此,获取到用户信息

    }

运行实例 »

点击 "运行实例" 按钮查看在线实例