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

    现在就说说怎么通过网页授权获取用户基本信息(国家,省,市,昵称)等。

    必要条件:

    1)公众号认证

    2)有网页授权获取用户基本信息的权限接口

    注意:最近有朋友说:在公众平台申请的测试号,会出现无法取到用户信息。换到认证的公众账号就正常了!

          如果您也遇到这个问题,可以试试在认证的公众账号里测试一下! 感谢大家的支持!

    填写授权回调页面的域名

    登录公众平台-->开发者中心-->接口权限表

    找到 网页授权获取用户基本信息  然后修改-->填写你的域名.如下:

    保存即可!

    ---------------------------------------------------

    关于网页授权的两种scope的区别说明(官方)

    1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

    2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

    3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

    因为scope有两中模式,所以下面分开解说:

     

    scopesnsapi_base 那么用户必须是关注了公众号才能取得信息

    先自己建立两个文件: index.php  和  getUserInfo.php

    代码实例

    index.php如下:

    1
    2
    3
    4
    5
    //scope=snsapi_base 实例
    $appid='你的AppId';
    $redirect_uri = urlencode ( 'http://你的域名/getUserInfo.php' );
    $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
    header("Location:".$url);

    getUserInfo.php如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $appid "你的AppId";  
    $secret "你的AppSecret";  
    $code $_GET["code"];
     
    //第一步:取全局access_token
    $url "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
    $token = getJson($url);
     
    //第二步:取得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["access_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";
    $userinfo = getJson($get_user_info_url);
     
    //打印用户信息
      print_r($userinfo);
     
    function getJson($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

    scopesnsapi_userinfo 用户不用关注公众号,也能取到信息,但是会有一个界面让用户去点击确认!相当于一个登录授权吧!

    代码实例

    index.php如下:

    1
    2
    3
    4
    5
    //scope=snsapi_userinfo实例
    $appid='你的AppId';
    $redirect_uri = urlencode ( 'http://你的域名/getUserInfo.php' );
    $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);

    getUserInfo.php如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $appid "你的AppId";  
    $secret "你的AppSecret";  
    $code $_GET["code"];
     
    //第一步:取得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 $oauth2["access_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";
    $userinfo = getJson($get_user_info_url);
     
    //打印用户信息
      print_r($userinfo);
     
    function getJson($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

    测试步骤:

    创建index.php和getUserInfo.php两个文件后 

    先测试:scopesnsapi_base

    1)先关注公众账号

    2)将网址: http://你的域名/index.php 生成一个二维码! 

    3)用微信扫一扫

    再测试:scopesnsapi_userinfo

    1)替换代码

    2)取消关注当前公众号.

    3)然后用微信扫一扫,刚刚你生成的二维码.

    最后就结束了.....

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/whowhere/p/5787247.html
Copyright © 2011-2022 走看看