微信公众号开发之网页授权(获取用户信息)

质行      2022-02-13     765

关键词:

  这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究。

昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇。实现本篇涉及的

功能,还需要完成一些基础。在写完这篇博客后,我会尽快补上。

 

-------------------------废话不多说直入正题

需要的工具:

微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了)

服务器(可以自行购买,我使用的是新浪的sae。)

编辑器(随意,不做推荐)

微信公众号开发文档(地址

 

-------------------------官方文档解读(只说我读到的信息)

!!!!!完成基本配置后才能进行一下工作,配置信息在这。(稍后补上)

你要完成网页授权,并获取用户信息要完成一下3步骤。

-1-用户授权并获取code

-2-使用code换取access_token

-3-使用access_token获取用户信息

 

--------------------用户授权并获取code

参数说明
appid=APPID(公众号唯一标识)
redirect_uri=REDIRECT_URI(授权后重定向的回调链接地址)
response_type=code(返回类型,无需更改)
scope=SCOPE(snsapi_base ,不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo 弹出授权页面,可通过openid拿到昵称、性别、所在地。)
state=STATE(重定向后会带上state参数,开发者可以填写任意参数值)
#wechat_redirect(无需更改)

地址实例(虽是测试号,但我还是隐藏部分信息)红色字体需要根据实际更改。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe5809c42e6c00d22&redirect_uri=http://dingcanphp.applinzi.com/getUserInfo.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

返回结果(code的值,不一定是显示在浏览器界面上的,具体看你的redirect_uri中的文件)
061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q

-----------------使用code换取access_token

参数说明
appid=APPID(公众号唯一标识)
secret=SECRET(公众号的appsecret)
code=CODE(第一步获取的code参数)
grant_type=authorization_code(无需更改)


地址实例(虽是测试号,但我还是隐藏部分信息)红色字体需要根据实际更改。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxe5809c42e6c00d22&secret=5444ba1b31666f6052e9c703f906368b&code=061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q&grant_type=authorization_code

返回结果(json格式数据)
{
"access_token": "e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0",
"expires_in": 7200,
"refresh_token": "0iVsXn4O1rBCASbO7hx8VNVUVFM1RP2Q4xS0giegd4jlIsJYOjTJNZ0b4Dsh_xcoB02ZZ3bt0WH0a47LvjIEPjWUnESJCZyl6EtY_xYZdVs",
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"scope": "snsapi_userinfo"
}

结果解释
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

 

-----------------使用access_token获取用户信息

参数说明
access_token=ACCESS_TOKEN(第2步获取的access_token参数,此access_token与基础支持的access_token不同)
openid=OPENID(第2步获取的openid参数)
langlang=zh_CN 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

地址实例(虽是测试号,但我还是隐藏部分信息)红色字体需要根据实际更改。
https://api.weixin.qq.com/sns/userinfo?access_token=e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0&openid=o47Fa0mp9SRTf3eiKmqWm69BjG_8&lang=zh_CN

返回结果(json格式数据)
{
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"nickname": "齐齐",
"sex": 0,
"language": "zh_CN",
"city": "Shaoxing",
"province": "Zhejiang",
"country": "CN",
"headimgurl": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6kqfcibzzVc8MDGBch53mIgJjWrbKSwkBnzcsWBOMOGlg/0",
"privilege": []
}

结果解释
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

---------------------------------代码实现

解读完文档,理解实现的步骤、过程,那就开始具体的代码实现。

接触过php,但是没系统性的学习一下,所以代码实现的时候有些困难,如果不懂phpd的可以看这

 

直接上代码,在需要的地方我以注释的形式说明。

命名为login.php放在服务器根目录。

<?php
    $appid='wxe5809c42e6c00d2d';
    $redirect_uri = urlencode ( 'http://dingcanphp.applinzi.com/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 报头。
?>

命名为getUserInfo.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['nickname'];//获取nickname对应的值,即用户名
        print '<h2 style="text-align:center">用户名:'.$xinxi.'</h2>';//打印输出
    }else{
        echo "NO CODE";
    }
    
    function getUserInfo($code)
    {
        $appid = "wxe5809c42e6c00d2d";
        $appsecret = "506eba1b31666f6052e9c703f906368b";

        //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对应的值

        //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,ture);
        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;
    }
?>

自定义函数中的curl

 

--------------------------网页授权,用户信息的获取体验

两种体验方式。需要完成配置后实现。

微信公众号自动回复中:

//自动回复模式
        if (strstr($keyword, "文本")){
            $content = "这是个文本";
        }else if (strstr($keyword, "登录")){
            $content = "OAuth2.0网页授权演示\n";
            $content .= '<a href="http://dingcanphp.applinzi.com/login.php">点击这里体验</a>';
            $content .="\n".'<a href="https://jq.qq.com/?_wv=1027&k=4BeSCye">技术支持 现代软件工程工作室</a>';
        }else{
            $content = date("Y-m-d H:i:s",time())."\n\n".'技术支持 现代软件工程工作室';
        }

 

菜单点击访问:

{
    "button": [
             {
                    "type":"view",
                    "name":"餐厅信息",
                    "url":"http://dingcanphp.applinzi.com/index/canting.html"
                },
         {
            "name": "帮助",
            "sub_button": [
                {
                         "type":"view",
                         "name":"天气查询",
                         "url":"http://dingcanphp.applinzi.com/index/tianqi.html"
                },
        {
                         "type":"view",
                         "name":"网页授权",
                         "url":"http://dingcanphp.applinzi.com/login.php"
                }
            ]
        }    
    ]
}

 

效果图展示:

 

谢谢阅读,如有不足,请赐教。

 

微信之网页授权获取用户基本信息

微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。//login.php授权登录进行回调<?php//scope=snsapi_use... 查看详情

微信网页授权认证获取用户的详细信息,实现自动登陆-微信公众号开发干货

...了解什么web开发工具:官方提供的开发工具,使用自己的微信号来调试微信网页授权、调试、检验页面的JS-SDK相关功能与权限,模拟大部分SDK的输入和输出。下载地址:w 查看详情

微信网页授权-公众号支付(获取openid用户信息等)

...公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要使用微信公号支付功能才能实现,微信公众号支付功能需要用户的openid,所以进入页面时需要通过网页授权首先获取到openid。 ... 查看详情

微信公众号定制开发(代码片段)

 1、配置公众号  -开发-网页服务-网页授权-修改 网页授权获取用户基本信息 授权域名。(注:公众号自动回复开发,需要开启  服务器配置,单独的获取用户信息则不需要。jssdk是白名单授权管理。)2、... 查看详情

php微信登录公众号获取用户信息微信网页授权

php微信登录公众号获取用户信息微信网页授权先自己建立两个文件: index.php 和 getUserInfo.phpindex.php<?php//scope=snsapi_userinfo实例$appid=‘‘;//填写你公众号的appid$redirect_uri=urlencode(‘http://fenlei.sun0758.com/WX/getUs 查看详情

springboot项目之微信支付功能实现详细介绍

对接微信支付功能主要有以下几个步骤,而其第一个关键点就是获取OpenID,在这里介绍两种获取方式:   一、微信授权微信网页授权如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获... 查看详情

微信网页授权基本步骤

参考技术A一、首先在微信公众平台配置授权回调地址(“开发-接口权限-网页服务-网页帐号-网页授权获取用户基本信息”的配置选项中,修改授权回调域名);二、关于网页授权的两种scope的区别说明1、以snsapi_base为scope发起的网页... 查看详情

java微信公众平台开发之oauth2.0网页授权

根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发-接口权限-网页服务-网页帐号-网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名... 查看详情

php微信接口开发之高级篇之网页授权获取用户基本信息

PHP微信接口开发之高级篇之网页授权获取用户基本信息  二、WEB开发工具  查看详情

微信网页开发

微信网站一般是先要微信网页授权后获取到access_token,才有资格获取用户信息的,所以如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。第一步是先获取用... 查看详情

nodejs开发微信公众号微信网页授权

微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理、个人等信息的权限。对于开发了自己的网页app应用时,获取个人的信息非常重要。上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需要网... 查看详情

微信网页授权获取用户基本信息--php

现在就说说怎么通过网页授权获取用户基本信息(国家,省,市,昵称)等。 必要条件:1)公众号认证2)有网页授权获取用户基本信息的权限接口 注意:最近有朋友说:在公众平台申请的测试号,... 查看详情

