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)然后用微信扫一扫,刚刚你生成的二维码.

    最后就结束了.....

  • 相关阅读:
    闲谈随笔以及对自己的心里暗示
    java利用Scanner获取键盘输入
    【积累】发送验证码按钮倒计时js
    【积累】validate验证框架的使用
    重写toString()方法来描述一个类
    【java基础】 合并两个类型相同的list
    java单例类/
    基本类型的包装类
    强转
    【java基础】面向对象的三大特征---多态
  • 原文地址:https://www.cnblogs.com/whowhere/p/5787247.html
Copyright © 2011-2022 走看看