1、获取code
2、通过code获取用户openid
3、拿着用户的openid换取用户信息
1、构造请求url如下(只能在公众号内打开):
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://mascot.duapp.com/oauth2.php&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect
scope=snsapi_base 不会弹出授权框,为静默授权,
scope=snsapi_userinfo 会弹出授权框
2、在公众号内打开这个链接后会自动重定向到redirect_uri后的地址,并带上一个code,我们就可以通过截取url中的code获取他的值,值得注意的是,code有效期只有5分钟,并且只有第一次有效
http://israel.duapp.com?code=02a9bed29b2185a9f0ed3a48fe56e700&state=1
3、拿code换取用户的openid并获取用户的信息
//获取用户openid
//**这个appid一定要和第一步中的appid一样**
exports.getOpenid = function(appid,secret,code){
return new Promise((resolve, reject)=>{
let queryParams = {
'grant_type':'authorization_code',
'appid': appid,
'secret': secret,
'code':code
}
let options = {
method: 'GET',
url: 'https://api.weixin.qq.com/sns/oauth2/access_token?'+qs.stringify(queryParams)
};
request(options, function (err, res, body) {
if (res) {
resolve(JSON.parse(body));
} else {
reject(err);
}
});
})
}
返回参数:
{
"access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5Y6vey3dgDtFki5C8r6D0E6mSVxxtb8BjLMhb-mCyT_Yg",
"expires_in": 7200,
"refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5YBkF0ZUH1Ew8Iqea6x_itq13sYDqP1D7ieaDy9u2AHHw",
"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
"scope": "snsapi_base"
}
4、获取用户的信息
//获取用户信息
//access_token为公众号的access_token,是拿公众号的appid和appsecre获取的
exports.getuserinfo = function(access_token,openid){
return new Promise((resolve, reject)=>{
let queryParams = {
'access_token': access_token,
'openid': openid
}
let options = {
method: 'GET',
url: 'https://api.weixin.qq.com/cgi-bin/user/info?'+qs.stringify(queryParams)
};
request(options, function (err, res, body) {
if (res) {
resolve(JSON.parse(body));
} else {
reject(err);
}
});
})
}
返回结果:
{
"subscribe": 1,
"openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",
"nickname": "小小小石头",
"sex": 1,
"language": "zh_CN",
"city": "成都",
"province": "四川",
"country": "中国",
"headimgurl": "http://xxx",
"subscribe_time": 1386160805
}