微信 oauth授权 获取用户的信息

应用场景

(1)点击菜单直接链接跳转,这样直接跳是获取不到用户的openid的,需要用到这个

(2)获取用户的一些基本信息,头像,呢称,需要用到这个

准备

需要在公众号里面配置一个应用域名,不配置这个的话,跳转后就是空白页面

步骤

(一)

//$callback="一个回调的网址比如http://www.baidu.com/auth.php";
        $param [‘redirect_uri‘] = $callback . ‘&getOpenId=1‘;//&getOpenId=1 这个参数是自己加着用的,跟微信无关
        $param [‘response_type‘] = ‘code‘;
        $param [‘scope‘] = ‘snsapi_userinfo‘;
        $param [‘state‘] = 123;
                $param [‘appid‘] = $info [‘appid‘];

//拼凑出一个url  请求此url
        $url = ‘https://open.weixin.qq.com/connect/oauth2/authorize?‘ . http_build_query ( $param ) . ‘#wechat_redirect‘;

/*url大致的样子如下
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxxxxxxx8xx9b9&redirect_uri=http%3A%2F%2Fxxxn.xingames.com%2Fweiphp%2Fixxxex.php%3Fs%3D%2Faddon%2FMxxber%2FMexxxber%2Findex%26getOpenId%3D1&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
*/

        redirect ( $url );    

***$param [‘scope‘] = ‘snsapi_userinfo‘诸如这样的参数什么意思,可以查询微信的手册

地址:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

(二) 跳转到上面的url后,微信会返回给你这个url 大致如下

http://weixin.xxxxs.com/weiphp/index.php?s=/addon/Memxxx/Mxxxber/ixxdex&getOpenId=1&code=021f5ed2e0e52421c27450565a5176aS&state=123

因为 这里可以通过 $_GET 获取一个叫code的东西 $code=$_GET[‘code‘];

(三)根据这个code 获取openid

$param [‘secret‘] = $info [‘secret‘];
$param [‘code‘] = I ( ‘code‘ );
$param [‘grant_type‘] = ‘authorization_code‘;

        $url = ‘https://api.weixin.qq.com/sns/oauth2/access_token?‘ . http_build_query ( $param );
        $content = file_get_contents ( $url );
        $content = json_decode ( $content, true );

/***这个$content 大概内容下{    "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",    "expires_in": 7200,    "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",    "scope": "snsapi_userinfo,"}**********/
        redirect ( $callback . ‘&openid=‘ . $content [‘openid‘] );/**最后跳转的url大概如下http://weixin.xixxxxxxs.com/weiphp/index.php?s=/addon/Mexx/Mexxr/indxex&getOpenId=1&code=021f5edxxxxxxx0565a5176aS&state=123 &openid=oV6rHt3zxxxxhIi24  这样openid就能获取到了 还有个access_token 是获取用户信息要用到的,  */

(四)能得到openid,基本就能标示用户的身份了,这样很多功能就ok了

这里就获取到openid了,

然后这里有个access_token称呼为授权token

还有一个access_token称呼为全局token =》是使用AppID和AppSecret获取

这俩都能获取到一些用户信息

区别就是授权的那个,如果是认证服务号使用的话,就不需要弹出微信的授权登陆确认,给用户的体验更好一些

=====》

先看授权token,这个能接上面第三步

第三步获取到授权的access_token和openid后

继续请求这个地址

    $param2 [‘access_token‘] = $access_token;
    $param2 [‘openid‘] = $openid;
    $param2 [‘lang‘] = ‘zh_CN‘;

    $url = ‘https://api.weixin.qq.com/sns/userinfo?‘ . http_build_query ( $param2 );

/**url大体这个样子
https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc

*/
    $content = file_get_contents ( $url );
    $content = json_decode ( $content, true );

/**
content大体这个样子
{
    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
    "nickname": "sb",
    "sex": 1,
    "language": "zh_CN",
    "city": "深圳",
    "province": "广东",
    "country": "中国",
    "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0",
    "privilege": []
}

*/
    return $content;

这样就获取到了

这里基本就完了

=====》使用全局access_token获取用户信息

(一)获取access_token

直接上一个函数 weiphp的函数

// 获取access_token,自动带缓存功能
function get_access_token($token = ‘‘) {
    empty ( $token ) && $token = get_token ();
    $key = ‘access_token_‘ . $token;
    $res = S ( $key );
    if ($res !== false)
        return $res;

    $info = get_token_appinfo ( $token );
    if (empty ( $info [‘appid‘] ) || empty ( $info [‘secret‘] )) {
        S ( $key, 0, 7200 );
        return 0;
    }

    $url = ‘https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=‘ . $info [‘appid‘] . ‘&secret=‘ . $info [‘secret‘];
    $tempArr = json_decode ( file_get_contents ( $url ), true );
    if (@array_key_exists ( ‘access_token‘, $tempArr )) {
        S ( $key, $tempArr [‘access_token‘], 7200 );
//S是thinkphp的缓存函数,这个要缓存,有请求次数限制
        return $tempArr [‘access_token‘];
    } else {
        return 0;
    }
}
简单来说 就是使用appid和appsecret请求下面这个地址https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

