zoukankan      html  css  js  c++  java
  • 微信开发之网页授权获取用户基本信息

    微信官方文档:网页授权获取用户基本信息

    具体而言,网页授权流程分为四步:
    1、引导用户进入授权页面同意授权,获取code
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

    2、通过code换取网页授权access_token(与基础支持中的access_token不同)
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    3、如果需要,开发者可以刷新网页授权access_token,避免过期
    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

    4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN //返回值无subscribe,就是不知道是否关注了微信号。网页授权获取用户信息,官方用的这个方法。

    https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN  //这样返回值有subscribe,但是官方没提这个方法。所以这里面的 access_token是不是网页授权的access_token?我不确准

    总之,这两个接口都是能获取用户信息。

    但不清楚的是红色接口,是否会导致 基础access_token 每日2000上限的问题。不知道怎么去验证???有经验的朋友可以留言点评,谢谢。

    关于第四步:拉取用户信息(需scope为 snsapi_userinfo)

    如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
    请求方法
    http:GET(请使用https协议)
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
    返回说明

    正确时返回的JSON数据包如下:

    {
    "openid":" OPENID",
    " nickname": NICKNAME,
    "sex":"1",
    "province":"PROVINCE"
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
    "privilege":[
    "PRIVILEGE1"
    "PRIVILEGE2"
    ],
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }

    说明:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 这个方法,获取的用户数据,没有关注信息(即 [subscribe] => 1)。

    而$get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";//这样调用就有subscribe。

    分享是一种美德,请阅代码!

    $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);

    //返回内容:     [subscribe] => 1 [openid] => oZE7SjqjC_A88aGfaj_X8tJDC  [nickname] => 大仙 [sex] => 1 [language] => zh_CN [city] => 大兴 [province] => 北京 [country] => 中国 [headimgurl]
    function getUserInfoAll($code)
    {
        $appid = WX_APP_ID;
        $secret = WX_SECRET;
     
        //第一步:取全局access_token $token =  $global_token;
        
        //第二步:取得openid
        $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
        $oauth2 = getJson($oauth2Url);
    
        //第三步:根据全局access_token和openid查询用户信息    $access_token = $token; 
        $openid = $oauth2['openid'];
        $get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";//有subscribe
        $userinfo = getJson($get_user_info_url);
        session_start();
        //     session_id($userinfo['openid']);
        if($userinfo['subscribe']==1){
            $_SESSION['userinfo']=$userinfo;
        }
            
        return $userinfo;
    }
    //返回无subscribe
    function getUserInfo($code)
    {
        $appid = WX_APP_ID;
        $appsecret = WX_SECRET;
        $access_token = "";
    
        //根据code获得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);
        $access_token = $access_token_array['access_token'];
        $openid = $access_token_array['openid'];
       
        //根据Access Token和OpenID获得用户信息
        $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid ";//无subscribe
        $userinfo = https_request($userinfo_url);
        $userinfo = json_decode($userinfo, true);
    
        return $userinfo;
    
    }
  • 相关阅读:
    引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
    Sublime Json 格式化
    gitlab 建立本地仓库
    R语言 启动报错 *** glibc detected *** /usr/lib64/R/bin/exec/R: free(): invalid next size (fast): 0x000000000263a420 *** 错误 解决方案
    范数
    SparkR-Install
    R语言扩展包dplyr——数据清洗和整理
    R语言与机器学习学习笔记
    sparkR原理
    data.frame类型数据如何将第一列值替换为行号
  • 原文地址:https://www.cnblogs.com/wellsoho/p/5089472.html
Copyright © 2011-2022 走看看