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#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
}