微信网页授权获取用户基本信息--php

现在就说说怎么通过网页授权获取用户基本信息(国家,省,市,昵称)等。 必要条件:1)公众号认证2)有网页授权获取用户基本信息的权限接口 注意:最近有朋友说:在公众平台申请的测试号,... 查看详情

微信网页授权获取用户基本信息

微信公众号可以通过微信网页授权机制,来获取用户基本信息,可以用于微信登录功能关于网页授权的两种scope的区别说明1、静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权... 查看详情

前端对接微信公众号网页开发流程,前期配置(代码片段)

微信公众号网页开发,其实就是我们开发的h5网页需要放到微信浏览器环境中使用,但是需要对接公众号授权,授权之后可以获取到用户的个人信息,以及可以使用公众号提供的一些API,如:图片上传、图片预... 查看详情

微信公众平台开发:通过oauth2.0方式不弹出授权页面获得用户基本信息

参考技术A登陆微信公众平台,菜单“设置”→“公众号设置”→功能设置→网页授权域名【定义】授权回调页面域名:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确... 查看详情

微信网页授权流程(前端篇)

功能描述公司最近有个项目要做基于微信的H5校服定制wepApp的开发,之前完全没有接触过微信开发,很是兴奋,有种磨刀霍霍向猪羊的感觉。由于本人经验有项,描述不准确的地方请大家及时指出。功能描述:当用户点击如下所示... 查看详情

openid和oauth有啥区别

...果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公... 查看详情