教你写,微信公众号网页授权以及获取微信个人信息

前言

我们在开发的过程,可能会遇到一些需求,比如要获取微信公众号用户的信息,这个时候,我们就要通过微信公众号网页授权来获取

准备步骤


1.在此之前,为了我们方便去测试,我们先去微信申请接口测试号,https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 这个就是测试号申请地址,然后我们扫码登陆一下
ooo1.png
然后往下拉,找到网页授权,点击一下修改,然后填一下你要回调的域名,我下面授权的域名gzh.zhihao1.cn作为测试
oo2.png
2.在做开发之前,首页我们阅读一下微信公众号官方提供的文档,有关的微信公众号网页授权也在刚才修改网页授权回调域名的地方.
oo3.png

3.通过文档我们不难看出,首先我们要获取code,再通过code去获取到access_token和openid,拿到用户的openid后,再去获取用户信息的就可以了
oo4.png

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

直接上代码了
index.php

<?php
    $appid='wxd69bfad9e18aa02b';
    $redirect_uri = urlencode ( 'http://gzh.zhihao1.cn/getUserInfo.php' );//将字符串以 URL 编码。
    $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
    header("Location:".$url);//header() 函数向客户端发送原始的 HTTP 报头。
?>

提交的参数,和获取到的参数可以自行看一下微信公众号的文档
当用户点击授权,我们会得到返回code到getUserInfo.php这个文件里

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

然后我们创建getuserinfo.php文件,这个文件里授权后重定向的回调链接地址,我们要接收一下get请求,传过来的code,有code之后接下就好办,获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求参数和返回值话可以自行看一下微信公众号
index.php

<?php
header("content-type:text/html;charset=utf-8");
    $code = $_GET["code"];//预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
    if (isset($_GET['code'])){//判断code是否存在
        $userinfo = getUserInfo($code);
         $appid = "wxd69bfad9e18aa02b";
        $appsecret = "186905023306451c202b992df6e5d43a";

        //Get access_token
        $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
        $res=file_get_contents($access_token_url);
          $access_token_array = json_decode($access_token_json,true);//对 JSON 格式的字符串进行解码,转换为 PHP 变量,自带函数
        //获取access_token
        $access_token = $access_token_array['access_token'];//获取access_token对应的值
        //获取openid
        $openid = $access_token_array['openid'];//获取openid对应的值
        }
    else{
        echo "NO CODE";
    }

以上就是完成了我们整个网页授权的过程。拿到openid后,接下来我们就置换用户信息了

第三步用openid和access_token获取用户个人信息

接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_C
为了方便我们对getuserinfo.php重新写一个方法给他调用
完整的index.php

<?php
    header("content-type:text/html;charset=utf-8");
    $code = $_GET["code"];//预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
    if (isset($_GET['code'])){//判断code是否存在
        $userinfo = getUserInfo($code);
        // $xinxi = $userinfo['ni'];//获取nickname对应的值,即用户名
        print '<h2 style="text-align:center">用户名:'.$userinfo['nickname'].'</h2>';//打印输
        print '<img src="'.$userinfo['headimgurl'].'" alt="">';//打印输
        print '<h2 style="text-align:center">城市:'.$userinfo['city'].'</h2>';//打印输
    }else{
        echo "NO CODE";
    }
    
    function getUserInfo($code)
    {
        $appid = "wxd69bfad9e18aa02b";
        $appsecret = "186905023306451c202b992df6e5d43a";

        //Get access_token
        $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
        $access_token_json = https_request($access_token_url);//自定义函数
        $access_token_array = json_decode($access_token_json,true);//对 JSON 格式的字符串进行解码,转换为 PHP 变量,自带函数
        //获取access_token
        $access_token = $access_token_array['access_token'];//获取access_token对应的值
        //获取openid
        $openid = $access_token_array['openid'];//获取openid对应的值
        // var_dump($openid);
        // die;
        //Get user info
        $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid";
        $userinfo_json = https_request($userinfo_url);
        $userinfo_array = json_decode($userinfo_json,true);
        return $userinfo_array;
    }

    function https_request($url)//自定义函数,访问url返回结果
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl,  CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        if (curl_errno($curl)){
            return 'ERROR'.curl_error($curl);
        }
        curl_close($curl);
        return $data;
    }
?>

所有的请求参数和返回值请看微信公众号文档。毕竟文档才是开发员的必须的啊
以上的过程我们就完成了微信的网页授权和获取个人信息,其实我们还可以封装成更好的方法

结尾&总结

多看文档,多学习,其实整个步骤实现的过程挺简单的。

最后修改:2020 年 05 月 05 日 09 : 12 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论