node.js实现微信开发之获取用户授权

2020-06-17 06:53:03易采站长站整理

request(url, function (error, res, body) {
if (res) {
let bodyObj = JSON.parse(body)
resolve(bodyObj);
} else {
reject(error);
}
})
})
}

// 获取用户信息
const getUserInfo = ({ access_token, openid }) => {
let params = {
access_token,
openid,
lang: 'zh_CN'
};
let url = `https://api.weixin.qq.com/sns/userinfo?${qs.stringify(params)}`
return new Promise((resolve, reject) => {
request(url, function (err, res, body) {
if (res) {
resolve(JSON.parse(body))
} else {
reject(err);
}
});
})
}

// 获取微信授权 --- code
server.post('/getOauth2', (req, res) => {
try {
let params = req.body
let redirect_uri = params.url
let state = params.state
let type = params.type
// 第一步:用户同意授权,获取code
// type:snsapi_base // 不弹出授权页面,直接跳转,只能获取用户openid
// type:snsapi_userinfo // 弹出授权页面,可通过openid拿到昵称、性别、所在地
var scope = type // 弹出授权页面,拿到code
let url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.appId}&redirect_uri=${redirect_uri}&response_type=code&scope=${scope}${state ? '&state=' + state : ''}#wechat_redirect`
res.send({ url });
} catch (error) {
res.send(error)
}
})

// 获取用户个人信息
server.post('/getUserInfo', (req, res) => {
try {
let params = req.body
let code = params.code
// 先用 code 换取 openId 和 access_token
getOpenIdAndAccessToken(code).then(obj => {
// 用 openId 和 access_token 获取个人信息
getUserInfo(obj).then(data => {
res.send(data)
}).catch(error => res.send(error))
}).catch(error => res(error))
} catch (error) {
res.send(error)
}
})

整体功能实现的步骤和具体代码如上,请酌情参考。