微信網頁靜默授權獲取用戶信息——koa2.x

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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章