(二)结合access_token和openid来获取用户信息

这里比较郁闷的就是需要openid,如果是推送消息方式,比如用户发送抽奖,微信推送一个抽奖页面过去的方式,这种在用户发送消息的xml内容中就包含openid了,好说

如果是直接点击链接菜单跳转,那么还是需要先走最上面的方法,来获取openid

$param [‘scope‘] = ‘snsapi_userinfo‘这个改为snsapi_base 就能获取openid,是未认证的公众号也能使用的有了openid之后

再来一个函数
function getWeixinUserInfo($openid, $token) {
    $access_token = get_access_token ( $token );
    if (empty ( $access_token )) {
        return false;
    }

    $param2 [‘access_token‘] = $access_token;
    $param2 [‘openid‘] = $openid;
    $param2 [‘lang‘] = ‘zh_CN‘;

    $url = ‘https://api.weixin.qq.com/cgi-bin/user/info?‘ . http_build_query ( $param2 );
    $content = file_get_contents ( $url );
    $content = json_decode ( $content, true );
    return $content;
}

也就是用access_token和openid来请求

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID

最后也能获取到用户的信息

时间: 2024-11-05 11:23:51

微信 oauth授权 获取用户的信息的相关文章

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

现在就说说怎么通过网页授权获取用户基本信息(国家,省,市,昵称)等. 必要条件: 1)公众号认证 2)有网页授权获取用户基本信息的权限接口 注意:最近有朋友说:在公众平台申请的测试号,会出现无法取到用户信息.换到认证的公众账号就正常了! 如果您也遇到这个问题,可以试试在认证的公众账号里测试一下! 感谢大家的支持! 填写授权回调页面的域名 登录公众平台-->开发者中心-->接口权限表 找到 网页授权获取用户基本信息  然后修改-->填写你的域名.如下: 保存即可! ------------

微信网页授权获取用户信息等机制

参考官方文档 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 1.用户进入授权界面(APP?WeChat) 引导用户打开链接: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=S

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

第一步:修改网页授权安全域名,什么叫安全域名?安全域名就是说只有这个域名的网页才可以安全的进行网页授权以及获取用户信息. 第二步:下载下这个 MP_verify_Sb2ASLINFP09cMn6.txt(点击下载)放到你的服务器根目录下,可以通过你上面配置的域名直接访问的到,即:http://www.zheyue.me/MP_verify_Sb2ASLINFP09cMn6.txt  可以访问的到.点击确认完成. 第三步: 对自己做的网页地址进行包装,引导客户点击新包装的地址即可.例: https

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

配置回调域名: 1. 引导用户进入授权页面同意授权,获取code 2. 通过code换取网页授权access_token(与基础支持中的access_token不同) 3. 如果需要,开发者可以刷新网页授权access_token,避免过期 4. 通过网页授权access_token和openid获取用户基本信息 先自己建立两个文件: index.php  和  getUser.php 代码实例 index.php如下: 1 <?php 2 $appid = "公众号的appid"

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

1 class class_weixin 2 { 3 var $appid = APPID; 4 var $appsecret = APPSECRET; 5 6 //构造函数,获取Access Token 7 public function __construct($appid = NULL, $appsecret = NULL) 8 { 9 if($appid && $appsecret){ 10 $this->appid = $appid; 11 $this->appsec

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

微信公众号可以通过微信网页授权机制,来获取用户基本信息,可以用于微信登录功能 关于网页授权的两种scope的区别说明 1.静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往是业务页面) 2.显示授权:以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的.但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的

c# 微信开发 《获取用户的信息》

public const string WeiXin_User_GetInfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN"; /// <summary> /// 根据OpenID 获取用户在微信的基本信息(需关注公众号) /// </summary> /// <param name="openId

java 获取微信 页面授权 获取用户openid

先调用微信的地址 跳转https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4b4009c4fce00e0c&redirect_uri=这里填写你要跳到请求页面授权域名l&response_type=code&scope=snsapi_base&state=123#wechat_redirect 返回redirect_uri/?code=""&status=""

微信通过授权获取用户的基本信息

一.填写授权回调页面的域名 二.引导用户到指定的授权页面 例如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect redirect_uri 是一个 url 三.最后奉上完整实现的代码 下面是完整的代码,希望对大家有用. 1 <